From 030d5c12e9ee577873aee44d18a6badbde82d5f4 Mon Sep 17 00:00:00 2001 From: jay Date: Thu, 7 Sep 2023 07:11:24 +0000 Subject: [PATCH] Add create-staging-env-with-addon This works. Have to adjust syncfromlivetostaging.sh. Domain replacement works first time, but subsequent runs will result to Replacement value is identical to search value. Because on subsequent runs, the imported database will have the same url as that of the source. --- create-staging-env-with-addon | 175 ++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 create-staging-env-with-addon diff --git a/create-staging-env-with-addon b/create-staging-env-with-addon new file mode 100644 index 0000000..8c055c5 --- /dev/null +++ b/create-staging-env-with-addon @@ -0,0 +1,175 @@ +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: |- + rm -r /var/www/webroot/ROOT/dbexport; 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 + wget --directory-prefix=/var/www/webroot/ROOT/ https://deploy-proxy.mightybox.io/kits/Staging_Environment/raw/branch/main/getlivedomain.sh + chmod 701 /var/www/webroot/ROOT/getlivedomain.sh + user: root + sayYes: true + - initNodes: + envName: ${settings.stagingEnv} + namespace: stagingEnv + + - mountLive: NFS4 + - createLocalScript + - installSyncAddon + + + + +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 + + createLocalScript: + - env.control.ExecCmdByGroup: + envName: ${settings.stagingEnv} + nodeGroup: cp + commandList: + - command: |- + wget --directory-prefix=/var/www/webroot/ROOT/ https://deploy-proxy.mightybox.io/kits/Staging_Environment/raw/branch/main/syncfromlivetostaging.sh + chmod 701 /var/www/webroot/ROOT/syncfromlivetostaging.sh + + installSyncAddon: + + install: + envName: ${settings.stagingEnv} + nodeGroup: cp + jps: + type: update + name: Sync From Live + description: Sync from live website + + actions: + LiveToStagingSync: + - env.control.ExecCmdByGroup: + envName: ${settings.sourceEnv} + nodeGroup: cp + commandList: + - command: |- + cd /var/www/webroot/ROOT/ && wp db export /var/www/webroot/ROOT/dbexport.sql --path=/var/www/webroot/ROOT/ + cd /var/www/webroot/ROOT/ + ./getlivedomain.sh + - env.control.ExecCmdByGroup: + envName: ${settings.stagingEnv} + nodeGroup: cp + commandList: + - command: |- + cd /var/www/webroot/ROOT/ + ./syncfromlivetostaging.sh + + StagingToLiveSync: + - cmd [cp] : |- + cd /var/www/webroot/ROOT/ && wp db export /var/www/webroot/sourcefiles/dbexport.sql --path=/var/www/webroot/ROOT/ && cp -R -u /var/www/webroot/ROOT/* /var/www/webroot/sourcefiles/ + - env.control.ExecCmdByGroup: + envName: ${settings.sourceEnv} + nodeGroup: cp + commandList: + - command: |- + cd /var/www/webroot/ROOT/ && wp db import /var/www/webroot/ROOT/dbexport.sql --path=/var/www/webroot/ROOT/ && wp cache flush + + + buttons: + - caption: Sync From Live + action: LiveToStagingSync + confirmText: Do you want to initiate sync process? + loadingText: Syching from live... + successText: The syching process has been finished successfully. + logsPath: "/var/www/webroot/LiveToStagingSync.log" + logsNodeGroup: cp + + menu: + confirmText: Do you really want to sync this staging environemnt to the Live site? + loadingText: Load text while waiting + action: StagingToLiveSync + caption: Sync To Live + successText: Staging site synched to Live succesfully + title: Sync Staging To Live + submitButtonText: Sync To Live + logsPath: "/var/www/webroot/StagingToSyncSync.log" + logsNodeGroup: cp \ No newline at end of file