diff --git a/jenkins/ci.suse.de/templates/cloud-ardana-pipeline-template.yaml b/jenkins/ci.suse.de/templates/cloud-ardana-pipeline-template.yaml index 336b82a337..3bcc63d95a 100644 --- a/jenkins/ci.suse.de/templates/cloud-ardana-pipeline-template.yaml +++ b/jenkins/ci.suse.de/templates/cloud-ardana-pipeline-template.yaml @@ -140,6 +140,7 @@ - mid-scale-kvm - standard - std-split + - entry-scale-ironic-flat-network description: >- The name of one of the available scenarios that can be used to generate input models. If this parameter is set, the following parameters may also be set to different values, to control @@ -253,7 +254,7 @@ description: | The number of SLES compute nodes in the generated input model. - Input model generator scenarios using this parameter: all + Input model generator scenarios using this parameter: all except entry-scale-ironic-flat-network. NOTE: this parameter is used to generate input models. See the 'scenario_name' parameter about using one of the available input model generator scenarios. @@ -271,6 +272,19 @@ NOTE: this parameter is used to generate input models. See the 'scenario_name' parameter about using one of the available input model generator scenarios. + - validating-string: + name: ironic_compute + default: '0' + regex: '[0-9]+' + msg: The entered value failed validation + description: | + The number of Ironic compute nodes in the generated input model. + + Input model generator scenarios using this parameter: entry-scale-ironic-flat-network + + NOTE: this parameter is used to generate input models. See the 'scenario_name' parameter about + using one of the available input model generator scenarios. + - string: name: disabled_services default: '{disabled_services|}' diff --git a/scripts/jenkins/ardana/ansible/deploy-cloud.yml b/scripts/jenkins/ardana/ansible/deploy-cloud.yml index 7e19623932..f90559632b 100644 --- a/scripts/jenkins/ardana/ansible/deploy-cloud.yml +++ b/scripts/jenkins/ardana/ansible/deploy-cloud.yml @@ -51,6 +51,19 @@ - heat-api-cloudwatch - nova-console-auth + - name: Remove designate and octavia features from input model when scenario is ironic + replace: + path: "{{ input_model_path }}/data/control_plane.yml" + regexp: '(.*{{ item }}.*)' + replace: '#\1' + when: scenario_name == "entry-scale-ironic-flat-network" + delegate_to: localhost + loop: + - designate + - octavia + - bind + + - name: Ardana log stream at debug: msg: "http://{{ ansible_host }}:9091/" diff --git a/scripts/jenkins/ardana/ansible/group_vars/all/all.yml b/scripts/jenkins/ardana/ansible/group_vars/all/all.yml index 57f818f96d..dc393a5cc5 100644 --- a/scripts/jenkins/ardana/ansible/group_vars/all/all.yml +++ b/scripts/jenkins/ardana/ansible/group_vars/all/all.yml @@ -78,3 +78,4 @@ rc_channels: cloud-ardana-ci-slot18: "cloud-ci-monitoring" cloud-ardana-ci-slot19: "cloud-ci-monitoring" cloud-ardana-ci-slot20: "cloud-ci-monitoring" + qe006: "cloud-qe-hlm006" diff --git a/scripts/jenkins/ardana/ansible/host_vars/qe006.yml b/scripts/jenkins/ardana/ansible/host_vars/qe006.yml new file mode 100644 index 0000000000..88245d726d --- /dev/null +++ b/scripts/jenkins/ardana/ansible/host_vars/qe006.yml @@ -0,0 +1,18 @@ +# +# (c) Copyright 2018 SUSE LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +--- + +vrrp_offset: 6 diff --git a/scripts/jenkins/ardana/ansible/inventory b/scripts/jenkins/ardana/ansible/inventory index 63cf0bdf41..d6f1ad0f5a 100644 --- a/scripts/jenkins/ardana/ansible/inventory +++ b/scripts/jenkins/ardana/ansible/inventory @@ -1,6 +1,7 @@ [gate_qe] gate-pcloud001 ansible_host=10.84.99.1 gate-qe002 ansible_host=10.84.65.1 +gate-qe006 ansible_host=10.84.82.1 gate-qe007 ansible_host=10.84.83.1 gate-qe101 ansible_host=10.84.68.1 gate-qe102 ansible_host=10.84.84.1 @@ -12,6 +13,7 @@ gate-qescale ansible_host=10.84.48.50 [deployer_qe] pcloud001 ansible_host=10.84.132.1 qe002 ansible_host=10.84.43.81 +qe006 ansible_host=10.84.81.1 qe007 ansible_host=10.84.81.17 qe101 ansible_host=10.84.43.113 qe102 ansible_host=10.84.81.113 diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/defaults/main.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/defaults/main.yml index 27141537bc..200f286f4a 100644 --- a/scripts/jenkins/ardana/ansible/roles/input_model_generator/defaults/main.yml +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/defaults/main.yml @@ -42,6 +42,7 @@ enable_external_network_bridge: "{{ versioned_features.external_network_bridge.e enable_designate_worker_producer: "{{ versioned_features.designate_worker_producer.enabled }}" + cp_prefix: cp1 max_host_prefix_len: "{{ 33-(cp_prefix|length) }}" host_prefix: "{{ ('ardana-' ~ ardana_env)[:max_host_prefix_len|int-1] if ardana_env is defined else 'ardana' }}" @@ -124,6 +125,11 @@ service_component_groups: - neutron-dhcp-agent - neutron-metadata-agent - neutron-openvswitch-agent + IRONIC: + - nova-scheduler-ironic + - ironic-api + - ironic-conductor + - ironic-client LMM: - ceilometer-api - ceilometer-polling @@ -163,6 +169,11 @@ service_component_groups: - neutron-openvswitch-agent - neutron-lbaasv2-agent - manila-share + IRONIC-COMPUTE: + - neutron-openvswitch-agent + - nova-compute-ironic + - nova-compute + - ntp-client disk_component_groups: OS: diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/control_plane.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/control_plane.yml index 30cb507871..791276411b 100644 --- a/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/control_plane.yml +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/control_plane.yml @@ -26,9 +26,14 @@ - AZ2 - AZ3 configuration-data: +{% if scenario.name == 'entry-scale-ironic-flat-network' %} + - IRONIC-CONFIG-CP1 + - NEUTRON-CONFIG-CP1 +{% else %} - DESIGNATE-CONFIG-CP1 - OCTAVIA-CONFIG-CP1 - NEUTRON-CONFIG-CP1 +{% endif %} common-service-components: {% set common_service_components = service_component_groups.COMMON | reject('match', disabled_services|ternary(disabled_services, '^$')) | list %} {% for service_component in common_service_components|unique|sort %} diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/ironic/ironic_config.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/ironic/ironic_config.yml new file mode 100644 index 0000000000..c04fd95855 --- /dev/null +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/ironic/ironic_config.yml @@ -0,0 +1,48 @@ +# +# (c) Copyright 2016 Hewlett Packard Enterprise Development LP +# (c) Copyright 2017-2018 SUSE LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +--- + product: + version: 2 + + # This example is based on using a flat provider guest network as the + # cleaning network for ironic nodes to use. + # + # This network must be created by neutron. + + configuration-data: + - name: IRONIC-CONFIG-CP1 + services: + - ironic + data: + # Set enable_node_cleaning to false to disable node cleaning by Ironic. + cleaning_network: guest-network + enable_node_cleaning: true + # Set enable_oneview to true to enable oneview for ironic. + enable_oneview: false + # Provide encrypted oneview password encryption can be done + # using ardanaencrypt.py or using openssl and export the key + # as environement variable 'ARDANA_USER_PASSWORD_ENCRYPT_KEY' + oneview_manager_url: + oneview_username: + oneview_encrypted_password: + oneview_allow_insecure_connections: + tls_cacert_file: + # Set enable_agent_drivers to false if swift is disabled + enable_agent_drivers: true + # Enable boot from volume, by setting the enabled_storage_interfaces to + # 'cinder' in Ironic config file + boot_from_volume_enabled: false diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/network_groups.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/network_groups.yml index 9fac105c52..c53ef54f9e 100644 --- a/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/network_groups.yml +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/network_groups.yml @@ -77,7 +77,11 @@ {% set ns.routes=network_group.routes|default([]) %} {% if 'MANAGEMENT' in network_group.component_endpoints %} {% if bm_info is defined %} +{% if scenario.name != 'entry-scale-ironic-flat-network' %} {% set _ = ns.routes.append('OCTAVIA-MGMT-NET') %} +{% else %} +{% set _ = ns.routes.append('guest-network') %} +{% endif %} {% set _ = ns.routes.append('ILO') %} {% else %} {% for neutron_ng in scenario.network_groups if 'NEUTRON-VLAN' in neutron_ng.component_endpoints %} @@ -196,12 +200,17 @@ # This is the network group that will be used to provide # external access to VMs (via floating IP Addresses) # -{% if enable_external_network_bridge %} +{% if enable_external_network_bridge and scenario.name !='entry-scale-ironic-flat-network' %} - neutron.l3_agent.external_network_bridge {% else %} - neutron.networks.flat: +{% if scenario.name == 'entry-scale-ironic-flat-network' %} +{% set ns.physnet_id = ns.physnet_id+1 %} + provider-physical-network: physnet{{ ns.physnet_id }} +{% else %} provider-physical-network: external{{ ns.extnet_id | ternary(ns.extnet_id, '') }} {% set ns.extnet_id = ns.extnet_id+1 %} +{% endif %} {% endif %} {% endif %} {% if 'NEUTRON-VLAN' in network_group['component_endpoints'] %} diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/neutron/neutron_config.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/neutron/neutron_config.yml index 6bcb3f0d51..54dd3e425e 100644 --- a/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/neutron/neutron_config.yml +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/templates/input_model/data/neutron/neutron_config.yml @@ -25,6 +25,7 @@ {% if bm_info is defined %} neutron_provider_networks: {{ bm_info.neutron.provider_networks | to_nice_yaml(indent=2) | indent(10, True) }} +{% if bm_info.neutron.external_networks is defined %} neutron_external_networks: {% for external_network in bm_info.neutron.external_networks %} - {{ external_network | to_nice_yaml(indent=2) | indent(12, False) }} @@ -34,6 +35,7 @@ physical_network: external{{ loop.index0 | ternary(loop.index0, '') }} {% endif %} {% endfor %} +{% endif %} {% else %} neutron_provider_networks: {% set ns = namespace(mgmt_net_id=0, physnet_id=0, net_id=30, vlan_id=100+scenario.network_groups|length) %} diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/entry-scale-ironic-flat-network.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/entry-scale-ironic-flat-network.yml new file mode 100644 index 0000000000..d65ce10c93 --- /dev/null +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/entry-scale-ironic-flat-network.yml @@ -0,0 +1,37 @@ +# +# (c) Copyright 2018 SUSE LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +--- + +controllers: 3 +sles_computes: 0 +rhel_computes: 0 + +scenario: + name: entry-scale-ironic-flat-network + cloud_name: entry-scale + description: > + entry scale cloud that uses the Ironic service to provision physical machines through the Compute services API + {{ clm_model }} CLM node and {{ ironic_compute }} IRONIC-COMPUTE node + audit_enabled: True + ses_enabled: "{{ ses_enabled | default(False) }}" + use_cinder_volume_disk: True + use_glance_cache_disk: False + availability_zones: "{{ availability_zones }}" + + service_template: ironic + network_template: ironic + interface_template: ironic + disk_template: ironic diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/disk/ironic.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/disk/ironic.yml new file mode 100644 index 0000000000..5343694eeb --- /dev/null +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/disk/ironic.yml @@ -0,0 +1,22 @@ +# +# (c) Copyright 2018 SUSE LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +--- + +disk_models: + volume_groups: + - name: ardana-vg + disk_components: + - OS diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/interface/ironic.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/interface/ironic.yml new file mode 100644 index 0000000000..973456f582 --- /dev/null +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/interface/ironic.yml @@ -0,0 +1,43 @@ +# +# (c) Copyright 2018 SUSE LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +--- + +interface_models: + - name: CLM + service_groups: + - clm + network_interfaces: + - network_groups: + - MANAGEMENT + forced_network_groups: + - EXTERNAL-API + + - name: CONTROLLER + service_groups: + - controller + network_interfaces: + - network_groups: + - EXTERNAL-API + - GUEST + - MANAGEMENT + + - name: IRONIC-COMPUTE + service_groups: + - ironic-compute + network_interfaces: + - network_groups: + - GUEST + - MANAGEMENT diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/network/ironic.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/network/ironic.yml new file mode 100644 index 0000000000..3708e82492 --- /dev/null +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/network/ironic.yml @@ -0,0 +1,42 @@ +# +# (c) Copyright 2018 SUSE LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +--- + +network_groups: + - name: MANAGEMENT + hostname_suffix: mgmt + tagged_vlan: false + component_endpoints: + - MANAGEMENT + - INTERNAL-API + + - name: EXTERNAL-API + hostname_suffix: extapi + tagged_vlan: true + component_endpoints: + - EXTERNAL-API + routes: + - default + + - name: GUEST + hostname_suffix: guest + tagged_vlan: true + component_endpoints: + - NEUTRON-EXT + + - name: ILO + hostname_suffix: ilo + component_endpoints: [] diff --git a/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/service/ironic.yml b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/service/ironic.yml new file mode 100644 index 0000000000..3644266190 --- /dev/null +++ b/scripts/jenkins/ardana/ansible/roles/input_model_generator/vars/templates/service/ironic.yml @@ -0,0 +1,55 @@ +# +# (c) Copyright 2018 SUSE LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# +# Standard scenario service template with standalone CLM node: all services enabled +# and variable number of controller, SLES compute and RHEL compute nodes. +# +# Template parameters: +# controllers: number of controller nodes (default: 3) +# ironic_compute: number of ironic compute nodes (default: 1) +# +--- + +service_groups: + - name: clm + type: cluster + prefix: c0 + heat_flavor_id: "{{ vcloud_flavor_name_prefix }}-compute" + member_count: '{{ (clm_model == "standalone") | ternary(1, 0) }}' + service_components: + - CLM + - name: controller + type: cluster + prefix: c1 + heat_flavor_id: "{{ vcloud_flavor_name_prefix }}-controller" + member_count: '{{ controllers|default(3) }}' + service_components: + - '{{ (clm_model == "integrated") | ternary("CLM", '') }}' + - CORE + - LMM + - DBMQ + - SWPAC + - NEUTRON + - SWOBJ + - IRONIC + - name: ironic-compute + type: resource + prefix: ir-comp + heat_flavor_id: "{{ vcloud_flavor_name_prefix }}-compute" + member_count: '{{ ironic_computes|default(1) }}' + min_count: 1 + service_components: + - IRONIC-COMPUTE diff --git a/scripts/jenkins/ardana/ansible/roles/rocketchat_notify/vars/deploy.yml b/scripts/jenkins/ardana/ansible/roles/rocketchat_notify/vars/deploy.yml index 8b5222ba35..3da70646ef 100644 --- a/scripts/jenkins/ardana/ansible/roles/rocketchat_notify/vars/deploy.yml +++ b/scripts/jenkins/ardana/ansible/roles/rocketchat_notify/vars/deploy.yml @@ -100,6 +100,9 @@ _field_nodes_values: SWIFT: {{ swift_nodes }} NEUTRON: {{ neutron_nodes }} Computes: {{ sles_computes}} (SLES) / {{ rhel_computes }} (RHEL) + entry-scale-ironic-flat-network: | + Controllers: {{ controllers }} + Computes: {{ ironic_compute }} (IRONIC) _field_nodes: - title: Nodes