#!/bin/nsh zmodload zsh/datetime #blcli_setjvmoption -Dcom.bladelogic.cli.execute.quietmode.enabled=true if [[ "${CLI_INTERACTIVE}" != "false" ]] then blcli_setoption roleName BLAdmins blcli_setoption serviceProfileName defaultProfile fi blcli_connect ADVANCED=1 BASIC=0 ERROR_ONLY=0 ERROR_AND_WARNING=1 ALL_INFO=2 DEPLOY_TYPE=${ADVANCED} SIMULATE=true COMMIT=true INDIRECT=false LOG_LEVEL=$ERROR_AND_WARNING EXECUTE_BY_PHASE=true RESET_ON_FAILURE=false ALLOW_ROLLBACK=true ROLLBACK_ON_FAILURE=true REBOOT_IF_REQUIRED=true COPY_LOCKED_FILES=true STAGE_AFTER_SIMULATE=true COMMIT_AFTER_STAGE=true SINGLE_DEPLOY_MODE=true ENABLE_SINGLE_USER_MODE=true SINGLE_USER_MODE=0 REBOOT_MODE=3 ENABLE_MAX_DEPLOY_WAIT_TIME=true MAX_DEPLOY_WAIT_TIME=30 ENABLE_AGENT_CONN_TIMEOUT=true AGENT_CONN_TIMEOUT=60 FOLLOW_SYMLINKS=true IS_RECONFIGURE_REBOOT_AT_JOB_LEVEL=false ITEM_RECONFIGURE_REBOOT=1 BASIC_DEPLOY_OPTS="${SIMULATE} ${COMMIT} ${INDIRECT}" ADVANCED_OPTS="${LOG_LEVEL}" ADVANCED_OPTS="${ADVANCED_OPTS} ${EXECUTE_BY_PHASE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${RESET_ON_FAILURE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${ALLOW_ROLLBACK}" ADVANCED_OPTS="${ADVANCED_OPTS} ${ROLLBACK_ON_FAILURE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${REBOOT_IF_REQUIRED}" ADVANCED_OPTS="${ADVANCED_OPTS} ${COPY_LOCKED_FILES}" ADVANCED_OPTS="${ADVANCED_OPTS} ${STAGE_AFTER_SIMULATE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${COMMIT_AFTER_STAGE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${SINGLE_DEPLOY_MODE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${ENABLE_SINGLE_USER_MODE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${SINGLE_USER_MODE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${REBOOT_MODE}" ADVANCED_OPTS="${ADVANCED_OPTS} ${ENABLE_MAX_DEPLOY_WAIT_TIME}" ADVANCED_OPTS="${ADVANCED_OPTS} ${MAX_DEPLOY_WAIT_TIME}" ADVANCED_OPTS="${ADVANCED_OPTS} ${ENABLE_AGENT_CONN_TIMEOUT}" ADVANCED_OPTS="${ADVANCED_OPTS} ${AGENT_CONN_TIMEOUT}" ADVANCED_OPTS="${ADVANCED_OPTS} ${FOLLOW_SYMLINKS}" ADVANCED_OPTS="${ADVANCED_OPTS} ${IS_RECONFIGURE_REBOOT_AT_JOB_LEVEL}" ADVANCED_OPTS="${ADVANCED_OPTS} ${ITEM_RECONFIGURE_REBOOT}" DEPLOY_OPTS="${BASIC_DEPLOY_OPTS} ${ADVANCED_OPTS}" SIMULATE_TIME="2018-10-10 00:00:00" #STAGE_DATE_TIME="2018-10-10 01:00:00" STAGE_DATE_TIME="AfterPreviousPhase" COMMIT_TIME="2018-10-10 02:00:00" ANALYSIS_TIME="$(strftime "%Y-%m-%d %H:%M:%S" $((${EPOCHSECONDS}+60)))" PATCH_JOB="/Workspace/Patching Jobs/rhel6-clean" REMEDIATION_DEPOT_FOLDER="/Workspace/Patch Deploy" REMEDIATION_JOB_FOLDER="/Workspace/Patching Jobs" REMEDIATION_JOB_PREFIX="${PATCH_JOB##*/}-" DUMMY_BLPACKAGE="/Workspace/TestDeploy" DUMMY_BLDEPLOY="/Workspace/TestDeploy" DUMMY_TARGET_SERVER="red6x64-85" executeNow="false" blcli_execute PatchingJob getDBKeyByGroupAndName "${PATCH_JOB%/*}" "${PATCH_JOB##*/}" blcli_storeenv PATCH_JOB_KEY blcli_execute Job findByDBKey ${PATCH_JOB_KEY} # check if autoremediation is set blcli_execute PatchingJob getAutoRemediationOption blcli_storeenv autoRem if [[ ${autoRem} -eq 2 ]] then blcli_execute PatchingJob getPatchRemediationJob blcli_execute Utility setTargetObject blcli_execute PatchRemediationJob getExecuteDeployJobsNow blcli_storeenv executeNow echo "executeNow: ${executeNow}" fi if [[ "${executeNow}" = "true" ]] then # if the patching job has 'execute now' set in the deploy options you must manually clear that option echo "${PATCH_JOB} has Deploy Options set to Execute Now, please manually set to 'Do Not Execute' and re-run the patching job creation process" exit 1 else # check if the dummy blpackage exists and create it if not blcli_execute DepotGroup groupNameToDBKey "${DUMMY_BLPACKAGE%/*}" blcli_storeenv depotGroupKey blcli_execute DepotObject depotObjectExistsByTypeGroupAndName 28 ${depotGroupKey} "${DUMMY_BLPACKAGE##*/}" blcli_storeenv pkgExists if [[ "${pkgExists}" = "true" ]] then blcli_execute BlPackage getDBKeyByGroupAndName "${DUMMY_BLPACKAGE%/*}" "${DUMMY_BLPACKAGE##*/}" else blcli_execute DepotGroup groupNameToId "${DUMMY_BLPACKAGE%/*}" blcli_storeenv depotGroupId blcli_execute BlPackage createEmptyPackage "${DUMMY_BLPACKAGE##*/}" "" ${depotGroupId} blcli_execute DepotObject getDBKey fi blcli_storeenv PACKAGE_KEY echo "PACKAGE_KEY:${PACKAGE_KEY}" # check if the dummy delploy job exists and create it if not blcli_execute JobGroup groupNameToDBKey "${DUMMY_BLDEPLOY%/*}" blcli_storeenv jobGroupKey blcli_execute Job jobExistsByTypeGroupAndName 30 ${jobGroupKey} "${DUMMY_BLDEPLOY##*/}" blcli_storeenv jobExists if [[ "${jobExists}" = "true" ]] then blcli_execute DeployJob getDBKeyByGroupAndName "${DUMMY_BLDEPLOY%/*}" "${DUMMY_BLDEPLOY##*/}" else blcli_execute JobGroup groupNameToId "${DUMMY_BLDEPLOY%/*}" blcli_storeenv GROUP_ID #echo "GROUP_ID:${GROUP_ID}" blcli_execute DeployJob createDeployJob "${DUMMY_BLDEPLOY##*/}" "${GROUP_ID}" "${PACKAGE_KEY}" "${DEPLOY_TYPE}" "${DUMMY_TARGET_SERVER}" ${DEPLOY_OPTS} fi blcli_storeenv DEPLOY_JOB_KEY echo "DEPLOY_JOB_KEY:${DEPLOY_JOB_KEY}" # set the simulate, stage and commit times in the dummy job for import into the patching job later blcli_execute DeployJob setAdvanceDeployJobPhaseScheduleByDBKey ${DEPLOY_JOB_KEY} AtTime "${SIMULATE_TIME}" "${STAGE_DATE_TIME}" "" AtTime "${COMMIT_TIME}" blcli_storeenv DEPLOY_JOB_KEY echo "DEPLOY_JOB_KEY:${DEPLOY_JOB_KEY}" echo "PATCH_JOB_KEY:${PATCH_JOB_KEY}" # set the deploy options in the patching job blcli_execute PatchingJob setRemediationWithDeployOptions ${PATCH_JOB_KEY} "${REMEDIATION_JOB_PREFIX}" "${REMEDIATION_DEPOT_FOLDER}" "${REMEDIATION_JOB_FOLDER}" ${DEPLOY_JOB_KEY} blcli_storeenv PATCH_JOB_KEY echo "PATCH_JOB_KEY:${PATCH_JOB_KEY}" # kick off the patching job blcli_execute Job addOneTimeSchedule ${PATCH_JOB_KEY} "${ANALYSIS_TIME}" blcli_storeenv PATCH_JOB_KEY echo "PATCH_JOB_KEY:${PATCH_JOB_KEY}" fi