Skip to content

Commit 3372d65

Browse files
authored
Merge pull request #302 from jprovaznik/nodecount
Wait for all nodes being added before running ansible
2 parents 651082b + d928e29 commit 3372d65

4 files changed

Lines changed: 58 additions & 2 deletions

File tree

bastion.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ description: >
77
88
parameters:
99

10+
node_count:
11+
type: number
12+
description: >
13+
Number of non-master nodes to create.
14+
1015
# What version of OpenShift Container Platform to install
1116
# This value is used to select the RPM repo for the OCP release to install
1217
ocp_version:
@@ -389,6 +394,29 @@ resources:
389394
- get_file: templates/var/lib/ansible/roles/fstab_mount_options/tasks/main.yml
390395
- get_file: templates/var/lib/ansible/roles/xfs_grub_quota/tasks/main.yml
391396

397+
update_node_count:
398+
type: OS::Heat::SoftwareConfig
399+
properties:
400+
group: script
401+
inputs:
402+
- name: node_count
403+
config: |
404+
#!/bin/bash
405+
set -eux
406+
mkdir -p /var/lib/ansible
407+
echo "$node_count" > /var/lib/ansible/node_count
408+
409+
deployment_update_node_count:
410+
depends_on: wait_condition
411+
type: OS::Heat::SoftwareDeployment
412+
properties:
413+
config:
414+
get_resource: update_node_count
415+
server:
416+
get_resource: host
417+
input_values:
418+
node_count: {get_param: node_count}
419+
392420
deployment_write_templates:
393421
depends_on: wait_condition
394422
type: OS::Heat::SoftwareDeployment

fragments/bastion-ansible.sh

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,27 @@ function is_scaleup() {
134134
grep -v '.*-node') && return 1 || return 0
135135
}
136136

137+
function backup_ansdir() {
138+
[ -e ${ANSDIR}.deployed ] && rm -rf ${ANSDIR}.deployed
139+
mv ${ANSDIR}.started ${ANSDIR}.deployed
140+
}
141+
137142
[ "$prepare_ansible" == "False" ] && exit 0
138143

139144
mkdir -p /var/lib/ansible/group_vars
140145
mkdir -p /var/lib/ansible/host_vars
141146

142147
touch $NODESFILE
143148

149+
existing=$(wc -l < $NODESFILE)
150+
if [ -e /var/lib/ansible/node_count ]; then
151+
node_count=$(cat /var/lib/ansible/node_count)
152+
if [ $existing -lt $node_count -a "$autoscaling" != "True" ]; then
153+
echo "skipping ansible run - only $existing of $node_count is registered"
154+
exit 0
155+
fi
156+
fi
157+
144158
create_metadata_json /var/lib/ansible/metadata.json
145159

146160
# generate ansible files from templates (located
@@ -184,6 +198,11 @@ export ANSIBLE_HOST_KEY_CHECKING=False
184198

185199
logfile=/var/log/ansible.$$
186200
if is_scaleup; then
201+
if [ -z $(get_new_nodes) ]; then
202+
echo "There are no new nodes, not running scalup playbook"
203+
backup_ansdir
204+
exit 0
205+
fi
187206
cmd="ansible-playbook -vvvv --inventory /var/lib/ansible/inventory \
188207
/var/lib/ansible/playbooks/scaleup.yml"
189208
else
@@ -197,8 +216,7 @@ if [ "$execute_ansible" == True ] ; then
197216
echo "Failed to run '$cmd', full log is in $(hostname):$logfile" >&2
198217
exit 1
199218
else
200-
[ -e ${ANSDIR}.deployed ] && rm -rf ${ANSDIR}.deployed
201-
mv ${ANSDIR}.started ${ANSDIR}.deployed
219+
backup_ansdir
202220
fi
203221
else
204222
echo "INFO: ansible execution disabled"

node.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,12 @@ parameters:
346346
type: string
347347
description: Extra parameters for openshift-ansible
348348

349+
autoscaling:
350+
type: boolean
351+
description: >
352+
Automatically scale up/down openshift nodes.
353+
default: false
354+
349355
ca_cert:
350356
type: string
351357
description: Certificate Authority Certificate to be added to trust chain
@@ -722,6 +728,8 @@ resources:
722728
default: {get_param: volume_quota}
723729
- name: extra_openshift_ansible_params
724730
default: {get_param: extra_openshift_ansible_params}
731+
- name: autoscaling
732+
default: {get_param: autoscaling}
725733
outputs:
726734
- name: ca_cert
727735
- name: ca_key

openshift.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,7 @@ resources:
554554
depends_on: [external_router_interface, fixed_network, fixed_subnet, registry_volume]
555555
type: bastion.yaml
556556
properties:
557+
node_count: {get_param: node_count}
557558
ocp_version: {get_param: ocp_version}
558559
osp_version: {get_param: osp_version}
559560
ansible_version: {get_param: ansible_version}
@@ -688,6 +689,7 @@ resources:
688689
resource:
689690
type: node.yaml
690691
properties:
692+
autoscaling: {get_param: autoscaling}
691693
ocp_version: {get_param: ocp_version}
692694
image: {get_param: node_image}
693695
flavor: {get_param: node_flavor}

0 commit comments

Comments
 (0)