Implement scenario001 CI job
scenario001 is a proof-of-concept of how we can scale-up our CI by spliting services on multiple CI jobs. In the case of scenario001: - Sahara is deployed. - Cinder and Swift are not deployed. - Glance uses file backend. - Test to register an image in Sahara with the pingtest Heat template. Also adds the testing matrix in README. The matrix will grow with more documentation in the future. Note for reviewers: we will have a pingtest per scenario. After some testing I figured it was too much complex to try to maintain common bits in a template and do nested stacks. Change-Id: I25521a8bf8b91f7df4020de6599c4e8420e81fef
This commit is contained in:
parent
52ada87af9
commit
4037fdd9e6
40
README.md
40
README.md
|
@ -16,3 +16,43 @@ Tools to help run CI jobs for TripleO. Includes things like:
|
|||
* Heat templates to help deploy and maintain test environment nodes
|
||||
using an undercloud.
|
||||
* Helper script(s) to generate CI status reports. (tox -ecireport -- -f)
|
||||
|
||||
|
||||
OpenStack Infrastructure is deploying multiple jobs with different scenarios.
|
||||
OpenStack services are balanced between different scenarios because OpenStack
|
||||
Infastructure Jenkins slaves can not afford the load of running everything on
|
||||
the same node.
|
||||
|
||||
Service testing matrix
|
||||
----------------------
|
||||
|
||||
| - | scenario001 | multinode-nonha |
|
||||
|:--------------:|:-----------:|:---------------:|
|
||||
| keystone | X | X |
|
||||
| glance | file | swift |
|
||||
| cinder | | iscsi |
|
||||
| heat | X | X |
|
||||
| mysql | X | X |
|
||||
| neutron | ovs | X |
|
||||
| rabbitmq | X | X |
|
||||
| haproxy | X | X |
|
||||
| keepalived | X | X |
|
||||
| memcached | X | X |
|
||||
| pacemaker | X | X |
|
||||
| nova | qemu | X |
|
||||
| ntp | X | X |
|
||||
| snmp | X | X |
|
||||
| timezone | X | X |
|
||||
| sahara | X | |
|
||||
| swift | | X |
|
||||
|
||||
|
||||
|
||||
Scenarios description
|
||||
---------------------
|
||||
|
||||
scenario001 deploys the Compute kit (Keystone, Nova, Glance, Neutron) and
|
||||
Sahara. Glance uses file backend because Swift is not installed.
|
||||
|
||||
multinode-nonha deploys the Compute kit with Cinder and Swift. Glance uses Swift
|
||||
backend.
|
||||
|
|
|
@ -295,7 +295,7 @@ function layer_ci_repo {
|
|||
|
||||
|
||||
function echo_vars_to_deploy_env {
|
||||
for VAR in CENTOS_MIRROR EPEL_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; do
|
||||
for VAR in CENTOS_MIRROR EPEL_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; do
|
||||
echo "export $VAR=\"${!VAR}\"" >> $TRIPLEO_ROOT/tripleo-ci/deploy.env
|
||||
done
|
||||
}
|
||||
|
|
|
@ -119,6 +119,7 @@ OVERCLOUD_IMAGES_ARGS=${OVERCLOUD_IMAGES_ARGS='--all'}
|
|||
OVERCLOUD_NAME=${OVERCLOUD_NAME:-"overcloud"}
|
||||
SKIP_PINGTEST_CLEANUP=${SKIP_PINGTEST_CLEANUP:-""}
|
||||
OVERCLOUD_PINGTEST=${OVERCLOUD_PINGTEST:-""}
|
||||
PINGTEST_TEMPLATE=${PINGTEST_TEMPLATE:-""}
|
||||
UNDERCLOUD_SANITY_CHECK=${UNDERCLOUD_SANITY_CHECK:-""}
|
||||
REPO_SETUP=${REPO_SETUP:-""}
|
||||
REPO_PREFIX=${REPO_PREFIX:-"/etc/yum.repos.d/"}
|
||||
|
@ -691,9 +692,9 @@ function overcloud_pingtest {
|
|||
EXTERNAL_NETWORK_GATEWAY=${EXTERNAL_NETWORK_GATEWAY:-"192.0.2.1"}
|
||||
TENANT_STACK_DEPLOY_ARGS=${TENANT_STACK_DEPLOY_ARGS:-""}
|
||||
neutron subnet-create --name ext-subnet --allocation-pool start=$FLOATING_IP_START,end=$FLOATING_IP_END --disable-dhcp --gateway $EXTERNAL_NETWORK_GATEWAY nova $FLOATING_IP_CIDR
|
||||
TENANT_PINGTEST_TEMPLATE=/usr/share/tripleo-ci/tenantvm_floatingip.yaml
|
||||
TENANT_PINGTEST_TEMPLATE=/usr/share/tripleo-ci/$PINGTEST_TEMPLATE.yaml
|
||||
if [ ! -e $TENANT_PINGTEST_TEMPLATE ]; then
|
||||
TENANT_PINGTEST_TEMPLATE=$(dirname `readlink -f -- $0`)/../templates/tenantvm_floatingip.yaml
|
||||
TENANT_PINGTEST_TEMPLATE=$(dirname `readlink -f -- $0`)/../templates/$PINGTEST_TEMPLATE.yaml
|
||||
fi
|
||||
log "Overcloud pingtest, creating tenant-stack heat stack:"
|
||||
heat stack-create -f $TENANT_PINGTEST_TEMPLATE $TENANT_STACK_DEPLOY_ARGS tenant-stack || exitval=1
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
heat_template_version: 2013-05-23
|
||||
|
||||
description: >
|
||||
HOT template to created resources deployed by scenario001.
|
||||
parameters:
|
||||
key_name:
|
||||
type: string
|
||||
description: Name of keypair to assign to servers
|
||||
default: 'pingtest_key'
|
||||
image:
|
||||
type: string
|
||||
description: Name of image to use for servers
|
||||
default: 'pingtest_image'
|
||||
public_net_name:
|
||||
type: string
|
||||
default: 'nova'
|
||||
description: >
|
||||
ID or name of public network for which floating IP addresses will be allocated
|
||||
private_net_name:
|
||||
type: string
|
||||
description: Name of private network to be created
|
||||
default: 'default-net'
|
||||
private_net_cidr:
|
||||
type: string
|
||||
description: Private network address (CIDR notation)
|
||||
default: '192.168.2.0/24'
|
||||
private_net_gateway:
|
||||
type: string
|
||||
description: Private network gateway address
|
||||
default: '192.168.2.1'
|
||||
private_net_pool_start:
|
||||
type: string
|
||||
description: Start of private network IP address allocation pool
|
||||
default: '192.168.2.100'
|
||||
private_net_pool_end:
|
||||
type: string
|
||||
default: '192.168.2.200'
|
||||
description: End of private network IP address allocation pool
|
||||
|
||||
resources:
|
||||
|
||||
key_pair:
|
||||
type: OS::Nova::KeyPair
|
||||
properties:
|
||||
save_private_key: true
|
||||
name: {get_param: key_name }
|
||||
|
||||
private_net:
|
||||
type: OS::Neutron::Net
|
||||
properties:
|
||||
name: { get_param: private_net_name }
|
||||
|
||||
private_subnet:
|
||||
type: OS::Neutron::Subnet
|
||||
properties:
|
||||
network_id: { get_resource: private_net }
|
||||
cidr: { get_param: private_net_cidr }
|
||||
gateway_ip: { get_param: private_net_gateway }
|
||||
allocation_pools:
|
||||
- start: { get_param: private_net_pool_start }
|
||||
end: { get_param: private_net_pool_end }
|
||||
|
||||
router:
|
||||
type: OS::Neutron::Router
|
||||
properties:
|
||||
external_gateway_info:
|
||||
network: { get_param: public_net_name }
|
||||
|
||||
router_interface:
|
||||
type: OS::Neutron::RouterInterface
|
||||
properties:
|
||||
router_id: { get_resource: router }
|
||||
subnet_id: { get_resource: private_subnet }
|
||||
|
||||
server1:
|
||||
type: OS::Nova::Server
|
||||
properties:
|
||||
name: Server1
|
||||
flavor: { get_resource: test_flavor }
|
||||
image: { get_param: image }
|
||||
key_name: { get_resource: key_pair }
|
||||
networks:
|
||||
- port: { get_resource: server1_port }
|
||||
|
||||
server1_port:
|
||||
type: OS::Neutron::Port
|
||||
properties:
|
||||
network_id: { get_resource: private_net }
|
||||
fixed_ips:
|
||||
- subnet_id: { get_resource: private_subnet }
|
||||
security_groups: [{ get_resource: server_security_group }]
|
||||
|
||||
server1_floating_ip:
|
||||
type: OS::Neutron::FloatingIP
|
||||
# TODO: investigate why we need this depends_on and if we could
|
||||
# replace it by router_id with get_resource: router_interface
|
||||
depends_on: router_interface
|
||||
properties:
|
||||
floating_network: { get_param: public_net_name }
|
||||
port_id: { get_resource: server1_port }
|
||||
|
||||
server_security_group:
|
||||
type: OS::Neutron::SecurityGroup
|
||||
properties:
|
||||
description: Add security group rules for server
|
||||
name: pingtest-security-group
|
||||
rules:
|
||||
- remote_ip_prefix: 0.0.0.0/0
|
||||
protocol: tcp
|
||||
port_range_min: 22
|
||||
port_range_max: 22
|
||||
- remote_ip_prefix: 0.0.0.0/0
|
||||
protocol: icmp
|
||||
|
||||
test_flavor:
|
||||
type: OS::Nova::Flavor
|
||||
properties:
|
||||
ram: 512
|
||||
vcpus: 1
|
||||
|
||||
sahara-image:
|
||||
type: OS::Sahara::ImageRegistry
|
||||
properties:
|
||||
image: { get_param: image }
|
||||
username: cirros
|
||||
tags:
|
||||
- tripleo
|
||||
|
||||
outputs:
|
||||
server1_private_ip:
|
||||
description: IP address of server1 in private network
|
||||
value: { get_attr: [ server1, first_address ] }
|
||||
server1_public_ip:
|
||||
description: Floating IP address of server1 in public network
|
||||
value: { get_attr: [ server1_floating_ip, floating_ip_address ] }
|
|
@ -0,0 +1,43 @@
|
|||
resource_registry:
|
||||
OS::TripleO::Controller::Net::SoftwareConfig: ../heat-templates/net-config-multinode.yaml
|
||||
OS::TripleO::Compute::Net::SoftwareConfig: ../heat-templates/net-config-multinode.yaml
|
||||
OS::TripleO::Services::SaharaApi: /usr/share/openstack-tripleo-heat-templates/puppet/services/sahara-api.yaml
|
||||
OS::TripleO::Services::SaharaEngine: /usr/share/openstack-tripleo-heat-templates/puppet/services/sahara-engine.yaml
|
||||
|
||||
parameter_defaults:
|
||||
ControllerServices:
|
||||
- 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::MySQL
|
||||
- OS::TripleO::Services::NeutronDhcpAgent
|
||||
- OS::TripleO::Services::NeutronL3Agent
|
||||
- OS::TripleO::Services::NeutronMetadataAgent
|
||||
- OS::TripleO::Services::NeutronServer
|
||||
- OS::TripleO::Services::NeutronCorePlugin
|
||||
- OS::TripleO::Services::NeutronOvsAgent
|
||||
- OS::TripleO::Services::RabbitMQ
|
||||
- OS::TripleO::Services::HAproxy
|
||||
- OS::TripleO::Services::Keepalived
|
||||
- OS::TripleO::Services::Memcached
|
||||
- OS::TripleO::Services::Pacemaker
|
||||
- OS::TripleO::Services::NovaConductor
|
||||
- OS::TripleO::Services::NovaApi
|
||||
- OS::TripleO::Services::NovaScheduler
|
||||
- OS::TripleO::Services::Ntp
|
||||
- OS::TripleO::Services::Snmp
|
||||
- OS::TripleO::Services::Timezone
|
||||
- OS::TripleO::Services::NovaCompute
|
||||
- OS::TripleO::Services::NovaLibvirt
|
||||
- OS::TripleO::Services::SaharaApi
|
||||
- OS::TripleO::Services::SaharaEngine
|
||||
ControllerExtraConfig:
|
||||
nova::compute::libvirt::services::libvirt_virt_type: qemu
|
||||
nova::compute::libvirt::libvirt_virt_type: qemu
|
||||
# we don't deploy Swift so we switch to file backend.
|
||||
GlanceBackend: 'file'
|
|
@ -89,6 +89,14 @@ export COMPUTE_HOSTS=
|
|||
export SUBNODES_SSH_KEY=
|
||||
export TEST_OVERCLOUD_DELETE=0
|
||||
|
||||
if [[ $TOCI_JOBTYPE =~ scenario ]]; then
|
||||
export PINGTEST_TEMPLATE=${PINGTEST_TEMPLATE:-"${TOCI_JOBTYPE}-pingtest"}
|
||||
MULTINODE_ENV_NAME=$TOCI_JOBTYPE
|
||||
else
|
||||
export PINGTEST_TEMPLATE=${PINGTEST_TEMPLATE:-"tenantvm_floatingip"}
|
||||
MULTINODE_ENV_NAME='multinode'
|
||||
fi
|
||||
|
||||
# start dstat early
|
||||
# TODO add it to the gate image building
|
||||
sudo yum install -y dstat nmap-ncat #nc is for metrics
|
||||
|
@ -159,7 +167,7 @@ for JOB_TYPE_PART in $(sed 's/-/ /g' <<< "${TOCI_JOBTYPE:-}") ; do
|
|||
UNDERCLOUD_SSL=0
|
||||
INTROSPECT=0
|
||||
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 $TRIPLEO_ROOT/tripleo-ci/test-environments/multinode.yaml --compute-scale 0 --overcloud-ssh-user $OVERCLOUD_SSH_USER --validation-errors-nonfatal"
|
||||
OVERCLOUD_DEPLOY_ARGS="$OVERCLOUD_DEPLOY_ARGS -e /usr/share/openstack-tripleo-heat-templates/environments/deployed-server-environment.yaml -e $TRIPLEO_ROOT/tripleo-ci/test-environments/$MULTINODE_ENV_NAME.yaml --compute-scale 0 --overcloud-ssh-user $OVERCLOUD_SSH_USER --validation-errors-nonfatal"
|
||||
;;
|
||||
undercloud)
|
||||
TOCIRUNNER="./toci_instack_osinfra.sh"
|
||||
|
|
Loading…
Reference in New Issue