From b009f75223b1f3080b6ee2f095043970c4da21eb Mon Sep 17 00:00:00 2001 From: James Slagle Date: Mon, 14 Nov 2016 18:45:17 -0500 Subject: [PATCH] Add 3 node multinode job The 3 node multinode job tests with a primary node and 2 subnodes. The primary node is used for the undercloud. The 2 subnodes are used for the overcloud. The overcloud services are split between pacemaker managed services and non pacemaker managed services on the 2 subnodes. The first subnode has the minimal set of services for an all-in-one overcloud with the exception of any pacemaker service (galera, rabbitmq, etc) which are on the second subnode. This job adds coverage of non-default composable roles since a custom roles data yaml file has to be used to split up the services in this manner across the 2 subnodes. Depends-On: I8fc39e6d18cd70ff881e2a284234b26261018d67 Change-Id: I0cee6ff8b5c3002d45a6e66e4657baffa99ac5a6 --- scripts/common_functions.sh | 6 +- .../multinode-3nodes-roles-data.yaml | 77 +++++++++++++++++++ test-environments/multinode-3nodes.yaml | 9 +++ test-environments/multinode-core.yaml | 37 +++++++++ toci_gate_test.sh | 21 +++-- 5 files changed, 143 insertions(+), 7 deletions(-) create mode 100644 test-environments/multinode-3nodes-roles-data.yaml create mode 100644 test-environments/multinode-3nodes.yaml create mode 100644 test-environments/multinode-core.yaml diff --git a/scripts/common_functions.sh b/scripts/common_functions.sh index db433aa28..b35333442 100755 --- a/scripts/common_functions.sh +++ b/scripts/common_functions.sh @@ -307,9 +307,13 @@ function layer_ci_repo { function echo_vars_to_deploy_env { - for VAR in CENTOS_MIRROR http_proxy INTROSPECT MY_IP no_proxy NODECOUNT OVERCLOUD_DEPLOY_ARGS OVERCLOUD_UPDATE_ARGS PACEMAKER SSH_OPTIONS STABLE_RELEASE TRIPLEO_ROOT TRIPLEO_SH_ARGS NETISO_V4 NETISO_V6 TOCI_JOBTYPE UNDERCLOUD_SSL RUN_TEMPEST_TESTS RUN_PING_TEST JOB_NAME OVB UNDERCLOUD_IDEMPOTENT MULTINODE CONTROLLER_HOSTS COMPUTE_HOSTS SUBNODES_SSH_KEY TEST_OVERCLOUD_DELETE OVERCLOUD OSINFRA UNDERCLOUD_SANITY_CHECK PINGTEST_TEMPLATE OVERCLOUD_PINGTEST_ARGS FEATURE_BRANCH; do + for VAR in CENTOS_MIRROR http_proxy INTROSPECT MY_IP no_proxy NODECOUNT OVERCLOUD_DEPLOY_ARGS OVERCLOUD_UPDATE_ARGS PACEMAKER SSH_OPTIONS STABLE_RELEASE TRIPLEO_ROOT TRIPLEO_SH_ARGS NETISO_V4 NETISO_V6 TOCI_JOBTYPE UNDERCLOUD_SSL RUN_TEMPEST_TESTS RUN_PING_TEST JOB_NAME OVB UNDERCLOUD_IDEMPOTENT MULTINODE CONTROLLER_HOSTS COMPUTE_HOSTS SUBNODES_SSH_KEY TEST_OVERCLOUD_DELETE OVERCLOUD OSINFRA UNDERCLOUD_SANITY_CHECK PINGTEST_TEMPLATE OVERCLOUD_PINGTEST_ARGS FEATURE_BRANCH OVERCLOUD_ROLES; do echo "export $VAR=\"${!VAR}\"" >> $TRIPLEO_ROOT/tripleo-ci/deploy.env done + for role in $OVERCLOUD_ROLES; do + eval hosts=\${${role}_hosts} + echo "export ${role}_hosts=\"${hosts}\"" >> $TRIPLEO_ROOT/tripleo-ci/deploy.env + done } diff --git a/test-environments/multinode-3nodes-roles-data.yaml b/test-environments/multinode-3nodes-roles-data.yaml new file mode 100644 index 000000000..69916334f --- /dev/null +++ b/test-environments/multinode-3nodes-roles-data.yaml @@ -0,0 +1,77 @@ +# Specifies which roles (groups of nodes) will be deployed +# Note this is used as an input to the various *.j2.yaml +# jinja2 templates, so that they are converted into *.yaml +# during the plan creation (via a mistral action/workflow). +# +# The format is a list, with the following format: +# +# * name: (string) mandatory, name of the role, must be unique +# +# CountDefault: (number) optional, default number of nodes, defaults to 0 +# sets the default for the {{role.name}}Count parameter in overcloud.yaml +# +# HostnameFormatDefault: (string) optional default format string for hostname +# defaults to '%stackname%-{{role.name.lower()}}-%index%' +# sets the default for {{role.name}}HostnameFormat parameter in overcloud.yaml +# +# ServicesDefault: (list) optional default list of services to be deployed +# on the role, defaults to an empty list. Sets the default for the +# {{role.name}}Services parameter in overcloud.yaml + +- name: ControllerApi + CountDefault: 1 + ServicesDefault: + - OS::TripleO::Services::CACerts + - OS::TripleO::Services::CinderApi + - OS::TripleO::Services::CinderScheduler + - OS::TripleO::Services::Core + - OS::TripleO::Services::Kernel + - OS::TripleO::Services::Keystone + - OS::TripleO::Services::GlanceApi + - OS::TripleO::Services::GlanceRegistry + - OS::TripleO::Services::HeatApi + - OS::TripleO::Services::HeatApiCfn + - OS::TripleO::Services::HeatApiCloudwatch + - OS::TripleO::Services::HeatEngine + - OS::TripleO::Services::NeutronDhcpAgent + - OS::TripleO::Services::NeutronL3Agent + - OS::TripleO::Services::NeutronMetadataAgent + - OS::TripleO::Services::NeutronApi + - OS::TripleO::Services::NeutronCorePlugin + - OS::TripleO::Services::NeutronOvsAgent + - OS::TripleO::Services::NovaConductor + - OS::TripleO::Services::NovaApi + - OS::TripleO::Services::NovaMetadata + - OS::TripleO::Services::NovaScheduler + - OS::TripleO::Services::NovaConsoleauth + - OS::TripleO::Services::NovaVncProxy + - OS::TripleO::Services::Ntp + - OS::TripleO::Services::SwiftProxy + - OS::TripleO::Services::SwiftStorage + - OS::TripleO::Services::SwiftRingBuilder + - OS::TripleO::Services::Snmp + - OS::TripleO::Services::Timezone + - OS::TripleO::Services::TripleoPackages + - OS::TripleO::Services::TripleoFirewall + - OS::TripleO::Services::NovaCompute + - OS::TripleO::Services::NovaLibvirt + +- name: Controller + CountDefault: 1 + ServicesDefault: + - OS::TripleO::Services::CACerts + - OS::TripleO::Services::CinderBackup + - OS::TripleO::Services::CinderVolume + - OS::TripleO::Services::Core + - OS::TripleO::Services::Kernel + - OS::TripleO::Services::MySQL + - OS::TripleO::Services::RabbitMQ + - OS::TripleO::Services::HAproxy + - OS::TripleO::Services::Keepalived + - OS::TripleO::Services::Memcached + - OS::TripleO::Services::Pacemaker + - OS::TripleO::Services::Ntp + - OS::TripleO::Services::Snmp + - OS::TripleO::Services::Timezone + - OS::TripleO::Services::TripleoPackages + - OS::TripleO::Services::TripleoFirewall diff --git a/test-environments/multinode-3nodes.yaml b/test-environments/multinode-3nodes.yaml new file mode 100644 index 000000000..1395fdd10 --- /dev/null +++ b/test-environments/multinode-3nodes.yaml @@ -0,0 +1,9 @@ +resource_registry: + OS::TripleO::Controller::Net::SoftwareConfig: ../heat-templates/net-config-multinode.yaml + OS::TripleO::ControllerApi::Net::SoftwareConfig: ../heat-templates/net-config-multinode.yaml + OS::TripleO::Services::Core: multinode-core.yaml + +parameter_defaults: + ControllerExtraConfig: + nova::compute::libvirt::services::libvirt_virt_type: qemu + nova::compute::libvirt::libvirt_virt_type: qemu diff --git a/test-environments/multinode-core.yaml b/test-environments/multinode-core.yaml new file mode 100644 index 000000000..f9c23861c --- /dev/null +++ b/test-environments/multinode-core.yaml @@ -0,0 +1,37 @@ +heat_template_version: 2016-04-08 + +description: > + OpenStack Core Service + +parameters: + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. This + mapping overrides those in ServiceNetMapDefaults. + type: json + DefaultPasswords: + default: {} + type: json + EndpointMap: + default: {} + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + type: json + Debug: + type: string + default: '' + +resources: + +outputs: + role_data: + description: Role data for the Keystone role. + value: + service_name: core + config_settings: + tripleo.core.firewall_rules: + '999 core': + proto: 'udp' + dport: + - 4789 diff --git a/toci_gate_test.sh b/toci_gate_test.sh index 0753526ef..674eae221 100755 --- a/toci_gate_test.sh +++ b/toci_gate_test.sh @@ -77,6 +77,7 @@ export OVB=0 export UCINSTANCEID=NULL export TOCIRUNNER="./toci_instack_ovb.sh" export MULTINODE=0 +export OVERCLOUD_ROLES="" # Whether or not we run TripleO using OpenStack Infra nodes export OSINFRA=0 export CONTROLLER_HOSTS= @@ -179,16 +180,24 @@ for JOB_TYPE_PART in $(sed 's/-/ /g' <<< "${TOCI_JOBTYPE:-}") ; do multinode) MULTINODE=1 TOCIRUNNER="./toci_instack_osinfra.sh" - NODECOUNT=1 - PACEMAKER=1 OSINFRA=1 - - CONTROLLER_HOSTS=$(sed -n 1,1p /etc/nodepool/sub_nodes) - SUBNODES_SSH_KEY=/etc/nodepool/id_rsa UNDERCLOUD_SSL=0 INTROSPECT=0 + SUBNODES_SSH_KEY=/etc/nodepool/id_rsa OVERCLOUD_DEPLOY_ARGS="--libvirt-type=qemu -t $OVERCLOUD_DEPLOY_TIMEOUT" - OVERCLOUD_DEPLOY_ARGS="$OVERCLOUD_DEPLOY_ARGS -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-environment.yaml -e $MULTINODE_ENV_PATH --compute-scale 0 --overcloud-ssh-user $OVERCLOUD_SSH_USER --validation-errors-nonfatal" + + if [[ "$TOCI_JOBTYPE" =~ "3nodes" ]]; then + NODECOUNT=2 + PACEMAKER=1 + OVERCLOUD_ROLES="ControllerApi Controller" + export ControllerApi_hosts=$(sed -n 1,1p /etc/nodepool/sub_nodes) + export Controller_hosts=$(sed -n 2,2p /etc/nodepool/sub_nodes) + OVERCLOUD_DEPLOY_ARGS="$OVERCLOUD_DEPLOY_ARGS -e /usr/share/openstack-tripleo-heat-templates/environments/puppet-pacemaker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-environment.yaml -e $TRIPLEO_ROOT/tripleo-ci/test-environments/multinode-3nodes.yaml --compute-scale 0 --overcloud-ssh-user $OVERCLOUD_SSH_USER --validation-errors-nonfatal -r $TRIPLEO_ROOT/tripleo-ci/test-environments/multinode-3nodes-roles-data.yaml" + else + NODECOUNT=1 + CONTROLLER_HOSTS=$(sed -n 1,1p /etc/nodepool/sub_nodes) + OVERCLOUD_DEPLOY_ARGS="$OVERCLOUD_DEPLOY_ARGS -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-environment.yaml -e $MULTINODE_ENV_PATH --compute-scale 0 --overcloud-ssh-user $OVERCLOUD_SSH_USER --validation-errors-nonfatal" + fi ;; undercloud) TOCIRUNNER="./toci_instack_osinfra.sh"