@@ -9,6 +9,7 @@ source .buildkite/scripts/common/util.sh
99export KBN_NP_PLUGINS_BUILT=true
1010
1111VERSION=" $( jq -r ' .version' package.json) -SNAPSHOT"
12+ ECCTL_LOGS=$( mktemp --suffix " .json" )
1213
1314echo " --- Download Kibana Distribution"
1415
4647
4748docker logout docker.elastic.co
4849
50+ if is_pr_with_label " ci:cloud-redeploy" ; then
51+ echo " --- Shutdown Previous Deployment"
52+ CLOUD_DEPLOYMENT_ID=$( ecctl deployment list --output json | jq -r ' .deployments[] | select(.name == "' $CLOUD_DEPLOYMENT_NAME ' ") | .id' )
53+ if [ -z " ${CLOUD_DEPLOYMENT_ID} " ]; then
54+ echo " No deployment to remove"
55+ else
56+ echo " Shutting down previous deployment..."
57+ ecctl deployment shutdown " $CLOUD_DEPLOYMENT_ID " --force --track --output json > " $ECCTL_LOGS "
58+ fi
59+ fi
60+
4961echo " --- Create Deployment"
5062CLOUD_DEPLOYMENT_ID=$( ecctl deployment list --output json | jq -r ' .deployments[] | select(.name == "' $CLOUD_DEPLOYMENT_NAME ' ") | .id' )
51- JSON_FILE=$( mktemp --suffix " .json" )
5263if [ -z " ${CLOUD_DEPLOYMENT_ID} " ]; then
5364 jq '
5465 .resources.kibana[0].plan.kibana.docker_image = "' $KIBANA_CLOUD_IMAGE ' " |
@@ -60,45 +71,49 @@ if [ -z "${CLOUD_DEPLOYMENT_ID}" ]; then
6071 .resources.integrations_server[0].plan.integrations_server.version = "' $VERSION ' "
6172 ' .buildkite/scripts/steps/cloud/deploy.json > /tmp/deploy.json
6273
63- echo -n " Creating deployment..."
64- ecctl deployment create --track --output json --file /tmp/deploy.json > " $JSON_FILE "
65- echo " done"
74+ echo " Creating deployment..."
75+ ecctl deployment create --track --output json --file /tmp/deploy.json > " $ECCTL_LOGS "
6676
67- CLOUD_DEPLOYMENT_USERNAME=$( jq --slurp ' .[]|select(.resources).resources[] | select(.credentials).credentials.username' " $JSON_FILE " )
68- CLOUD_DEPLOYMENT_PASSWORD=$( jq --slurp ' .[]|select(.resources).resources[] | select(.credentials).credentials.password' " $JSON_FILE " )
69- CLOUD_DEPLOYMENT_ID=$( jq -r --slurp ' .[0].id' " $JSON_FILE " )
70- CLOUD_DEPLOYMENT_STATUS_MESSAGES=$( jq --slurp ' [.[]|select(.resources == null)]' " $JSON_FILE " )
77+ CLOUD_DEPLOYMENT_USERNAME=$( jq --slurp ' .[]|select(.resources).resources[] | select(.credentials).credentials.username' " $ECCTL_LOGS " )
78+ CLOUD_DEPLOYMENT_PASSWORD=$( jq --slurp ' .[]|select(.resources).resources[] | select(.credentials).credentials.password' " $ECCTL_LOGS " )
79+ CLOUD_DEPLOYMENT_ID=$( jq -r --slurp ' .[0].id' " $ECCTL_LOGS " )
80+ CLOUD_DEPLOYMENT_STATUS_MESSAGES=$( jq --slurp ' [.[]|select(.resources == null)]' " $ECCTL_LOGS " )
7181
72- echo -n " Writing to vault..."
82+ echo " Writing to vault..."
7383 VAULT_ROLE_ID=" $( retry 5 15 gcloud secrets versions access latest --secret=kibana-buildkite-vault-role-id) "
7484 VAULT_SECRET_ID=" $( retry 5 15 gcloud secrets versions access latest --secret=kibana-buildkite-vault-secret-id) "
7585 VAULT_TOKEN=$( retry 5 30 vault write -field=token auth/approle/login role_id=" $VAULT_ROLE_ID " secret_id=" $VAULT_SECRET_ID " )
7686 retry 5 30 vault login -no-print " $VAULT_TOKEN "
7787 retry 5 5 vault write " secret/kibana-issues/dev/cloud-deploy/$CLOUD_DEPLOYMENT_NAME " username=" $CLOUD_DEPLOYMENT_USERNAME " password=" $CLOUD_DEPLOYMENT_PASSWORD "
7888
79- echo -n " Enabling Stack Monitoring..."
89+ echo " Enabling Stack Monitoring..."
8090 jq '
8191 .settings.observability.metrics.destination.deployment_id = "' $CLOUD_DEPLOYMENT_ID ' " |
8292 .settings.observability.logging.destination.deployment_id = "' $CLOUD_DEPLOYMENT_ID ' "
8393 ' .buildkite/scripts/steps/cloud/stack_monitoring.json > /tmp/stack_monitoring.json
84- ecctl deployment update " $CLOUD_DEPLOYMENT_ID " --track --output json --file /tmp/stack_monitoring.json > " $JSON_FILE "
85- echo " done"
8694
87- echo -n " Enabling verbose logging..."
95+ # After a deployment is created, a new Kibana plan is automatically added to update settings
96+ # and restart Kibana. Polling for a plan state isn't especially reliable because it flips
97+ # between empty and queued, and then empty again depending on how quickly setup is run in cloud.
98+ # We want to enable monitoring after the automatic plan has run, if not we get an error:
99+ # * deployments.resource_plan_state_error: Kibana resource [main-kibana] has a plan still pending, cancel that or wait for it to complete (settings.observability.plan)
100+ # This adds a sleep and retry to see if we can make this step more reliable
101+ sleep 120
102+ retry 5 60 ecctl deployment update " $CLOUD_DEPLOYMENT_ID " --track --output json --file /tmp/stack_monitoring.json > " $ECCTL_LOGS "
103+
104+ echo " Enabling verbose logging..."
88105 ecctl deployment show " $CLOUD_DEPLOYMENT_ID " --generate-update-payload | jq '
89106 .resources.kibana[0].plan.kibana.user_settings_yaml = "logging.root.level: all"
90107 ' > /tmp/verbose_logging.json
91- ecctl deployment update " $CLOUD_DEPLOYMENT_ID " --track --output json --file /tmp/verbose_logging.json > " $JSON_FILE "
92- echo " done"
108+ ecctl deployment update " $CLOUD_DEPLOYMENT_ID " --track --output json --file /tmp/verbose_logging.json > " $ECCTL_LOGS "
93109else
94- ecctl deployment show " $CLOUD_DEPLOYMENT_ID " --generate-update-payload | jq '
95- .resources.kibana[0].plan.kibana.docker_image = "' $KIBANA_CLOUD_IMAGE ' " |
96- (.. | select(.version? != null).version) = "' $VERSION ' "
97- ' > /tmp/deploy.json
98-
99- echo -n " Updating deployment..."
100- ecctl deployment update " $CLOUD_DEPLOYMENT_ID " --track --output json --file /tmp/deploy.json > " $JSON_FILE "
101- echo " done"
110+ ecctl deployment show " $CLOUD_DEPLOYMENT_ID " --generate-update-payload | jq '
111+ .resources.kibana[0].plan.kibana.docker_image = "' $KIBANA_CLOUD_IMAGE ' " |
112+ (.. | select(.version? != null).version) = "' $VERSION ' "
113+ ' > /tmp/deploy.json
114+
115+ echo " Updating deployment..."
116+ ecctl deployment update " $CLOUD_DEPLOYMENT_ID " --track --output json --file /tmp/deploy.json > " $ECCTL_LOGS "
102117fi
103118
104119CLOUD_DEPLOYMENT_KIBANA_URL=$( ecctl deployment show " $CLOUD_DEPLOYMENT_ID " | jq -r ' .resources.kibana[0].info.metadata.aliased_url' )
0 commit comments