Staging_Environment/create_staging

137 lines
3.9 KiB
Plaintext

type: install
name: Staging Environment
description: Create staging environment from selected live environment
logo: https://d33v4339jhl8k0.cloudfront.net/docs/assets/629d6154f38bfd3f4a4c3046/images/62ce4ffaeabe9a7235b3d220/white-300.png
skipNodeEmails: false
settings:
fields:
- caption: Target Environment
editable: true
type: envlist
name: sourceEnv
valueField: shortdomain
tooltip: Select the Target Environment
- type: string
name: nodeGroup
caption: Node Group
default: cp
hideLabel: true
hidden: true
- caption: Display Name
editable: true
type: string
name: displayName
default: My Environment
tooltip: Enter the desired display name for the environment
- caption: Environment Name
type: envname
name: stagingEnv
randomName: true
showFullDomain: true
hidden: false
dependsOn: regionFieldName
displayName: ${settings.displayName}
onInstall:
- initNodes:
envName: ${settings.sourceEnv}
namespace: sourceEnv
- cloneSource
- remoteOperations:
envName: ${settings.sourceEnv}
nodeGroup: ${settings.nodeGroup}
cmd: |-
mkdir /var/www/webroot/ROOT/dbexport
touch /var/www/webroot/ROOT/dbexport/dbexport.sql
wp db export /var/www/webroot/ROOT/dbexport/dbexport.sql --path=/var/www/webroot/ROOT/ --quiet
user: root
sayYes: true
- initNodes:
envName: ${settings.stagingEnv}
namespace: stagingEnv
- mountLive: NFS4
actions:
initNodes:
envName: ${this.envName}
namespace: ${this.namespace}
script: |
let nodes = {}, resp = api.env.control.GetEnvInfo(envName, session)
if (resp.result != 0) return resp
resp.nodes.sort((node1, node2) => node1.id - node2.id)
for (let node of resp.nodes) {
nodes[node.nodeGroup] = nodes[node.nodeGroup] || []
nodes[node.nodeGroup].push(node)
}
let globals = {}
globals[namespace] = nodes
return { result: 0, onAfterReturn: { setGlobals: globals } }
cloneSource:
- env.control.CloneEnv:
envName: ${settings.sourceEnv}
srcEnvName: ${settings.sourceEnv}
dstEnvName: ${settings.stagingEnv}
useExternalMounts: false
remoteOperations:
env.control.ExecCmdByGroup:
envName: ${settings.sourceEnv}
nodeGroup: ${this.nodeGroup}
commandList:
- command: ${this.cmd}
mountLive:
- log: Mount Storage
- env.file.AddMountPointById:
envName: ${settings.stagingEnv}
nodeId: ${globals.stagingEnv.cp[0].id}
path: /var/www/webroot/sourcefiles
protocol: nfs4
sourcePath: /var/www/webroot/ROOT
sourceNodeId: ${globals.sourceEnv.cp[0].id}
name: LiveFilesMount
readOnly: false
addons:
- id: LiveSync
targetNodes:
envName: ${settings.sourceEnv}
nodeGroup: ${settings.nodeGroup}
onInstall:
writeFile:
- nodeGroup: ${settings.nodeGroup}
path: /var/www/webroot/ROOT/sycfromlive.sh
body: '#!/bin/bash
cp -R -u /var/www/webroot/sourcefiles/* /var/www/webroot/ROOT
wp db import /var/www/webroot/sourcefiles/dbexport/dbexport.sql --path=/var/www/webroot/ROOT/ --quiet
'
cmd [cp]:
- chmod 701 /var/www/webroot/ROOT/sycfromlive.sh
actions:
liveSync:
cmd [cp]:
- /var/www/webroot/ROOT/sycfromlive.sh
user: root
sayYes: true
buttons:
- caption: Sync From Live
action: liveSync
loadingText: Syching from live...
confirmText: Do you want to initiate sync process?
successText: The syching process has been finished successfully.