--- /dev/null
+- job:
+ name: 'deploy-jenkins-swarm'
+ description: |
+ Create given jenkins slaves on internal cloud in maintenance-team tenant
+
+ concurrent: false
+ node: 'jenkins-master'
+
+ parameters:
+ - string:
+ name: HEAT_STACK_YAML
+ description: "Stack yaml file"
+ default: "maintenance-ci/common/data/base_heat.yml"
+ - string:
+ name: STACK_PREFIX
+ description: "Stack prefix"
+ default: "swarm-slave"
+ - string:
+ name: MOS_BASE_NODE_COUNT
+ default: "0"
+ - string:
+ name: MOS_HUGE_NODE_COUNT
+ default: "0"
+ - string:
+ name: MOS_TEMPEST_NODE_COUNT
+ default: "0"
+
+ - string:
+ name: IMAGE_NAME
+ default: xenial-server-cloudimg-amd64-qcow
+ - string:
+ name: JENKINS_LABELS
+ default: ''
+
+ - string:
+ name: CUSTOM_FLAVOR_NAME
+ default: "0"
+ - string:
+ name: CUSTOM_FLAVOR_JENKINS_LABELS
+ default: ""
+ - string:
+ name: CUSTOM_FLAVOR_NODE_COUNT
+ default: "0"
+
+ scm:
+ - git:
+ url: 'https://review.fuel-infra.org/tools/sustaining/'
+ branches:
+ - origin/master
+
+ wrappers:
+ - timestamps
+ - openstack-creds
+ - timeout:
+ fail: true
+ timeout: 30
+
+ builders:
+ - shell:
+ !include-raw: common/scripts/deploy_jenkins_swarm.sh
--- /dev/null
+#!/bin/bash
+
+set -ex
+
+OPENSTACK_CLIENTS_VENV="${OPENSTACK_CLIENTS_VENV:-/home/jenkins/venv-openstack-clients}"
+
+if [[ ! -d "${OPENSTACK_CLIENTS_VENV}" ]] ; then
+ virtualenv "${OPENSTACK_CLIENTS_VENV}"
+ source "${OPENSTACK_CLIENTS_VENV}"/bin/activate
+ pip install openstackclient
+ deactivate
+fi
+
+function deploy_stacks() {
+ FLAVOR_NAME=$1
+ IMAGE_NAME=$2
+ JENKINS_LABELS=$3
+ parameter_string=""
+ if [[ ! -z "${FLAVOR_NAME}" ]] ; then
+ parameter_string="$parameter_string --parameter \"flavor=${FLAVOR_NAME}\""
+ fi
+ if [[ ! -z "${IMAGE_NAME}" ]] ; then
+ parameter_string="$parameter_string --parameter \"image=${IMAGE_NAME}\""
+ fi
+ if [[ ! -z "${JENKINS_LABELS}" ]] ; then
+ parameter_string="$parameter_string --parameter \"jenkins_labels=${JENKINS_LABELS}\""
+ fi
+
+ # MAC OS compatibility, for manual usage
+ if command -v md5sum ; then
+ md5_cmd="md5sum"
+ else
+ md5_cmd="md5"
+ fi
+
+ STACK_NAME="${STACK_PREFIX:-swarm_slave}_$(date +%s | "${md5_cmd}" | head -c 4)"
+
+ set +x
+ source "${OPENSTACK_CLIENTS_VENV}"/bin/activate
+ set -x
+ source "${OPENRC_FILE?}"
+ echo "openstack stack create --wait -t ${HEAT_STACK_YAML} ${parameter_string} ${STACK_NAME}" | bash -
+ openstack stack output show "${STACK_NAME}" --all
+ deactivate
+}
+
+for (( node = 0; node < ${CUSTOM_FLAVOR_NODE_COUNT}; ++node )); do
+ deploy_stacks "${CUSTOM_FLAVOR_NAME}" "${IMAGE_NAME}" "${CUSTOM_FLAVOR_JENKINS_LABELS}"
+done
+for (( node = 0; node < ${MOS_TEMPEST_NODE_COUNT}; ++node )); do
+ deploy_stacks mos.tempest "${IMAGE_NAME}" "${JENKINS_LABELS}"
+done
+for (( node = 0; node < ${MOS_HUGE_NODE_COUNT}; ++node )); do
+ deploy_stacks mos.fuel.huge "${IMAGE_NAME}" "${JENKINS_LABELS}"
+done
+for (( node = 0; node < ${MOS_BASE_NODE_COUNT}; ++node )); do
+ deploy_stacks mos.fuel.base "${IMAGE_NAME}" "${JENKINS_LABELS}"
+done