├── README.md ├── ceph ├── README.md ├── ceph.yaml └── deploy-ceph.sh ├── composable-roles-dev └── README.rst ├── composable-roles ├── README.rst ├── kubernetes.yaml └── swift_only.yaml ├── composable_service ├── Dockerfile ├── README.rst ├── env.yaml └── sample_service.yaml ├── config-download ├── README.md └── deploy-config-download.sh ├── container-modification ├── Dockerfile ├── README.rst ├── swift.patch └── use-modified-container.yaml ├── networking ├── overcloud │ ├── README.rst │ ├── deploy_overcloud.sh │ ├── environments │ │ ├── custom_hostnames.yaml │ │ ├── network-environment-overrides.yaml │ │ ├── nodes_data.yaml │ │ ├── predictable_ips.yaml │ │ ├── scheduler_hints_env.yaml │ │ └── service_net_map_overrides.yaml │ ├── roles │ │ ├── Ceph1.yaml │ │ ├── Ceph2.yaml │ │ ├── Ceph3.yaml │ │ ├── Compute1.yaml │ │ ├── Compute2.yaml │ │ ├── Compute3.yaml │ │ └── Controller1.yaml │ ├── scripts │ │ ├── create_flavors.sh │ │ ├── prepare_docker_images.sh │ │ ├── set_bm_port_physnet.sh │ │ └── set_capabilities.sh │ └── templates │ │ ├── ceph │ │ ├── ceph.yaml │ │ ├── first-boot.yaml │ │ └── init_disk.sh │ │ ├── network_data.yaml │ │ └── nic-config │ │ ├── ceph0.yaml │ │ ├── ceph1.yaml │ │ ├── ceph2.yaml │ │ ├── ceph3.yaml │ │ ├── compute0.yaml │ │ ├── compute1.yaml │ │ ├── compute2.yaml │ │ ├── compute3.yaml │ │ └── control1.yaml ├── undercloud │ ├── README.rst │ └── undercloud.conf └── virtual-baremetal-lab │ ├── README.rst │ ├── express_setup.sh │ ├── libvirt │ ├── networks │ │ ├── create_networks.sh │ │ ├── ovs-ctlplane.xml │ │ └── ovs-trunk.xml │ └── vms │ │ ├── create_vms.sh │ │ ├── overcloud-ceph1-0.xml │ │ ├── overcloud-ceph2-0.xml │ │ ├── overcloud-ceph3-0.xml │ │ ├── overcloud-compute1-0.xml │ │ ├── overcloud-compute2-0.xml │ │ ├── overcloud-compute3-0.xml │ │ ├── overcloud-controller-0.xml │ │ ├── overcloud-controller-1.xml │ │ └── overcloud-controller-2.xml │ └── root │ ├── etc │ ├── firewalld │ │ └── direct.xml │ ├── sysconfig │ │ └── network-scripts │ │ │ ├── ifcfg-br-ctlplane │ │ │ ├── ifcfg-br-trunk │ │ │ ├── ifcfg-ctlplane0 │ │ │ ├── ifcfg-ctlplane1 │ │ │ ├── ifcfg-ctlplane2 │ │ │ ├── ifcfg-ctlplane3 │ │ │ ├── ifcfg-external1 │ │ │ ├── ifcfg-intapi0 │ │ │ ├── ifcfg-intapi1 │ │ │ ├── ifcfg-intapi2 │ │ │ ├── ifcfg-intapi3 │ │ │ ├── ifcfg-storage0 │ │ │ ├── ifcfg-storage1 │ │ │ ├── ifcfg-storage2 │ │ │ ├── ifcfg-storage3 │ │ │ ├── ifcfg-storagemgmt0 │ │ │ ├── ifcfg-storagemgmt1 │ │ │ ├── ifcfg-storagemgmt2 │ │ │ ├── ifcfg-storagemgmt3 │ │ │ ├── ifcfg-tenant0 │ │ │ ├── ifcfg-tenant1 │ │ │ ├── ifcfg-tenant2 │ │ │ └── ifcfg-tenant3 │ └── systemd │ │ └── system │ │ └── dhcrelay.service │ └── usr │ └── local │ └── bin │ └── generate_instackenv.py ├── oooq ├── config-ipv6.yaml ├── config.yaml ├── nodes.yaml └── oooq-lab.txt └── upgrade ├── 01-get-pike-templates.sh ├── 02-get-pike-images.sh ├── 03-deploy-pike-overcloud.sh ├── 04-get-queens-images.sh ├── 05-queens-upgrade-prepare.sh ├── 06-queens-upgrade-run.sh ├── 07-queens-upgrade-converge.sh └── README.md /README.md: -------------------------------------------------------------------------------- 1 | # tripleo-workshop 2 | 3 | This repository hosts examples to be used in a workshop on [TripleO](http://tripleo.org). 4 | -------------------------------------------------------------------------------- /ceph/README.md: -------------------------------------------------------------------------------- 1 | # Ceph lab 2 | 3 | ## Part 1 4 | 5 | 1. Install ceph-ansible on the undercloud 6 | ``` 7 | yum install ceph-ansible 8 | ``` 9 | 10 | 2. Put the following files in stack's home directory on your undercloud 11 | - [ceph.yaml](ceph.yaml) 12 | - [deploy-ceph.sh](deploy-ceph.sh) 13 | 14 | 3. Start the deplolyment 15 | ``` 16 | bash deploy-ceph.sh 17 | ``` 18 | 19 | 4. Become root on the undercloud and execute the following: 20 | ``` 21 | sudo tail -f /var/log/mistral/ceph-install-workflow.log 22 | ``` 23 | The above file will not exist until Step 2 of the deployment 24 | 25 | ## Part 2 26 | 27 | 1. Read [deploy-ceph.sh](deploy-ceph.sh) 28 | - How does it differ from the overcloud-deploy.sh created by quickstart? 29 | 30 | 2. Read [ceph.yaml](ceph.yaml) 31 | - Which directive writes configuratoin options directly to /etc/ceph.conf? 32 | - Which directive controls the memory and CPU allocated to each OSD container? 33 | - Which directive defines the disks which will host OSDs? 34 | - Which directive defines the OSD jounral disks? 35 | 36 | ## Part 3 37 | 38 | 1. Execute the following on the undercloud as root and take note of 39 | the last directory returned by the command; it will be the newest directory. 40 | ``` 41 | ls -lhtr /tmp/ 42 | ``` 43 | 44 | 2. Change into the directory returned from the previous command. E.g. 45 | ``` 46 | cd /tmp/ansible-mistral-actionVoB_Q8 47 | ``` 48 | 3. Explore the directory 49 | - What is in inventory.yaml? 50 | - How was the playbook executed? 51 | 52 | The above directory is created by Mistral when it runs ceph-ansible. The same Mistral workflow will also delete it unless `CephAnsiblePlaybookVerbosity` has been set to a value between 1 and 5 as done in [ceph.yaml](ceph.yaml). 53 | 54 | ## Part 4 55 | 56 | Only do this if your deployment is finished. 57 | 58 | 1. Validate the overcloud as described in the last step of the oooq lab ([../oooq/oooq-lab.txt](../oooq/oooq-lab.txt)). 59 | 60 | 2. SSH into an overcloud controller and run the following as root to answer their respective questions 61 | - `docker ps | grep ceph` which containers are running? 62 | - `ceph -s` 63 | - Are the monitors in quorum? 64 | - What is the cluster health? 65 | - How many OSDs are up? 66 | - `ceph df` 67 | - How much raw space does the cluster have? 68 | - How many pools are there? 69 | - `ip a` and then `cat /etc/ceph/ceph.conf` 70 | - What is the IP range of the of cluster network (the network used to rebalance data)? 71 | - What are the IPs of the Ceph mons (the network used to access Ceph)? 72 | - Why might we wish to isolate the network used to rebalance data? 73 | - How do these networks map to the `network-environment.yaml` on the undercloud? 74 | 75 | 3. SSH into a ceph-storage node and run the following as root to answer their respective questions 76 | - `docker ps | grep ceph` which containers are running and how are they named? Do the names align with each OSDs disk? 77 | - `lsblk` 78 | - How many partitions do /dev/vdb and /dev/vdc have and how big are they? 79 | - How many partitions does /dev/vdd have and how big are they? 80 | - Can you explain the difference? 81 | 82 | 4. SSH back into an overcloud controller after the validation and re-run `ceph df` to see if the number of objects in the pools have changed. 83 | -------------------------------------------------------------------------------- /ceph/ceph.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | CephAnsiblePlaybookVerbosity: 1 3 | CephAnsibleEnvironmentVariables: 4 | ANSIBLE_SSH_RETRIES: '6' 5 | CephAnsibleDisksConfig: 6 | devices: 7 | - /dev/vdb 8 | - /dev/vdc 9 | dedicated_devices: 10 | - /dev/vdd 11 | - /dev/vdd 12 | CephAnsibleExtraConfig: 13 | osd_scenario: non-collocated 14 | osd_objectstore: filestore 15 | ceph_osd_docker_memory_limit: 3g 16 | ceph_osd_docker_cpu_limit: 1 17 | CephConfigOverrides: 18 | osd_recovery_op_priority: 3 19 | osd_recovery_max_active: 3 20 | osd_max_backfills: 1 21 | -------------------------------------------------------------------------------- /ceph/deploy-ceph.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | source ~/stackrc 4 | 5 | time openstack overcloud deploy \ 6 | --templates /usr/share/openstack-tripleo-heat-templates/ \ 7 | --libvirt-type qemu \ 8 | --compute-flavor oooq_compute --ceph-storage-flavor oooq_ceph \ 9 | --timeout 90 \ 10 | -e /home/stack/cloud-names.yaml \ 11 | -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml \ 12 | -e /usr/share/openstack-tripleo-heat-templates/environments/docker-ha.yaml \ 13 | -e /home/stack/containers-default-parameters.yaml \ 14 | -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ 15 | -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml \ 16 | -e /home/stack/network-environment.yaml \ 17 | -e /usr/share/openstack-tripleo-heat-templates/environments/low-memory-usage.yaml \ 18 | -e /usr/share/openstack-tripleo-heat-templates/environments/disable-telemetry.yaml \ 19 | --validation-warnings-fatal \ 20 | --ntp-server clock.redhat.com \ 21 | --compute-scale 1 --control-scale 3 --ceph-storage-scale 3 \ 22 | -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \ 23 | -e ceph.yaml 24 | -------------------------------------------------------------------------------- /composable-roles-dev/README.rst: -------------------------------------------------------------------------------- 1 | A few examples using process templates for composable roles/custom networks 2 | ############################################################################## 3 | 4 | The tool ``process-templates.py`` in ``THT/tools/`` is handy when developing 5 | tripleo templates. It can be used to render the jinja templates into plain heat 6 | templates using ``roles_data.yaml`` and ``network_data.yaml`` as input. 7 | 8 | It is also very useful to get a baseline to customize. Notice how it renders 9 | the ``nic-config`` files for ``multiple-nics``, ``bond-with-vlans``, 10 | ``single-nic-linux-bridge-vlans`` and ``single-nic-vlans``. (Very handy to get 11 | these rendered with all custom networks and correct vlan's and things before 12 | hand editing them to get to something that works with the exact env.) 13 | 14 | .. NOTE:: Unfortunately the ``--output-dir`` option does not seem to work. 15 | 16 | :: 17 | 18 | usage: process-templates.py [-h] [-p BASE_PATH] [-r ROLES_DATA] 19 | [-n NETWORK_DATA] [--safe] [-o OUTPUT_DIR] [-c] 20 | [-d] 21 | 22 | Configure host network interfaces using a JSON config file format. 23 | 24 | optional arguments: 25 | -h, --help show this help message and exit 26 | -p BASE_PATH, --base_path BASE_PATH 27 | base path of templates to process. 28 | -r ROLES_DATA, --roles-data ROLES_DATA 29 | relative path to the roles_data.yaml file. 30 | -n NETWORK_DATA, --network-data NETWORK_DATA 31 | relative path to the network_data.yaml file. 32 | --safe Enable safe mode (do not overwrite files). 33 | -o OUTPUT_DIR, --output-dir OUTPUT_DIR 34 | Output dir for all the templates 35 | -c, --clean clean the templates dir by deleting generated 36 | templates 37 | -d, --dry-run only output file names normally generated from j2 38 | templates 39 | 40 | 41 | #. Ensure ``python-jinja2`` package is installed 42 | 43 | :: 44 | 45 | # RHEL / CentOS 46 | yum install python-jinja2 47 | 48 | # Fedora 49 | dnf install python-jinja2 50 | 51 | #. Render the templates for Controller1 role used in the networks lab 52 | 53 | :: 54 | 55 | cd /tmp 56 | mkdir tht-processed 57 | git clone https://github.com/redhat-openstack/tripleo-workshop.git 58 | git clone https://git.openstack.org/openstack/tripleo-heat-templates 59 | cd /tmp/tripleo-heat-templates 60 | git checkout -t origin/stable/queens 61 | cd /tmp 62 | 63 | python ./tripleo-heat-templates/tools/process-templates.py \ 64 | --base_path /tmp/tripleo-heat-templates \ 65 | --roles-data /tmp/tripleo-workshop/networking/overcloud/roles/Controller1.yaml \ 66 | --network-data /tmp/tripleo-workshop/networking/overcloud/templates/network_data.yaml 67 | 68 | #. Have a look at some of the files rendered 69 | 70 | #. Controller1 Role NIC templates 71 | 72 | :: 73 | 74 | less /tmp/tripleo-heat-templates/network/config/multiple-nics/controller1.yaml 75 | 76 | less /tmp/tripleo-heat-templates/network/config/multiple-nics/controller1.yaml 77 | 78 | less /tmp/tripleo-heat-templates/network/config/single-nic-linux-bridge-vlans/controller1.yaml 79 | 80 | less /tmp/tripleo-heat-templates/network/config/single-nic-vlans/controller1.yaml 81 | 82 | 83 | 84 | #. Network environment for IPv4 and for IPv6:: 85 | 86 | less /tmp/tripleo-heat-templates/environments/network-environment.yaml 87 | less /tmp/tripleo-heat-templates/environments/network-environment-v6.yaml 88 | 89 | 90 | #. The Controller1 role templates 91 | 92 | :: 93 | 94 | less /tmp/tripleo-heat-templates/puppet/controller1-role.yaml 95 | 96 | #. Clean up rendered files 97 | 98 | :: 99 | 100 | python ./tripleo-heat-templates/tools/process-templates.py \ 101 | --base_path /tmp/tripleo-heat-templates \ 102 | --clean 103 | -------------------------------------------------------------------------------- /composable-roles/README.rst: -------------------------------------------------------------------------------- 1 | A few examples for composable roles 2 | ################################### 3 | 4 | #. OOO ships with quite a few default roles. You can view them using the CLI: 5 | 6 | :: 7 | 8 | openstack overcloud role list 9 | 10 | #. If you want to use a custom environment with some of the roles, do the 11 | following: 12 | 13 | :: 14 | 15 | openstack overcloud roles generate -o my_roles.yaml Controller ObjectStorage 16 | 17 | #. Now deploy these roles using by using your custom role definition: 18 | 19 | :: 20 | 21 | openstack overcloud deploy --templates [...] -r custom_roles.yaml --compute-scale 0 --control-scale 1 --swift-storage-scale 1 22 | 23 | #. You can also modify the generated YAML file, and remove more service that 24 | you don't want to be deployed. This is sometimes useful if you're working 25 | only on a specific service, and just want to test this service. In most 26 | cases you will need a few additional services like Keystone, MariaDB 27 | (MySQL), HAProxy. A good starting point is to remove other OpenStack 28 | services and keeping the remaining services. Have a look at the 29 | swift_only.yaml for an example. 30 | 31 | #. There is another role to prepare a two-node Kubernetes overcloud, which is quite nice to do some 32 | testing. Deploy this with: 33 | 34 | :: 35 | 36 | openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/kubernetes.yaml -r kubernetes.yaml 37 | 38 | # Workaround 39 | sudo yum install -y python-pip 40 | sudo pip install ansible-modules-hashivault 41 | 42 | # Now deploy with kubespray 43 | tripleo-config-download -s overcloud -o ~/config-download 44 | ansible-playbook -i /usr/bin/tripleo-ansible-inventory ~/config-download/tripleo-*/deploy_steps_playbook.yaml 45 | 46 | # Log into the controller node and check kubernetes nodes 47 | nova ssh --network ctlplane --address-type fixed --login heat-admin overcloud-controller-0 48 | kubectl get nodes 49 | -------------------------------------------------------------------------------- /composable-roles/kubernetes.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # File generated by TripleO 3 | ############################################################################### 4 | ############################################################################### 5 | # Role: Controller # 6 | ############################################################################### 7 | - name: Controller 8 | description: | 9 | Controller role that has all the controler services loaded and handles 10 | Database, Messaging and Network functions. 11 | CountDefault: 1 12 | tags: 13 | - primary 14 | - controller 15 | networks: 16 | - External 17 | - InternalApi 18 | - Storage 19 | - StorageMgmt 20 | - Tenant 21 | # For systems with both IPv4 and IPv6, you may specify a gateway network for 22 | # each, such as ['ControlPlane', 'External'] 23 | default_route_networks: ['External'] 24 | HostnameFormatDefault: '%stackname%-controller-%index%' 25 | # Deprecated & backward-compatible values (FIXME: Make parameters consistent) 26 | # Set uses_deprecated_params to True if any deprecated params are used. 27 | uses_deprecated_params: True 28 | deprecated_param_extraconfig: 'controllerExtraConfig' 29 | deprecated_param_flavor: 'OvercloudControlFlavor' 30 | deprecated_param_image: 'controllerImage' 31 | deprecated_nic_config_name: 'controller.yaml' 32 | ServicesDefault: 33 | - OS::TripleO::Services::Docker 34 | - OS::TripleO::Services::Kernel 35 | - OS::TripleO::Services::Ntp 36 | - OS::TripleO::Services::Snmp 37 | - OS::TripleO::Services::Timezone 38 | - OS::TripleO::Services::TripleoPackages 39 | - OS::TripleO::Services::TripleoFirewall 40 | - OS::TripleO::Services::Sshd 41 | - OS::TripleO::Services::Kubernetes::Master 42 | - OS::TripleO::Services::Kubernetes::Worker 43 | 44 | ############################################################################### 45 | # Role: Compute # 46 | ############################################################################### 47 | - name: Compute 48 | description: | 49 | Basic Compute Node role 50 | CountDefault: 1 51 | networks: 52 | - InternalApi 53 | - Tenant 54 | - Storage 55 | HostnameFormatDefault: '%stackname%-novacompute-%index%' 56 | # Deprecated & backward-compatible values (FIXME: Make parameters consistent) 57 | # Set uses_deprecated_params to True if any deprecated params are used. 58 | uses_deprecated_params: True 59 | deprecated_param_image: 'NovaImage' 60 | deprecated_param_extraconfig: 'NovaComputeExtraConfig' 61 | deprecated_param_metadata: 'NovaComputeServerMetadata' 62 | deprecated_param_scheduler_hints: 'NovaComputeSchedulerHints' 63 | deprecated_param_ips: 'NovaComputeIPs' 64 | deprecated_server_resource_name: 'NovaCompute' 65 | deprecated_nic_config_name: 'compute.yaml' 66 | disable_upgrade_deployment: True 67 | ServicesDefault: 68 | - OS::TripleO::Services::Docker 69 | - OS::TripleO::Services::Kernel 70 | - OS::TripleO::Services::Ntp 71 | - OS::TripleO::Services::Snmp 72 | - OS::TripleO::Services::Timezone 73 | - OS::TripleO::Services::TripleoPackages 74 | - OS::TripleO::Services::TripleoFirewall 75 | - OS::TripleO::Services::Sshd 76 | - OS::TripleO::Services::Kubernetes::Worker 77 | -------------------------------------------------------------------------------- /composable-roles/swift_only.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # File generated by TripleO 3 | ############################################################################### 4 | ############################################################################### 5 | # Role: Controller # 6 | ############################################################################### 7 | - name: Controller 8 | description: | 9 | Controller role that has all the controler services loaded and handles 10 | Database, Messaging and Network functions. 11 | CountDefault: 1 12 | tags: 13 | - primary 14 | - controller 15 | networks: 16 | - External 17 | - InternalApi 18 | - Storage 19 | - StorageMgmt 20 | - Tenant 21 | # For systems with both IPv4 and IPv6, you may specify a gateway network for 22 | # each, such as ['ControlPlane', 'External'] 23 | default_route_networks: ['External'] 24 | HostnameFormatDefault: '%stackname%-controller-%index%' 25 | # Deprecated & backward-compatible values (FIXME: Make parameters consistent) 26 | # Set uses_deprecated_params to True if any deprecated params are used. 27 | uses_deprecated_params: True 28 | deprecated_param_extraconfig: 'controllerExtraConfig' 29 | deprecated_param_flavor: 'OvercloudControlFlavor' 30 | deprecated_param_image: 'controllerImage' 31 | deprecated_nic_config_name: 'controller.yaml' 32 | ServicesDefault: 33 | - OS::TripleO::Services::Aide 34 | - OS::TripleO::Services::AuditD 35 | - OS::TripleO::Services::CACerts 36 | - OS::TripleO::Services::CertmongerUser 37 | - OS::TripleO::Services::Clustercheck 38 | - OS::TripleO::Services::Collectd 39 | - OS::TripleO::Services::Docker 40 | - OS::TripleO::Services::Fluentd 41 | - OS::TripleO::Services::HAproxy 42 | - OS::TripleO::Services::Ipsec 43 | - OS::TripleO::Services::Keepalived 44 | - OS::TripleO::Services::Kernel 45 | - OS::TripleO::Services::Keystone 46 | - OS::TripleO::Services::LoginDefs 47 | - OS::TripleO::Services::Memcached 48 | - OS::TripleO::Services::MySQL 49 | - OS::TripleO::Services::MySQLClient 50 | - OS::TripleO::Services::Ntp 51 | - OS::TripleO::Services::ContainersLogrotateCrond 52 | - OS::TripleO::Services::Pacemaker 53 | - OS::TripleO::Services::Rhsm 54 | - OS::TripleO::Services::RsyslogSidecar 55 | - OS::TripleO::Services::Securetty 56 | - OS::TripleO::Services::Snmp 57 | - OS::TripleO::Services::Sshd 58 | - OS::TripleO::Services::SwiftProxy 59 | - OS::TripleO::Services::SwiftDispersion 60 | - OS::TripleO::Services::SwiftRingBuilder 61 | - OS::TripleO::Services::Timezone 62 | - OS::TripleO::Services::TripleoFirewall 63 | - OS::TripleO::Services::TripleoPackages 64 | - OS::TripleO::Services::Tuned 65 | - OS::TripleO::Services::Vpp 66 | - OS::TripleO::Services::Ptp 67 | ############################################################################### 68 | # Role: ObjectStorage # 69 | ############################################################################### 70 | - name: ObjectStorage 71 | description: | 72 | Swift Object Storage node role 73 | networks: 74 | - InternalApi 75 | - Storage 76 | - StorageMgmt 77 | # Deprecated & backward-compatible values (FIXME: Make parameters consistent) 78 | # Set uses_deprecated_params to True if any deprecated params are used. 79 | uses_deprecated_params: True 80 | deprecated_param_metadata: 'SwiftStorageServerMetadata' 81 | deprecated_param_ips: 'SwiftStorageIPs' 82 | deprecated_param_image: 'SwiftStorageImage' 83 | deprecated_param_flavor: 'OvercloudSwiftStorageFlavor' 84 | deprecated_nic_config_name: 'swift-storage.yaml' 85 | disable_upgrade_deployment: True 86 | ServicesDefault: 87 | - OS::TripleO::Services::Aide 88 | - OS::TripleO::Services::AuditD 89 | - OS::TripleO::Services::CACerts 90 | - OS::TripleO::Services::CertmongerUser 91 | - OS::TripleO::Services::Collectd 92 | - OS::TripleO::Services::Docker 93 | - OS::TripleO::Services::Fluentd 94 | - OS::TripleO::Services::Ipsec 95 | - OS::TripleO::Services::Kernel 96 | - OS::TripleO::Services::LoginDefs 97 | - OS::TripleO::Services::MySQLClient 98 | - OS::TripleO::Services::Ntp 99 | - OS::TripleO::Services::ContainersLogrotateCrond 100 | - OS::TripleO::Services::Rhsm 101 | - OS::TripleO::Services::RsyslogSidecar 102 | - OS::TripleO::Services::Securetty 103 | - OS::TripleO::Services::SensuClient 104 | - OS::TripleO::Services::Snmp 105 | - OS::TripleO::Services::Sshd 106 | - OS::TripleO::Services::SwiftRingBuilder 107 | - OS::TripleO::Services::SwiftStorage 108 | - OS::TripleO::Services::Timezone 109 | - OS::TripleO::Services::TripleoFirewall 110 | - OS::TripleO::Services::TripleoPackages 111 | - OS::TripleO::Services::Tuned 112 | - OS::TripleO::Services::Ptp 113 | -------------------------------------------------------------------------------- /composable_service/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM fedora:latest 2 | 3 | RUN yum install -y nmap-ncat 4 | 5 | EXPOSE 2222 6 | 7 | CMD ["/usr/bin/ncat", "-l", "2222", "-k", "-c", "/usr/bin/date"] 8 | 9 | -------------------------------------------------------------------------------- /composable_service/README.rst: -------------------------------------------------------------------------------- 1 | A composable service example 2 | ############################ 3 | 4 | This example is based on the demo Docker container exposing a netcat service, 5 | returning the current date on the node. 6 | 7 | #. First you need to build the container and push it to the undercloud registry: 8 | 9 | :: 10 | 11 | docker build . -t 192.168.24.1:8787/sample_service 12 | docker push 192.168.24.1:8787/sample_service 13 | 14 | #. Now you need to deploy with a custom environment. Note that the used 15 | environment removes all services from the Controller node except Docker. You 16 | need to start using a clean state, thus you have to delete your current 17 | overcloud deployment (or add all controller services to the environment). 18 | 19 | :: 20 | 21 | openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e env.yaml --compute-scale 0 22 | 23 | #. There should be a single running container on the controller node after 24 | deployment: 25 | 26 | :: 27 | 28 | [heat-admin@overcloud-controller-0 ~]$ sudo docker ps 29 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30 | b112edd64c7c 192.168.24.1:8787/sample_service:latest "/usr/bin/ncat -l ..." 9 hours ago Up 9 hours sample_service 31 | 32 | #. When sending a GET request to the container, it should return the current 33 | date: 34 | 35 | :: 36 | 37 | [heat-admin@overcloud-controller-0 ~]$ curl http://127.0.0.1:2222 38 | Wed Jun 6 06:45:02 UTC 2018 39 | -------------------------------------------------------------------------------- /composable_service/env.yaml: -------------------------------------------------------------------------------- 1 | resource_registry: 2 | OS::TripleO::Services::Sample: composable_service/sample_service.yaml 3 | 4 | parameter_defaults: 5 | ControllerServices: 6 | - OS::TripleO::Services::Docker 7 | - OS::TripleO::Services::Sample 8 | DockerSampleImage: 192.168.24.1:8787/sample_service:latest 9 | DockerInsecureRegistryAddress: 192.168.24.1:8787 10 | -------------------------------------------------------------------------------- /composable_service/sample_service.yaml: -------------------------------------------------------------------------------- 1 | heat_template_version: queens 2 | 3 | description: > 4 | Sample service 5 | 6 | parameters: 7 | DockerSampleImage: 8 | description: image 9 | type: string 10 | EndpointMap: 11 | default: {} 12 | description: Mapping of service endpoint -> protocol. Typically set 13 | via parameter_defaults in the resource registry. 14 | type: json 15 | ServiceData: 16 | default: {} 17 | description: Dictionary packing service data 18 | type: json 19 | ServiceNetMap: 20 | default: {} 21 | description: Mapping of service_name -> network name. Typically set 22 | via parameter_defaults in the resource registry. This 23 | mapping overrides those in ServiceNetMapDefaults. 24 | type: json 25 | DefaultPasswords: 26 | default: {} 27 | type: json 28 | RoleName: 29 | default: '' 30 | description: Role name on which the service is applied 31 | type: string 32 | RoleParameters: 33 | default: {} 34 | description: Parameters specific to the role 35 | type: json 36 | 37 | outputs: 38 | role_data: 39 | description: Role data for the sample service 40 | value: 41 | service_name: sample_service 42 | docker_config: 43 | step_2: 44 | map_merge: 45 | - sample_service: 46 | image: &sample_image {get_param: DockerSampleImage} 47 | start_order: 2 48 | net: host 49 | user: root 50 | restart: always 51 | -------------------------------------------------------------------------------- /config-download/README.md: -------------------------------------------------------------------------------- 1 | # config-download lab 2 | 3 | Before TripleO had the [config-download](https://docs.openstack.org/tripleo-docs/latest/install/advanced_deployment/ansible_config_download.html) feature, a user took the following steps: 4 | 5 | - Describe the deployment in TripleO Heat Templates (THT) 6 | - Run _openstack overcloud deploy ... -e featureX.yaml -e featureY.yaml ..._ 7 | - Observe Heat interfacing with Nova/Ironic to deploy the hardware 8 | - Observe Heat applying configuration via os-collect-config 9 | 10 | The config-download feature changes how the last of the above 11 | works so that it could be described as the following: 12 | 13 | - Describe the deployment in TripleO Heat Templates (THT) 14 | - Run _openstack overcloud deploy ... -e featureX.yaml -e featureY.yaml ..._ 15 | - Observe Heat interfacing with Nova/Ironic to deploy the hardware 16 | - _Download the configuration data as Ansible playbooks_ 17 | - _Observe the undercloud running the playbooks to configure the overcloud_ 18 | 19 | To appreciate the difference of the above, we'll do a two-node 20 | deployment but instead of having Mistral execute the last two steps, 21 | we will pass the tripleo client options so that we run them manually. 22 | 23 | To complete the lab read and run [deploy-config-download.sh](deploy-config-download.sh) 24 | Answer the optional questions to test your understanding. 25 | 26 | - Read [deploy-config-download.sh](deploy-config-download.sh) and execute it so that only the HEAT section runs 27 | - While the deployment is running, observe the difference between the Queens and Master (Rocky) versions: 28 | - In Queens what does '--config-download' do? 29 | - In Queens what does config-download-environment.yaml do? 30 | - In Master (Rocky) what does '--no-config-download' do? 31 | - Why does Master (Rocky) not use config-download-environment.yaml? 32 | - After the deployment runs, run only the items in the DOWN section and verify you have a working ansible inventory in tripleo-config-downloadto run ad hoc commands 33 | - Run the CONF section to configure your overcloud 34 | - While the overcloud is being configured by Ansible, read the playbooks: 35 | - Read tripleo-config-download/deploy_steps_playbook.yaml first 36 | - Are we still using step-wise deployments? 37 | - How do the Ansible roles align to the default roles and what do you think would happen if we composed roles? 38 | - Why do we only have group_vars for two roles? 39 | -------------------------------------------------------------------------------- /config-download/deploy-config-download.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | HEAT=1 4 | DOWN=0 5 | CONF=0 6 | 7 | source ~/stackrc 8 | 9 | if [[ $HEAT -eq 1 ]]; then 10 | QUEENS=1 11 | ROCKY=0 12 | # 12 minutes to deploy baremetal and generate config data 13 | if [[ $QUEENS -eq 1 ]]; then 14 | # Assuming 'quickstart.sh --release queens' and borrowing line 34 of overcloud-deploy.sh 15 | time openstack overcloud deploy \ 16 | --templates /usr/share/openstack-tripleo-heat-templates/ \ 17 | --libvirt-type qemu --compute-flavor oooq_compute --ceph-storage-flavor oooq_ceph --block-storage-flavor oooq_blockstorage --swift-storage-flavor oooq_objectstorage --timeout 90 -e /home/stack/cloud-names.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/docker-ha.yaml -e /home/stack/containers-default-parameters.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml -e /home/stack/network-environment.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/low-memory-usage.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/disable-telemetry.yaml --validation-warnings-fatal --compute-scale 1 --control-scale 1 --ceph-storage-scale 0 --ntp-server clock.redhat.com \ 18 | -e /usr/share/openstack-tripleo-heat-templates/environments/config-download-environment.yaml 19 | #--config-download 20 | # add --config-download to make DOWN and CONF unnecessary 21 | fi 22 | if [[ $ROCKY -eq 1 ]]; then 23 | # Works for 'quickstart.sh --release master-tripleo-ci' 24 | time openstack overcloud deploy \ 25 | --templates /usr/share/openstack-tripleo-heat-templates/ \ 26 | --libvirt-type qemu --compute-flavor oooq_compute --ceph-storage-flavor oooq_ceph --block-storage-flavor oooq_blockstorage --swift-storage-flavor oooq_objectstorage --timeout 90 -e /home/stack/cloud-names.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/docker.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/docker-ha.yaml -e /home/stack/containers-default-parameters.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml -e /home/stack/network-environment.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/low-memory-usage.yaml -e /usr/share/openstack-tripleo-heat-templates/environments/disable-telemetry.yaml --validation-warnings-fatal --compute-scale 1 --control-scale 1 --ceph-storage-scale 0 --ntp-server clock.redhat.com \ 27 | --no-config-download 28 | # remove --no-config-download to make DOWN and CONF unnecessary 29 | fi 30 | fi 31 | # ------------------------------------------------------- 32 | if [[ $DOWN -eq 1 ]]; then 33 | # 1 minute to download config data and make inventory 34 | if [[ $(openstack stack list | grep overcloud | wc -l) -eq 0 ]]; then 35 | echo "No overcloud heat stack. Exiting" 36 | exit 1 37 | fi 38 | tripleo-config-download 39 | if [[ ! -d tripleo-config-download ]]; then 40 | echo "tripleo-config-download cmd didn't create tripleo-config-download dir" 41 | else 42 | pushd tripleo-config-download 43 | tripleo-ansible-inventory --static-yaml-inventory inventory.yaml 44 | ansible --ssh-extra-args "-o StrictHostKeyChecking=no" -i inventory.yaml all -m ping 45 | popd 46 | echo "pushd tripleo-config-download" 47 | echo 'ansible -i inventory.yaml all -m shell -b -a "hostname"' 48 | fi 49 | fi 50 | # ------------------------------------------------------- 51 | if [[ $CONF -eq 1 ]]; then 52 | # 25 minutes to configure _minimal_ overcloud 53 | if [[ ! -e tripleo-config-download/deploy_steps_playbook.yaml ]]; then 54 | # Rocky (master) and Queens differ on if this is necessary 55 | MOST_RECENT_DIR=$(ls -trF tripleo-config-download | grep / | tail -1) 56 | fi 57 | time ansible-playbook \ 58 | -v \ 59 | --ssh-extra-args "-o StrictHostKeyChecking=no" --timeout 240 \ 60 | --become \ 61 | -i tripleo-config-download/inventory.yaml \ 62 | tripleo-config-download/$MOST_RECENT_DIR/deploy_steps_playbook.yaml 63 | fi 64 | -------------------------------------------------------------------------------- /container-modification/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM 192.168.24.1:8787/tripleoqueens/centos-binary-swift-proxy-server:current-tripleo-rdo 2 | USER root 3 | RUN /usr/bin/yum install -y patch 4 | COPY swift.patch swift.patch 5 | RUN patch -p 1 -d /usr/lib/python2.7/site-packages/swift < swift.patch 6 | USER swift 7 | -------------------------------------------------------------------------------- /container-modification/README.rst: -------------------------------------------------------------------------------- 1 | Modifying a Docker container in TripleO 2 | ####################################### 3 | 4 | #. Let's assume you want to make a modification to an existing container, for 5 | example to apply an patch to one of the services. In this case you create a 6 | Dockerfile with the required commands to execute, and rebuild the container: 7 | 8 | :: 9 | 10 | sudo docker build --rm -t 192.168.24.1:8787/tripleoqueens/centos-binary-swift-proxy-server:fix . 11 | sudo docker push 192.168.24.1:8787/tripleoqueens/centos-binary-swift-proxy-server:fix 12 | 13 | #. Now use the modified container by deploying with the additional environment 14 | file: 15 | 16 | :: 17 | 18 | openstack overcloud deploy --templates [...] -e use-modified-container.yaml 19 | 20 | #. If you used the patch from this directory, you should get a slightly 21 | modified response from the Swift proxy server when sending a GET request to 22 | http:///info. Look out for tripleo: 23 | 24 | :: 25 | 26 | source overcloudrc && swift info 27 | -------------------------------------------------------------------------------- /container-modification/swift.patch: -------------------------------------------------------------------------------- 1 | diff --git a/common/utils.py b/common/utils.py 2 | index 197e189..e48d5dd 100644 3 | --- a/common/utils.py 4 | +++ b/common/utils.py 5 | @@ -312,6 +312,9 @@ def get_swift_info(admin=False, disallowed_sections=None): 6 | if admin: 7 | info['admin'] = dict(_swift_admin_info) 8 | info['admin']['disallowed_sections'] = list(disallowed_sections) 9 | + 10 | + info['tripleo'] = {"msg": "Hello World"} 11 | + 12 | return info 13 | -------------------------------------------------------------------------------- /container-modification/use-modified-container.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | DockerInsecureRegistryAddress: 192.168.24.1:8787 3 | DockerSwiftProxyImage: 192.168.24.1:8787/tripleoqueens/centos-binary-swift-proxy-server:fix 4 | -------------------------------------------------------------------------------- /networking/overcloud/README.rst: -------------------------------------------------------------------------------- 1 | tripleo-workshop - networking - Overcloud Installation 2 | ###################################################### 3 | 4 | #. Copy templates, roles, environments and scripts from the git repo 5 | 6 | :: 7 | 8 | scp -r ./tripleo-workshop/networking/overcloud/* /home/stack/ 9 | 10 | #. Create flavors 11 | 12 | :: 13 | 14 | bash ./scripts/create_flavors.sh 15 | 16 | #. Set baremetal node capabilities 17 | 18 | :: 19 | 20 | bash ./scripts/set_capabilities.sh 21 | 22 | #. Configure baremetal node port's physical network 23 | 24 | :: 25 | 26 | bash ./scripts/set_bm_port_physnet.sh 27 | 28 | 29 | #. Provide (make available) all baremetal nodes 30 | 31 | :: 32 | 33 | openstack overcloud node provide --all-manageable 34 | 35 | #. Create roles data 36 | 37 | :: 38 | 39 | openstack overcloud roles generate \ 40 | --roles-path /home/stack/roles \ 41 | -o /home/stack/templates/roles_data.yaml \ 42 | Controller1 Compute1 Compute2 Compute3 Ceph1 Ceph2 Ceph3 43 | 44 | #. Prepare docker images 45 | 46 | :: 47 | 48 | openstack overcloud container image prepare \ 49 | --namespace docker.io/tripleoqueens \ 50 | --tag current-tripleo \ 51 | --tag-from-label rdo_version \ 52 | --output-env-file /home/stack/environments/docker_registry.yaml \ 53 | --output-images-file /home/stack/templates/overcloud_containers.yaml 54 | 55 | #. Workaround for `bug: #1772124 `_ 56 | 57 | :: 58 | 59 | sudo sed -i s/internal_api_virtual_ip/#internal_api_virtual_ip/ \ 60 | /usr/share/openstack-tripleo-heat-templates/puppet/all-nodes-config.j2.yaml 61 | 62 | #. Workaround for `bug: #1774401 `_ 63 | 64 | :: 65 | 66 | sudo sed -i s/ExternalNetName/External1NetName/ \ 67 | /usr/share/openstack-tripleo-heat-templates/puppet/all-nodes-config.j2.yaml 68 | 69 | #. Install playbooks for ceph-ansible deploy 70 | 71 | :: 72 | 73 | sudo yum install -y ceph-ansible 74 | 75 | #. Deploy the overcloud 76 | 77 | :: 78 | 79 | time bash deploy_overcloud.sh 80 | 81 | .. NOTE:: The deployment will fail. Try to figure it out. First on to 82 | solve it can put the solution in the etherpad. 83 | -------------------------------------------------------------------------------- /networking/overcloud/deploy_overcloud.sh: -------------------------------------------------------------------------------- 1 | source /home/stack/stackrc 2 | cd /home/stack 3 | 4 | 5 | openstack overcloud deploy \ 6 | --templates \ 7 | --ntp-server clock.redhat.com \ 8 | -n /home/stack/templates/network_data.yaml \ 9 | -r /home/stack/templates/roles_data.yaml \ 10 | -e /home/stack/environments/nodes_data.yaml \ 11 | -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ 12 | -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \ 13 | -e /usr/share/openstack-tripleo-heat-templates/environments/low-memory-usage.yaml \ 14 | -e /usr/share/openstack-tripleo-heat-templates/environments/network-environment.yaml \ 15 | -e /home/stack/environments/network-environment-overrides.yaml \ 16 | -e /home/stack/environments/service_net_map_overrides.yaml \ 17 | -e /home/stack/environments/scheduler_hints_env.yaml \ 18 | -e /home/stack/environments/custom_hostnames.yaml \ 19 | -e /home/stack/environments/predictable_ips.yaml \ 20 | -e /home/stack/templates/ceph/ceph.yaml \ 21 | -e /home/stack/environments/docker_registry.yaml 22 | -------------------------------------------------------------------------------- /networking/overcloud/environments/custom_hostnames.yaml: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------------ 2 | # In combination with the custom placement configuration (scheduler_hints) , it 3 | # is also possible to assign a specific baremetal node a custom hostname. This 4 | # may be used to denote where a system is located (e.g. rack2-row12), to make 5 | # the hostname match an inventory identifier, or any other situation where a 6 | # custom hostname is desired. 7 | #------------------------------------------------------------------------------ 8 | parameter_defaults: 9 | HostnameMap: 10 | overcloud-controller1-0: barn-owl 11 | overcloud-controller1-1: little-owl 12 | overcloud-controller1-2: hawk-owl 13 | -------------------------------------------------------------------------------- /networking/overcloud/environments/network-environment-overrides.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | # ------------------------------------------------------------------------- 3 | # Control Plane subnet is used to get the VIPs, 4 | # VIPs need to be on same network as controllers. 5 | # ------------------------------------------------------------------------- 6 | ControlPlaneSubnet: ctlplane1 7 | 8 | # ------------------------------------------------------------------------- 9 | # Controller Node role - subnet mapping 10 | # ------------------------------------------------------------------------- 11 | Controller1ControlPlaneSubnet: ctlplane1 12 | 13 | # ------------------------------------------------------------------------- 14 | # Compute Node roles - subnet mapping 15 | # ------------------------------------------------------------------------- 16 | Compute1ControlPlaneSubnet: ctlplane1 17 | Compute2ControlPlaneSubnet: ctlplane2 18 | Compute3ControlPlaneSubnet: ctlplane3 19 | 20 | # ------------------------------------------------------------------------- 21 | # Ceph Node roles - subnet mapping 22 | # ------------------------------------------------------------------------- 23 | CephStorage1ControlPlaneSubnet: ctlplane1 24 | CephStorage2ControlPlaneSubnet: ctlplane2 25 | CephStorage3ControlPlaneSubnet: ctlplane3 26 | 27 | # ------------------------------------------------------------------------- 28 | # Control Plane route and ip subnet prefix for: 29 | # ctlplane0, ctlplane1, ctlplane2 and ctlplane3 30 | # ------------------------------------------------------------------------- 31 | ControlPlane0DefaultRoute: 172.20.0.62 32 | ControlPlane0SubnetCidr: '26' 33 | ControlPlane1DefaultRoute: 172.20.0.126 34 | ControlPlane1SubnetCidr: '26' 35 | ControlPlane2DefaultRoute: 172.20.0.190 36 | ControlPlane2SubnetCidr: '26' 37 | ControlPlane3DefaultRoute: 172.20.0.254 38 | ControlPlane3SubnetCidr: '26' 39 | 40 | DnsServers: 41 | - 10.12.50.1 42 | 43 | # ------------------------------------------------------------------------- 44 | # EC2MetadataIp's 45 | # ------------------------------------------------------------------------- 46 | # The metadata ip address for the leaf local 47 | # to the undercloud is the main undercloud ip. 48 | # For the remote (non-local) leafs, the routed 49 | # network infra need a route to 169.254.169.254 50 | # via routers to the undercloud main ip. 51 | # ------------------------------------------------------------------------- 52 | ControlPlane0EC2MetadataIp: 172.20.0.1 53 | ControlPlane1EC2MetadataIp: 172.20.0.126 54 | ControlPlane2EC2MetadataIp: 172.20.0.190 55 | ControlPlane3EC2MetadataIp: 172.20.0.254 56 | 57 | # ------------------------------------------------------------------------- 58 | # Supernets 59 | # ------------------------------------------------------------------------- 60 | # These are Supernet CIDR's used in the routing tables. 61 | # Supernets allow a single routing table entry for multiple 62 | # adjecent networks. 63 | # ------------------------------------------------------------------------- 64 | ExternalSupernet: 172.20.2.0/26 65 | InternalApiSupernet: 172.20.1.0/24 66 | StorageSupernet: 172.20.3.0/24 67 | StorageMgmtSupernet: 172.20.4.0/24 68 | TenantSupernet: 172.20.5.0/24 69 | CtlplaneSupernet: 172.20.0.0/24 70 | 71 | Storage3NetworkVlanID: 639 72 | 73 | NeutronBridgeMappings: datacentre:br-ex,tenant:br-isolated 74 | NeutronExternalNetworkBridge: '' 75 | NeutronNetworkType: vxlan 76 | NeutronNetworkVLANRanges: tenant:1000:2000 77 | NeutronTunnelTypes: vxlan 78 | 79 | resource_registry: 80 | #-------------------------------------------------------------------------- 81 | # Controller Nodes 82 | OS::TripleO::Controller1::Net::SoftwareConfig: /home/stack/templates/nic-config/control1.yaml 83 | #-------------------------------------------------------------------------- 84 | # Ceph Storage Nodes 85 | OS::TripleO::CephStorage0::Net::SoftwareConfig: /home/stack/templates/nic-config/ceph0.yaml 86 | OS::TripleO::CephStorage1::Net::SoftwareConfig: /home/stack/templates/nic-config/ceph1.yaml 87 | OS::TripleO::CephStorage2::Net::SoftwareConfig: /home/stack/templates/nic-config/ceph2.yaml 88 | OS::TripleO::CephStorage3::Net::SoftwareConfig: /home/stack/templates/nic-config/ceph3.yaml 89 | #-------------------------------------------------------------------------- 90 | # Compute Nodes 91 | OS::TripleO::Compute0::Net::SoftwareConfig: /home/stack/templates/nic-config/compute0.yaml 92 | OS::TripleO::Compute1::Net::SoftwareConfig: /home/stack/templates/nic-config/compute1.yaml 93 | OS::TripleO::Compute2::Net::SoftwareConfig: /home/stack/templates/nic-config/compute2.yaml 94 | OS::TripleO::Compute3::Net::SoftwareConfig: /home/stack/templates/nic-config/compute3.yaml -------------------------------------------------------------------------------- /networking/overcloud/environments/nodes_data.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | 3 | #-------------------------------------------------------------------------- 4 | # Controller Nodes 5 | #-------------------------------------------------------------------------- 6 | Controller1Count: 3 7 | OvercloudController1Flavor: control1 8 | Controller1xtraConfig: 9 | neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant1')}" 10 | 11 | #-------------------------------------------------------------------------- 12 | # Compute Nodes 13 | #-------------------------------------------------------------------------- 14 | Compute1Count: 1 15 | OvercloudCompute1Flavor: compute1 16 | Compute1ExtraConfig: 17 | neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant1')}" 18 | Compute2Count: 1 19 | OvercloudCompute2Flavor: compute2 20 | Compute2ExtraConfig: 21 | neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant2')}" 22 | Compute3Count: 1 23 | OvercloudCompute3Flavor: compute3 24 | Compute3ExtraConfig: 25 | neutron::agents::ml2::ovs::local_ip: "%{hiera('tenant3')}" 26 | 27 | #-------------------------------------------------------------------------- 28 | # Ceph Storage Nodes 29 | #-------------------------------------------------------------------------- 30 | CephStorage1Count: 1 31 | OvercloudCephStorage1Flavor: ceph1 32 | CephStorage2Count: 1 33 | OvercloudCephStorage2Flavor: ceph2 34 | CephStorage3Count: 1 35 | OvercloudCephStorage3Flavor: ceph3 36 | 37 | 38 | NtpServer: ["clock.redhat.com","clock2.redhat.com"] 39 | -------------------------------------------------------------------------------- /networking/overcloud/environments/predictable_ips.yaml: -------------------------------------------------------------------------------- 1 | resource_registry: 2 | # OS::TripleO::{role.name]::Ports::{network.name}Port : ../network/ports/{network.name_lower}_from_pool.yaml 3 | OS::TripleO::Controller1::Ports::External1Port: /usr/share/openstack-tripleo-heat-templates/network/ports/external1_from_pool.yaml 4 | OS::TripleO::Controller1::Ports::InternalApi1Port: /usr/share/openstack-tripleo-heat-templates/network/ports/internal_api1_from_pool.yaml 5 | OS::TripleO::Controller1::Ports::Storage1Port: /usr/share/openstack-tripleo-heat-templates/network/ports/storage1_from_pool.yaml 6 | OS::TripleO::Controller1::Ports::StorageMgmt1Port: /usr/share/openstack-tripleo-heat-templates/network/ports/storage_mgmt1_from_pool.yaml 7 | OS::TripleO::Controller1::Ports::Tenant1Port: /usr/share/openstack-tripleo-heat-templates/network/ports/tenant1_from_pool.yaml 8 | 9 | parameter_defaults: 10 | #---------------------------------------------------------------------------- 11 | # Predictable Virtual IPs (VIPs) for services. 12 | # These IPs MUST come from outside their allocation range to prevent 13 | # conflicts. 14 | #---------------------------------------------------------------------------- 15 | ControlFixedIPs: [{'ip_address':'172.20.0.65'}] 16 | InternalApi1VirtualFixedIPs: [{'ip_address':'172.20.1.65'}] 17 | External1VirtualFixedIPs: [{'ip_address':'172.20.2.65'}] 18 | Storage1VirtualFixedIPs: [{'ip_address':'172.20.3.65'}] 19 | StorageMgmt1VirtualFixedIPs: [{'ip_address':'172.20.4.65'}] 20 | RedisVirtualFixedIPs: [{'ip_address':'172.20.1.66'}] 21 | 22 | #---------------------------------------------------------------------------- 23 | # {role.name}IPs 24 | # Each parameter is a map of network names to a list of addresses. Each 25 | # network must have at least as many addresses as there will be nodes on that 26 | # network. The addresses will be assigned in order, so the first node of each 27 | # type will get the first address in each of the lists, the second node will 28 | # get the second address in each of the lists, and so on. 29 | #---------------------------------------------------------------------------- 30 | Controller1IPs: 31 | # Each controller will get an IP from the lists below, first controller, first IP 32 | external1: 33 | - 172.20.2.100 34 | - 172.20.2.101 35 | - 172.20.2.102 36 | internal_api1: 37 | - 172.20.1.100 38 | - 172.20.1.101 39 | - 172.20.1.102 40 | storage1: 41 | - 172.20.3.100 42 | - 172.20.3.101 43 | - 172.20.3.102 44 | storage_mgmt1: 45 | - 172.20.4.100 46 | - 172.20.4.101 47 | - 172.20.4.102 48 | tenant1: 49 | - 172.20.5.100 50 | - 172.20.5.101 51 | - 172.20.5.102 52 | -------------------------------------------------------------------------------- /networking/overcloud/environments/scheduler_hints_env.yaml: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------------ 2 | # For custom roles (defined via roles_data.yaml) the parameter will be named 3 | # RoleNameSchedulerHints, where RoleName is the name specified in 4 | # roles_data.yaml. 5 | #------------------------------------------------------------------------------ 6 | 7 | parameter_defaults: 8 | Controller1SchedulerHints: 9 | 'capabilities:node': 'controller1-%index%' 10 | -------------------------------------------------------------------------------- /networking/overcloud/environments/service_net_map_overrides.yaml: -------------------------------------------------------------------------------- 1 | parameter_defaults: 2 | ServiceNetMap: 3 | ApacheNetwork: internal_api1 4 | NeutronTenantNetwork: tenant1 5 | CeilometerApiNetwork: internal_api1 6 | AodhApiNetwork: internal_api1 7 | PankoApiNetwork: internal_api1 8 | BarbicanApiNetwork: internal_api1 9 | GnocchiApiNetwork: internal_api1 10 | MongodbNetwork: internal_api1 11 | CinderApiNetwork: internal_api1 12 | CinderIscsiNetwork: storage1 13 | CongressApiNetwork: internal_api1 14 | GlanceApiNetwork: internal_api1 15 | IronicApiNetwork: ctlplane 16 | IronicNetwork: ctlplane 17 | IronicInspectorNetwork: ctlplane 18 | KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints 19 | KeystonePublicApiNetwork: internal_api1 20 | ManilaApiNetwork: internal_api1 21 | NeutronApiNetwork: internal_api1 22 | OctaviaApiNetwork: internal_api1 23 | HeatApiNetwork: internal_api1 24 | HeatApiCfnNetwork: internal_api1 25 | HeatApiCloudwatchNetwork: internal_api1 26 | NovaApiNetwork: internal_api1 27 | NovaPlacementNetwork: internal_api1 28 | NovaMetadataNetwork: internal_api1 29 | NovaVncProxyNetwork: internal_api1 30 | NovaLibvirtNetwork: internal_api1 31 | NovajoinNetwork: internal_api1 32 | Ec2ApiNetwork: internal_api1 33 | Ec2ApiMetadataNetwork: internal_api1 34 | TackerApiNetwork: internal_api1 35 | SwiftStorageNetwork: storage_mgmt1 36 | SwiftProxyNetwork: storage1 37 | SaharaApiNetwork: internal_api1 38 | HorizonNetwork: internal_api1 39 | MemcachedNetwork: internal_api1 40 | OsloMessagingRpcNetwork: internal_api1 41 | OsloMessagingNotifyNetwork: internal_api1 42 | RabbitmqNetwork: internal_api1 43 | QdrNetwork: internal_api1 44 | RedisNetwork: internal_api1 45 | GaneshaNetwork: storage_nfs 46 | MysqlNetwork: internal_api1 47 | SnmpdNetwork: internal_api1 48 | CephClusterNetwork: storage_mgmt 49 | CephMonNetwork: storage1 50 | CephRgwNetwork: storage1 51 | PublicNetwork: external1 52 | OpendaylightApiNetwork: internal_api1 53 | OvnDbsNetwork: internal_api1 54 | MistralApiNetwork: internal_api1 55 | ZaqarApiNetwork: internal_api1 56 | DockerRegistryNetwork: ctlplane 57 | PacemakerRemoteNetwork: internal_api1 58 | TripleoUINetwork: internal_api1 59 | DesignateApiNetwork: internal_api1 60 | # We special-case the default ResolveNetwork for the CephStorage role 61 | # for backwards compatibility, all other roles default to internal_api 62 | CephStorage1HostnameResolveNetwork: storage1 63 | CephStorage2HostnameResolveNetwork: storage2 64 | CephStorage3HostnameResolveNetwork: storage3 65 | EtcdNetwork: internal_api 66 | #{% for role in roles if role.name != 'CephStorage' %} 67 | # {{role.name}}HostnameResolveNetwork: internal_api 68 | #{% endfor %} 69 | Controller1HostnameResolveNetwork: internal_api1 70 | Compute1HostnameResolveNetwork: internal_api1 71 | Compute2HostnameResolveNetwork: internal_api2 72 | Compute3HostnameResolveNetwork: internal_api3 -------------------------------------------------------------------------------- /networking/overcloud/roles/Ceph1.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Role: CephStorage1 # 3 | ############################################################################### 4 | - name: CephStorage1 5 | description: | 6 | Ceph OSD Storage node role 7 | networks: 8 | - Storage1 9 | - StorageMgmt1 10 | HostnameFormatDefault: '%stackname%-ceph1-%index%' 11 | uses_deprecated_params: False 12 | ServicesDefault: 13 | - OS::TripleO::Services::Aide 14 | - OS::TripleO::Services::AuditD 15 | - OS::TripleO::Services::CACerts 16 | - OS::TripleO::Services::CephOSD 17 | - OS::TripleO::Services::CertmongerUser 18 | - OS::TripleO::Services::Collectd 19 | - OS::TripleO::Services::Docker 20 | - OS::TripleO::Services::Fluentd 21 | - OS::TripleO::Services::Ipsec 22 | - OS::TripleO::Services::Kernel 23 | - OS::TripleO::Services::LoginDefs 24 | - OS::TripleO::Services::MySQLClient 25 | - OS::TripleO::Services::Ntp 26 | - OS::TripleO::Services::ContainersLogrotateCrond 27 | - OS::TripleO::Services::Rhsm 28 | - OS::TripleO::Services::RsyslogSidecar 29 | - OS::TripleO::Services::Securetty 30 | - OS::TripleO::Services::SensuClient 31 | - OS::TripleO::Services::Snmp 32 | - OS::TripleO::Services::Sshd 33 | - OS::TripleO::Services::Timezone 34 | - OS::TripleO::Services::TripleoFirewall 35 | - OS::TripleO::Services::TripleoPackages 36 | - OS::TripleO::Services::Tuned 37 | - OS::TripleO::Services::Ptp 38 | -------------------------------------------------------------------------------- /networking/overcloud/roles/Ceph2.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Role: CephStorage2 # 3 | ############################################################################### 4 | - name: CephStorage2 5 | description: | 6 | Ceph OSD Storage node role 7 | networks: 8 | - Storage2 9 | - StorageMgmt2 10 | HostnameFormatDefault: '%stackname%-ceph2-%index%' 11 | uses_deprecated_params: False 12 | ServicesDefault: 13 | - OS::TripleO::Services::Aide 14 | - OS::TripleO::Services::AuditD 15 | - OS::TripleO::Services::CACerts 16 | - OS::TripleO::Services::CephOSD 17 | - OS::TripleO::Services::CertmongerUser 18 | - OS::TripleO::Services::Collectd 19 | - OS::TripleO::Services::Docker 20 | - OS::TripleO::Services::Fluentd 21 | - OS::TripleO::Services::Ipsec 22 | - OS::TripleO::Services::Kernel 23 | - OS::TripleO::Services::LoginDefs 24 | - OS::TripleO::Services::MySQLClient 25 | - OS::TripleO::Services::Ntp 26 | - OS::TripleO::Services::ContainersLogrotateCrond 27 | - OS::TripleO::Services::Rhsm 28 | - OS::TripleO::Services::RsyslogSidecar 29 | - OS::TripleO::Services::Securetty 30 | - OS::TripleO::Services::SensuClient 31 | - OS::TripleO::Services::Snmp 32 | - OS::TripleO::Services::Sshd 33 | - OS::TripleO::Services::Timezone 34 | - OS::TripleO::Services::TripleoFirewall 35 | - OS::TripleO::Services::TripleoPackages 36 | - OS::TripleO::Services::Tuned 37 | - OS::TripleO::Services::Ptp 38 | -------------------------------------------------------------------------------- /networking/overcloud/roles/Ceph3.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Role: CephStorage3 # 3 | ############################################################################### 4 | - name: CephStorage3 5 | description: | 6 | Ceph OSD Storage node role 7 | networks: 8 | - Storage3 9 | - StorageMgmt3 10 | HostnameFormatDefault: '%stackname%-ceph3-%index%' 11 | uses_deprecated_params: False 12 | ServicesDefault: 13 | - OS::TripleO::Services::Aide 14 | - OS::TripleO::Services::AuditD 15 | - OS::TripleO::Services::CACerts 16 | - OS::TripleO::Services::CephOSD 17 | - OS::TripleO::Services::CertmongerUser 18 | - OS::TripleO::Services::Collectd 19 | - OS::TripleO::Services::Docker 20 | - OS::TripleO::Services::Fluentd 21 | - OS::TripleO::Services::Ipsec 22 | - OS::TripleO::Services::Kernel 23 | - OS::TripleO::Services::LoginDefs 24 | - OS::TripleO::Services::MySQLClient 25 | - OS::TripleO::Services::Ntp 26 | - OS::TripleO::Services::ContainersLogrotateCrond 27 | - OS::TripleO::Services::Rhsm 28 | - OS::TripleO::Services::RsyslogSidecar 29 | - OS::TripleO::Services::Securetty 30 | - OS::TripleO::Services::SensuClient 31 | - OS::TripleO::Services::Snmp 32 | - OS::TripleO::Services::Sshd 33 | - OS::TripleO::Services::Timezone 34 | - OS::TripleO::Services::TripleoFirewall 35 | - OS::TripleO::Services::TripleoPackages 36 | - OS::TripleO::Services::Tuned 37 | - OS::TripleO::Services::Ptp 38 | -------------------------------------------------------------------------------- /networking/overcloud/roles/Compute1.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Role: Compute1 # 3 | ############################################################################### 4 | - name: Compute1 5 | description: | 6 | Basic Compute Node role 7 | CountDefault: 1 8 | networks: 9 | - InternalApi1 10 | - Tenant1 11 | - Storage1 12 | HostnameFormatDefault: '%stackname%-compute1-%index%' 13 | disable_upgrade_deployment: True 14 | uses_deprecated_params: False 15 | ServicesDefault: 16 | - OS::TripleO::Services::Aide 17 | - OS::TripleO::Services::AuditD 18 | - OS::TripleO::Services::CACerts 19 | - OS::TripleO::Services::CephClient 20 | - OS::TripleO::Services::CephExternal 21 | - OS::TripleO::Services::CertmongerUser 22 | - OS::TripleO::Services::Collectd 23 | - OS::TripleO::Services::ComputeCeilometerAgent 24 | - OS::TripleO::Services::ComputeNeutronCorePlugin 25 | - OS::TripleO::Services::ComputeNeutronL3Agent 26 | - OS::TripleO::Services::ComputeNeutronMetadataAgent 27 | - OS::TripleO::Services::ComputeNeutronOvsAgent 28 | - OS::TripleO::Services::Docker 29 | - OS::TripleO::Services::Fluentd 30 | - OS::TripleO::Services::Ipsec 31 | - OS::TripleO::Services::Iscsid 32 | - OS::TripleO::Services::Kernel 33 | - OS::TripleO::Services::LoginDefs 34 | - OS::TripleO::Services::MySQLClient 35 | - OS::TripleO::Services::NeutronBgpVpnBagpipe 36 | - OS::TripleO::Services::NeutronLinuxbridgeAgent 37 | - OS::TripleO::Services::NeutronVppAgent 38 | - OS::TripleO::Services::NovaCompute 39 | - OS::TripleO::Services::NovaLibvirt 40 | - OS::TripleO::Services::NovaMigrationTarget 41 | - OS::TripleO::Services::Ntp 42 | - OS::TripleO::Services::ContainersLogrotateCrond 43 | - OS::TripleO::Services::OpenDaylightOvs 44 | - OS::TripleO::Services::Rhsm 45 | - OS::TripleO::Services::RsyslogSidecar 46 | - OS::TripleO::Services::Securetty 47 | - OS::TripleO::Services::SensuClient 48 | - OS::TripleO::Services::SkydiveAgent 49 | - OS::TripleO::Services::Snmp 50 | - OS::TripleO::Services::Sshd 51 | - OS::TripleO::Services::Timezone 52 | - OS::TripleO::Services::TripleoFirewall 53 | - OS::TripleO::Services::TripleoPackages 54 | - OS::TripleO::Services::Tuned 55 | - OS::TripleO::Services::Vpp 56 | - OS::TripleO::Services::OVNController 57 | - OS::TripleO::Services::OVNMetadataAgent 58 | - OS::TripleO::Services::Ptp 59 | -------------------------------------------------------------------------------- /networking/overcloud/roles/Compute2.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Role: Compute2 # 3 | ############################################################################### 4 | - name: Compute2 5 | description: | 6 | Basic Compute Node role 7 | CountDefault: 1 8 | networks: 9 | - InternalApi2 10 | - Tenant2 11 | - Storage2 12 | HostnameFormatDefault: '%stackname%-compute2-%index%' 13 | disable_upgrade_deployment: True 14 | uses_deprecated_params: False 15 | ServicesDefault: 16 | - OS::TripleO::Services::Aide 17 | - OS::TripleO::Services::AuditD 18 | - OS::TripleO::Services::CACerts 19 | - OS::TripleO::Services::CephClient 20 | - OS::TripleO::Services::CephExternal 21 | - OS::TripleO::Services::CertmongerUser 22 | - OS::TripleO::Services::Collectd 23 | - OS::TripleO::Services::ComputeCeilometerAgent 24 | - OS::TripleO::Services::ComputeNeutronCorePlugin 25 | - OS::TripleO::Services::ComputeNeutronL3Agent 26 | - OS::TripleO::Services::ComputeNeutronMetadataAgent 27 | - OS::TripleO::Services::ComputeNeutronOvsAgent 28 | - OS::TripleO::Services::Docker 29 | - OS::TripleO::Services::Fluentd 30 | - OS::TripleO::Services::Ipsec 31 | - OS::TripleO::Services::Iscsid 32 | - OS::TripleO::Services::Kernel 33 | - OS::TripleO::Services::LoginDefs 34 | - OS::TripleO::Services::MySQLClient 35 | - OS::TripleO::Services::NeutronBgpVpnBagpipe 36 | - OS::TripleO::Services::NeutronLinuxbridgeAgent 37 | - OS::TripleO::Services::NeutronVppAgent 38 | - OS::TripleO::Services::NovaCompute 39 | - OS::TripleO::Services::NovaLibvirt 40 | - OS::TripleO::Services::NovaMigrationTarget 41 | - OS::TripleO::Services::Ntp 42 | - OS::TripleO::Services::ContainersLogrotateCrond 43 | - OS::TripleO::Services::OpenDaylightOvs 44 | - OS::TripleO::Services::Rhsm 45 | - OS::TripleO::Services::RsyslogSidecar 46 | - OS::TripleO::Services::Securetty 47 | - OS::TripleO::Services::SensuClient 48 | - OS::TripleO::Services::SkydiveAgent 49 | - OS::TripleO::Services::Snmp 50 | - OS::TripleO::Services::Sshd 51 | - OS::TripleO::Services::Timezone 52 | - OS::TripleO::Services::TripleoFirewall 53 | - OS::TripleO::Services::TripleoPackages 54 | - OS::TripleO::Services::Tuned 55 | - OS::TripleO::Services::Vpp 56 | - OS::TripleO::Services::OVNController 57 | - OS::TripleO::Services::OVNMetadataAgent 58 | - OS::TripleO::Services::Ptp 59 | -------------------------------------------------------------------------------- /networking/overcloud/roles/Compute3.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Role: Compute3 # 3 | ############################################################################### 4 | - name: Compute3 5 | description: | 6 | Basic Compute Node role 7 | CountDefault: 1 8 | networks: 9 | - InternalApi3 10 | - Tenant3 11 | - Storage3 12 | HostnameFormatDefault: '%stackname%-compute3-%index%' 13 | disable_upgrade_deployment: True 14 | uses_deprecated_params: False 15 | ServicesDefault: 16 | - OS::TripleO::Services::Aide 17 | - OS::TripleO::Services::AuditD 18 | - OS::TripleO::Services::CACerts 19 | - OS::TripleO::Services::CephClient 20 | - OS::TripleO::Services::CephExternal 21 | - OS::TripleO::Services::CertmongerUser 22 | - OS::TripleO::Services::Collectd 23 | - OS::TripleO::Services::ComputeCeilometerAgent 24 | - OS::TripleO::Services::ComputeNeutronCorePlugin 25 | - OS::TripleO::Services::ComputeNeutronL3Agent 26 | - OS::TripleO::Services::ComputeNeutronMetadataAgent 27 | - OS::TripleO::Services::ComputeNeutronOvsAgent 28 | - OS::TripleO::Services::Docker 29 | - OS::TripleO::Services::Fluentd 30 | - OS::TripleO::Services::Ipsec 31 | - OS::TripleO::Services::Iscsid 32 | - OS::TripleO::Services::Kernel 33 | - OS::TripleO::Services::LoginDefs 34 | - OS::TripleO::Services::MySQLClient 35 | - OS::TripleO::Services::NeutronBgpVpnBagpipe 36 | - OS::TripleO::Services::NeutronLinuxbridgeAgent 37 | - OS::TripleO::Services::NeutronVppAgent 38 | - OS::TripleO::Services::NovaCompute 39 | - OS::TripleO::Services::NovaLibvirt 40 | - OS::TripleO::Services::NovaMigrationTarget 41 | - OS::TripleO::Services::Ntp 42 | - OS::TripleO::Services::ContainersLogrotateCrond 43 | - OS::TripleO::Services::OpenDaylightOvs 44 | - OS::TripleO::Services::Rhsm 45 | - OS::TripleO::Services::RsyslogSidecar 46 | - OS::TripleO::Services::Securetty 47 | - OS::TripleO::Services::SensuClient 48 | - OS::TripleO::Services::SkydiveAgent 49 | - OS::TripleO::Services::Snmp 50 | - OS::TripleO::Services::Sshd 51 | - OS::TripleO::Services::Timezone 52 | - OS::TripleO::Services::TripleoFirewall 53 | - OS::TripleO::Services::TripleoPackages 54 | - OS::TripleO::Services::Tuned 55 | - OS::TripleO::Services::Vpp 56 | - OS::TripleO::Services::OVNController 57 | - OS::TripleO::Services::OVNMetadataAgent 58 | - OS::TripleO::Services::Ptp 59 | -------------------------------------------------------------------------------- /networking/overcloud/roles/Controller1.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Role: Controller1 # 3 | ############################################################################### 4 | - name: Controller1 5 | description: | 6 | Controller role that has all the controler services loaded and handles 7 | Database, Messaging and Network functions. 8 | CountDefault: 1 9 | tags: 10 | - primary 11 | - controller 12 | networks: 13 | - External1 14 | - InternalApi1 15 | - Storage1 16 | - StorageMgmt1 17 | - Tenant1 18 | # For systems with both IPv4 and IPv6, you may specify a gateway network for 19 | # each, such as ['ControlPlane', 'External'] 20 | default_route_networks: ['External1'] 21 | HostnameFormatDefault: '%stackname%-controller1-%index%' 22 | uses_deprecated_params: False 23 | ServicesDefault: 24 | - OS::TripleO::Services::Aide 25 | - OS::TripleO::Services::AodhApi 26 | - OS::TripleO::Services::AodhEvaluator 27 | - OS::TripleO::Services::AodhListener 28 | - OS::TripleO::Services::AodhNotifier 29 | - OS::TripleO::Services::AuditD 30 | - OS::TripleO::Services::CACerts 31 | - OS::TripleO::Services::CephExternal 32 | - OS::TripleO::Services::CephMds 33 | - OS::TripleO::Services::CephMgr 34 | - OS::TripleO::Services::CephMon 35 | - OS::TripleO::Services::CephRbdMirror 36 | - OS::TripleO::Services::CephRgw 37 | - OS::TripleO::Services::CertmongerUser 38 | - OS::TripleO::Services::CinderApi 39 | - OS::TripleO::Services::CinderBackendDellPs 40 | - OS::TripleO::Services::CinderBackendDellSc 41 | - OS::TripleO::Services::CinderBackendDellEMCUnity 42 | - OS::TripleO::Services::CinderBackendDellEMCVMAXISCSI 43 | - OS::TripleO::Services::CinderBackendDellEMCVNX 44 | - OS::TripleO::Services::CinderBackendDellEMCXTREMIOISCSI 45 | - OS::TripleO::Services::CinderBackendNetApp 46 | - OS::TripleO::Services::CinderBackendScaleIO 47 | - OS::TripleO::Services::CinderBackendVRTSHyperScale 48 | - OS::TripleO::Services::CinderBackup 49 | - OS::TripleO::Services::CinderHPELeftHandISCSI 50 | - OS::TripleO::Services::CinderScheduler 51 | - OS::TripleO::Services::CinderVolume 52 | - OS::TripleO::Services::Clustercheck 53 | - OS::TripleO::Services::Collectd 54 | - OS::TripleO::Services::Congress 55 | - OS::TripleO::Services::Docker 56 | - OS::TripleO::Services::Ec2Api 57 | - OS::TripleO::Services::Etcd 58 | - OS::TripleO::Services::ExternalSwiftProxy 59 | - OS::TripleO::Services::Fluentd 60 | - OS::TripleO::Services::GlanceApi 61 | - OS::TripleO::Services::GlanceRegistry 62 | - OS::TripleO::Services::HAproxy 63 | - OS::TripleO::Services::Ipsec 64 | - OS::TripleO::Services::IronicApi 65 | - OS::TripleO::Services::IronicConductor 66 | - OS::TripleO::Services::IronicPxe 67 | - OS::TripleO::Services::Iscsid 68 | - OS::TripleO::Services::Keepalived 69 | - OS::TripleO::Services::Kernel 70 | - OS::TripleO::Services::Keystone 71 | - OS::TripleO::Services::LoginDefs 72 | - OS::TripleO::Services::Memcached 73 | - OS::TripleO::Services::MongoDb 74 | - OS::TripleO::Services::MySQL 75 | - OS::TripleO::Services::MySQLClient 76 | - OS::TripleO::Services::NeutronApi 77 | - OS::TripleO::Services::NeutronBgpVpnApi 78 | - OS::TripleO::Services::NeutronSfcApi 79 | - OS::TripleO::Services::NeutronCorePlugin 80 | - OS::TripleO::Services::NeutronDhcpAgent 81 | - OS::TripleO::Services::NeutronL2gwAgent 82 | - OS::TripleO::Services::NeutronL2gwApi 83 | - OS::TripleO::Services::NeutronL3Agent 84 | - OS::TripleO::Services::NeutronLbaasv2Agent 85 | - OS::TripleO::Services::NeutronLbaasv2Api 86 | - OS::TripleO::Services::NeutronLinuxbridgeAgent 87 | - OS::TripleO::Services::NeutronMetadataAgent 88 | - OS::TripleO::Services::NeutronML2FujitsuCfab 89 | - OS::TripleO::Services::NeutronML2FujitsuFossw 90 | - OS::TripleO::Services::NeutronOvsAgent 91 | - OS::TripleO::Services::NeutronVppAgent 92 | - OS::TripleO::Services::NovaApi 93 | - OS::TripleO::Services::NovaConductor 94 | - OS::TripleO::Services::NovaConsoleauth 95 | - OS::TripleO::Services::NovaIronic 96 | - OS::TripleO::Services::NovaMetadata 97 | - OS::TripleO::Services::NovaPlacement 98 | - OS::TripleO::Services::NovaScheduler 99 | - OS::TripleO::Services::NovaVncProxy 100 | - OS::TripleO::Services::Ntp 101 | - OS::TripleO::Services::ContainersLogrotateCrond 102 | - OS::TripleO::Services::OVNDBs 103 | - OS::TripleO::Services::OVNController 104 | - OS::TripleO::Services::Pacemaker 105 | - OS::TripleO::Services::RabbitMQ 106 | - OS::TripleO::Services::Redis 107 | - OS::TripleO::Services::Rhsm 108 | - OS::TripleO::Services::RsyslogSidecar 109 | - OS::TripleO::Services::SaharaApi 110 | - OS::TripleO::Services::SaharaEngine 111 | - OS::TripleO::Services::Securetty 112 | - OS::TripleO::Services::SensuClient 113 | - OS::TripleO::Services::Snmp 114 | - OS::TripleO::Services::Sshd 115 | - OS::TripleO::Services::Timezone 116 | - OS::TripleO::Services::TripleoFirewall 117 | - OS::TripleO::Services::TripleoPackages 118 | - OS::TripleO::Services::Tuned 119 | - OS::TripleO::Services::Vpp 120 | - OS::TripleO::Services::Ptp 121 | -------------------------------------------------------------------------------- /networking/overcloud/scripts/create_flavors.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source /home/stack/stackrc 4 | 5 | openstack flavor create \ 6 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 7 | --property capabilities:boot_option='local' \ 8 | --property capabilities:profile='control1' \ 9 | --property resources:CUSTOM_BAREMETAL='1' \ 10 | --property resources:DISK_GB='0' \ 11 | --property resources:MEMORY_MB='0' \ 12 | --property resources:VCPU='0' \ 13 | control1 14 | 15 | openstack flavor create \ 16 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 17 | --property capabilities:boot_option='local' \ 18 | --property capabilities:profile='compute0' \ 19 | --property resources:CUSTOM_BAREMETAL='1' \ 20 | --property resources:DISK_GB='0' \ 21 | --property resources:MEMORY_MB='0' \ 22 | --property resources:VCPU='0' \ 23 | compute0 24 | 25 | openstack flavor create \ 26 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 27 | --property capabilities:boot_option='local' \ 28 | --property capabilities:profile='compute1' \ 29 | --property resources:CUSTOM_BAREMETAL='1' \ 30 | --property resources:DISK_GB='0' \ 31 | --property resources:MEMORY_MB='0' \ 32 | --property resources:VCPU='0' \ 33 | compute1 34 | 35 | openstack flavor create \ 36 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 37 | --property capabilities:boot_option='local' \ 38 | --property capabilities:profile='compute2' \ 39 | --property resources:CUSTOM_BAREMETAL='1' \ 40 | --property resources:DISK_GB='0' \ 41 | --property resources:MEMORY_MB='0' \ 42 | --property resources:VCPU='0' \ 43 | compute2 44 | 45 | openstack flavor create \ 46 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 47 | --property capabilities:boot_option='local' \ 48 | --property capabilities:profile='compute3' \ 49 | --property resources:CUSTOM_BAREMETAL='1' \ 50 | --property resources:DISK_GB='0' \ 51 | --property resources:MEMORY_MB='0' \ 52 | --property resources:VCPU='0' \ 53 | compute3 54 | 55 | openstack flavor create \ 56 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 57 | --property capabilities:boot_option='local' \ 58 | --property capabilities:profile='ceph0' \ 59 | --property resources:CUSTOM_BAREMETAL='1' \ 60 | --property resources:DISK_GB='0' \ 61 | --property resources:MEMORY_MB='0' \ 62 | --property resources:VCPU='0' \ 63 | ceph0 64 | 65 | 66 | openstack flavor create \ 67 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 68 | --property capabilities:boot_option='local' \ 69 | --property capabilities:profile='ceph1' \ 70 | --property resources:CUSTOM_BAREMETAL='1' \ 71 | --property resources:DISK_GB='0' \ 72 | --property resources:MEMORY_MB='0' \ 73 | --property resources:VCPU='0' \ 74 | ceph1 75 | 76 | openstack flavor create \ 77 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 78 | --property capabilities:boot_option='local' \ 79 | --property capabilities:profile='ceph2' \ 80 | --property resources:CUSTOM_BAREMETAL='1' \ 81 | --property resources:DISK_GB='0' \ 82 | --property resources:MEMORY_MB='0' \ 83 | --property resources:VCPU='0' \ 84 | ceph2 85 | 86 | openstack flavor create \ 87 | --disk 40 --public --ram 4096 --vcpus 1 --rxtx-factor 1.0 \ 88 | --property capabilities:boot_option='local' \ 89 | --property capabilities:profile='ceph3' \ 90 | --property resources:CUSTOM_BAREMETAL='1' \ 91 | --property resources:DISK_GB='0' \ 92 | --property resources:MEMORY_MB='0' \ 93 | --property resources:VCPU='0' \ 94 | ceph3 95 | -------------------------------------------------------------------------------- /networking/overcloud/scripts/prepare_docker_images.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source /home/stack/stackrc 4 | 5 | openstack overcloud container image prepare \ 6 | --namespace 10.12.50.1/triplequeens \ 7 | --tag current-tripleo \ 8 | --output-env-file /home/stack/environments/docker_registry.yaml \ 9 | --output-images-file /home/stack/templates/overcloud_containers.yaml 10 | -------------------------------------------------------------------------------- /networking/overcloud/scripts/set_bm_port_physnet.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source /home/stack/stackrc 4 | 5 | openstack baremetal port set --physical-network ctlplane1 $(openstack baremetal port list --node overcloud-controller-0 -f value -c UUID) 6 | openstack baremetal port set --physical-network ctlplane1 $(openstack baremetal port list --node overcloud-controller-1 -f value -c UUID) 7 | openstack baremetal port set --physical-network ctlplane1 $(openstack baremetal port list --node overcloud-controller-2 -f value -c UUID) 8 | 9 | openstack baremetal port set --physical-network ctlplane1 $(openstack baremetal port list --node overcloud-compute1-0 -f value -c UUID) 10 | openstack baremetal port set --physical-network ctlplane2 $(openstack baremetal port list --node overcloud-compute2-0 -f value -c UUID) 11 | openstack baremetal port set --physical-network ctlplane3 $(openstack baremetal port list --node overcloud-compute3-0 -f value -c UUID) 12 | 13 | openstack baremetal port set --physical-network ctlplane1 $(openstack baremetal port list --node overcloud-ceph1-0 -f value -c UUID) 14 | openstack baremetal port set --physical-network ctlplane2 $(openstack baremetal port list --node overcloud-ceph2-0 -f value -c UUID) 15 | openstack baremetal port set --physical-network ctlplane3 $(openstack baremetal port list --node overcloud-ceph3-0 -f value -c UUID) 16 | -------------------------------------------------------------------------------- /networking/overcloud/scripts/set_capabilities.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source /home/stack/stackrc 4 | 5 | openstack baremetal node set --property capabilities='profile:control1,node:controller1-0,boot_option:local' overcloud-controller-0 6 | openstack baremetal node set --property capabilities='profile:control1,node:controller1-1,boot_option:local' overcloud-controller-1 7 | openstack baremetal node set --property capabilities='profile:control1,node:controller1-2,boot_option:local' overcloud-controller-2 8 | 9 | openstack baremetal node set --property capabilities='profile:compute1,boot_option:local' overcloud-compute1-0 10 | openstack baremetal node set --property capabilities='profile:compute2,boot_option:local' overcloud-compute2-0 11 | openstack baremetal node set --property capabilities='profile:compute3,boot_option:local' overcloud-compute3-0 12 | 13 | openstack baremetal node set --property capabilities='profile:ceph1,boot_option:local' overcloud-ceph1-0 14 | openstack baremetal node set --property capabilities='profile:ceph2,boot_option:local' overcloud-ceph2-0 15 | openstack baremetal node set --property capabilities='profile:ceph3,boot_option:local' overcloud-ceph3-0 -------------------------------------------------------------------------------- /networking/overcloud/templates/ceph/ceph.yaml: -------------------------------------------------------------------------------- 1 | resource_registry: 2 | OS::TripleO::NodeUserData: /home/stack/templates/ceph/first-boot.yaml 3 | 4 | parameter_defaults: 5 | CephAnsiblePlaybook: /usr/share/ceph-ansible/site-docker.yml.sample 6 | CephPoolDefaultSize: 1 7 | CephPoolDefaultPgNum: 32 8 | CephConfigOverrides: 9 | mon_max_pg_per_osd: 3072 10 | CephAnsibleExtraConfig: 11 | public_network: 12 | '172.20.3.0/26,172.20.3.64/26,172.20.3.128/26,172.20.3.192/26' 13 | cluster_network: 14 | '172.20.4.0/26,172.20.4.64/26,172.20.4.128/26,172.20.4.192/26' 15 | # HCI tuning 16 | osd_recovery_op_priority: 3 17 | osd_recovery_max_active: 3 18 | osd_max_backfills: 1 19 | # reserve 3G RAM + 1 CPU per OSD 20 | ceph_osd_docker_memory_limit: 3g 21 | ceph_osd_docker_cpu_limit: 1 22 | osd_scenario: collocated 23 | osd_objectstore: filestore 24 | CephAnsiblePlaybookVerbosity: 3 25 | CephAnsibleEnvironmentVariables: 26 | ANSIBLE_SSH_RETRIES: '6' 27 | CephAnsibleDisksConfig: 28 | devices: 29 | - /dev/vdb 30 | - /dev/vdc 31 | - /dev/vdd 32 | - /dev/vde 33 | 34 | 35 | -------------------------------------------------------------------------------- /networking/overcloud/templates/ceph/first-boot.yaml: -------------------------------------------------------------------------------- 1 | heat_template_version: 2014-10-16 2 | 3 | description: > 4 | Create GPT formatted virtual block devices for development 5 | 6 | resources: 7 | userdata: 8 | type: OS::Heat::MultipartMime 9 | properties: 10 | parts: 11 | - config: {get_resource: init_disk} 12 | 13 | init_disk: 14 | type: OS::Heat::SoftwareConfig 15 | properties: 16 | config: {get_file: init_disk.sh} 17 | 18 | outputs: 19 | OS::stack_id: 20 | value: {get_resource: userdata} -------------------------------------------------------------------------------- /networking/overcloud/templates/ceph/init_disk.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | echo "Creating four 20G block devices named /dev/loop3, /dev/loop4, etc." 3 | command -v losetup >/dev/null 2>&1 || { yum -y install util-linux; } 4 | for i in $(seq 3 6); do 5 | BLOB=ceph-osd-$i.img 6 | DEV=loop$i 7 | echo "Creating /dev/$DEV on /var/lib/$BLOB" 8 | if [[ ! -e /dev/${DEV} ]]; then 9 | dd if=/dev/zero of=/var/lib/${BLOB} bs=1 count=0 seek=20G 10 | losetup /dev/${DEV} /var/lib/${BLOB} 11 | #sgdisk -Z /dev/${DEV} 12 | sgdisk -g /dev/${DEV} 13 | else 14 | echo "ERROR: /dev/${DEV} already exists, not using it with losetup" 15 | exit 1 16 | fi 17 | done 18 | partprobe 19 | echo "Output of lsblk" 20 | lsblk 21 | -------------------------------------------------------------------------------- /networking/overcloud/templates/network_data.yaml: -------------------------------------------------------------------------------- 1 | # List of networks, used for j2 templating of enabled networks 2 | # 3 | # Supported values: 4 | # 5 | # name: Name of the network (mandatory) 6 | # name_lower: lowercase version of name used for filenames 7 | # (optional, defaults to name.lower()) 8 | # enabled: Is the network enabled (optional, defaults to true) 9 | # NOTE: False will use noop.yaml for unused legacy networks to support upgrades. 10 | # vlan: vlan for the network (optional) 11 | # vip: Enable creation of a virtual IP on this network 12 | # ip_subnet: IP/CIDR, e.g. '192.168.24.0/24' or '2001:db8:fd00:1000::/64' 13 | # (optional, may use parameter defaults instead) 14 | # allocation_pools: IP range list e.g. [{'start':'10.0.0.4', 'end':'10.0.0.250'}] 15 | # gateway_ip: gateway for the network (optional, may use parameter defaults) 16 | # ipv6_subnet: Optional, sets default IPv6 subnet if IPv4 is already defined. 17 | # ipv6_allocation_pools: Set default IPv6 allocation pools if IPv4 allocation pools 18 | # are already defined. 19 | # ipv6_gateway: Set an IPv6 gateway if IPv4 gateway already defined. 20 | # ipv6: If ip_subnet not defined, this specifies that the network is IPv6-only. 21 | # NOTE: IP-related values set parameter defaults in templates, may be overridden, 22 | # either by operators, or e.g in environments/network-isolation-v6.yaml where we 23 | # set some default IPv6 addresses. 24 | # compat_name: for existing stack you may need to override the default 25 | # transformation for the resource's name. 26 | # 27 | # Example: 28 | # - name Example 29 | # vip: false 30 | # ip_subnet: '10.0.2.0/24' 31 | # allocation_pools: [{'start': '10.0.2.4', 'end': '10.0.2.250'}] 32 | # gateway_ip: '10.0.2.254' 33 | # 34 | # To support backward compatility, two versions of the network definitions will 35 | # be created, network/.yaml and network/_v6.yaml. Only 36 | # one of these files may be used in the deployment at a time, since the 37 | # parameters used for configuration are the same in both files. In the 38 | # future, this behavior may be changed to create only one file for custom 39 | # networks. You may specify IPv6 addresses for ip_subnet, allocation_pools, 40 | # and gateway_ip if no IPv4 addresses are used for a custom network, or set 41 | # ipv6: true, and the network/.yaml file will be configured as IPv6. 42 | # 43 | # For configuring both IPv4 and IPv6 on the same interface, use two separate 44 | # networks, and then assign both IPs to the same interface in a custom NIC 45 | # configuration templates. 46 | # 47 | # The ordering of the networks below will determine the order in which NICs 48 | # are assigned in the network/config/multiple-nics templates, beginning with 49 | # NIC2, Control Plane is always NIC1. 50 | 51 | # 52 | # Storage Networks 53 | # 54 | - name: Storage0 55 | vip: false 56 | vlan: 630 57 | name_lower: storage0 58 | ip_subnet: '172.20.3.0/26' 59 | allocation_pools: [{'start': '172.20.3.10', 'end': '172.20.3.29'}] 60 | gateway_ip: '172.20.3.62' 61 | ipv6_subnet: 'fd00:fd00:fd00:3000::/64' 62 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3000::10', 'end': 'fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe'}] 63 | - name: Storage1 64 | vip: true 65 | vlan: 631 66 | name_lower: storage1 67 | ip_subnet: '172.20.3.64/26' 68 | allocation_pools: [{'start': '172.20.3.80', 'end': '172.20.3.99'}] 69 | gateway_ip: '172.20.3.126' 70 | ipv6_subnet: 'fd00:fd00:fd00:3001::/64' 71 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3001::10', 'end': 'fd00:fd00:fd00:3001:ffff:ffff:ffff:fffe'}] 72 | - name: Storage2 73 | vip: false 74 | vlan: 632 75 | name_lower: storage2 76 | ip_subnet: '172.20.3.128/26' 77 | allocation_pools: [{'start': '172.20.3.140', 'end': '172.20.3.159'}] 78 | gateway_ip: '172.20.3.190' 79 | ipv6_subnet: 'fd00:fd00:fd00:3002::/64' 80 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3002::10', 'end': 'fd00:fd00:fd00:3002:ffff:ffff:ffff:fffe'}] 81 | - name: Storage3 82 | vip: false 83 | vlan: 633 84 | name_lower: storage3 85 | ip_subnet: '172.20.3.192/26' 86 | allocation_pools: [{'start': '172.20.3.210', 'end': '172.20.3.229'}] 87 | gateway_ip: '172.20.3.254' 88 | ipv6_subnet: 'fd00:fd00:fd00:3003::/64' 89 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3003::10', 'end': 'fd00:fd00:fd00:3003:ffff:ffff:ffff:fffe'}] 90 | 91 | # 92 | # StorageMgmt Networks 93 | # 94 | - name: StorageMgmt0 95 | name_lower: storage_mgmt0 96 | vip: false 97 | vlan: 640 98 | ip_subnet: '172.20.4.0/26' 99 | allocation_pools: [{'start': '172.20.4.10', 'end': '172.20.4.29'}] 100 | gateway_ip: '172.20.4.62' 101 | ipv6_subnet: 'fd00:fd00:fd00:4000::/64' 102 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}] 103 | - name: StorageMgmt1 104 | name_lower: storage_mgmt1 105 | vip: true 106 | vlan: 641 107 | ip_subnet: '172.20.4.64/26' 108 | allocation_pools: [{'start': '172.20.4.80', 'end': '172.20.4.99'}] 109 | gateway_ip: '172.20.4.126' 110 | ipv6_subnet: 'fd00:fd00:fd00:4001::/64' 111 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4001::10', 'end': 'fd00:fd00:fd00:4001:ffff:ffff:ffff:fffe'}] 112 | - name: StorageMgmt2 113 | name_lower: storage_mgmt2 114 | vip: false 115 | vlan: 642 116 | ip_subnet: '172.20.4.128/26' 117 | allocation_pools: [{'start': '172.20.4.140', 'end': '172.20.4.159'}] 118 | gateway_ip: '172.20.4.190' 119 | ipv6_subnet: 'fd00:fd00:fd00:4002::/64' 120 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4002::10', 'end': 'fd00:fd00:fd00:4002:ffff:ffff:ffff:fffe'}] 121 | - name: StorageMgmt3 122 | name_lower: storage_mgmt3 123 | vip: false 124 | vlan: 643 125 | ip_subnet: '172.20.4.192/26' 126 | allocation_pools: [{'start': '172.20.4.210', 'end': '172.20.4.229'}] 127 | gateway_ip: '172.20.4.254' 128 | ipv6_subnet: 'fd00:fd00:fd00:4003::/64' 129 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4003::10', 'end': 'fd00:fd00:fd00:4003:ffff:ffff:ffff:fffe'}] 130 | 131 | # 132 | # InternalApi Networks 133 | # 134 | - name: InternalApi0 135 | name_lower: internal_api0 136 | vip: false 137 | vlan: 610 138 | ip_subnet: '172.20.1.0/26' 139 | allocation_pools: [{'start': '172.20.1.10', 'end': '172.20.1.29'}] 140 | gateway_ip: '172.20.1.62' 141 | ipv6_subnet: 'fd00:fd00:fd00:2000::/64' 142 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2000::10', 'end': 'fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe'}] 143 | - name: InternalApi1 144 | name_lower: internal_api1 145 | vip: true 146 | vlan: 611 147 | ip_subnet: '172.20.1.64/26' 148 | allocation_pools: [{'start': '172.20.1.80', 'end': '172.20.1.99'}] 149 | gateway_ip: '172.20.1.126' 150 | ipv6_subnet: 'fd00:fd00:fd00:2001::/64' 151 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2001::10', 'end': 'fd00:fd00:fd00:2001:ffff:ffff:ffff:fffe'}] 152 | - name: InternalApi2 153 | name_lower: internal_api2 154 | vip: false 155 | vlan: 612 156 | ip_subnet: '172.20.1.128/26' 157 | allocation_pools: [{'start': '172.20.1.140', 'end': '172.20.1.159'}] 158 | gateway_ip: '172.20.1.190' 159 | ipv6_subnet: 'fd00:fd00:fd00:2002::/64' 160 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2002::10', 'end': 'fd00:fd00:fd00:2002:ffff:ffff:ffff:fffe'}] 161 | - name: InternalApi3 162 | name_lower: internal_api3 163 | vip: false 164 | vlan: 613 165 | ip_subnet: '172.20.1.192/26' 166 | allocation_pools: [{'start': '172.20.1.210', 'end': '172.20.1.229'}] 167 | gateway_ip: '172.20.1.254' 168 | ipv6_subnet: 'fd00:fd00:fd00:2003::/64' 169 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2003::10', 'end': 'fd00:fd00:fd00:2003:ffff:ffff:ffff:fffe'}] 170 | 171 | # 172 | # Tenant Networks 173 | # 174 | - name: Tenant0 175 | vip: false # Tenant network does not use VIPs 176 | name_lower: tenant0 177 | vlan: 650 178 | ip_subnet: '172.20.5.0/26' 179 | allocation_pools: [{'start': '172.20.5.10', 'end': '172.20.5.29'}] 180 | gateway_ip: '172.20.5.62' 181 | # Note that tenant tunneling is only compatible with IPv4 addressing at this time. 182 | ipv6_subnet: 'fd00:fd00:fd00:5000::/64' 183 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5000::10', 'end': 'fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe'}] 184 | - name: Tenant1 185 | vip: false # Tenant network does not use VIPs 186 | name_lower: tenant1 187 | vlan: 651 188 | ip_subnet: '172.20.5.64/26' 189 | allocation_pools: [{'start': '172.20.5.80', 'end': '172.20.5.99'}] 190 | gateway_ip: '172.20.5.126' 191 | # Note that tenant tunneling is only compatible with IPv4 addressing at this time. 192 | ipv6_subnet: 'fd00:fd00:fd00:5001::/64' 193 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5001::10', 'end': 'fd00:fd00:fd00:5001:ffff:ffff:ffff:fffe'}] 194 | - name: Tenant2 195 | vip: false # Tenant network does not use VIPs 196 | name_lower: tenant2 197 | vlan: 652 198 | ip_subnet: '172.20.5.128/26' 199 | allocation_pools: [{'start': '172.20.5.140', 'end': '172.20.5.159'}] 200 | gateway_ip: '172.20.5.190' 201 | # Note that tenant tunneling is only compatible with IPv4 addressing at this time. 202 | ipv6_subnet: 'fd00:fd00:fd00:5002::/64' 203 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5002::10', 'end': 'fd00:fd00:fd00:5002:ffff:ffff:ffff:fffe'}] 204 | - name: Tenant3 205 | vip: false # Tenant network does not use VIPs 206 | name_lower: tenant3 207 | vlan: 653 208 | ip_subnet: '172.20.5.192/26' 209 | allocation_pools: [{'start': '172.20.5.210', 'end': '172.20.5.229'}] 210 | gateway_ip: '172.20.5.254' 211 | # Note that tenant tunneling is only compatible with IPv4 addressing at this time. 212 | ipv6_subnet: 'fd00:fd00:fd00:5003::/64' 213 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5003::10', 'end': 'fd00:fd00:fd00:5003:ffff:ffff:ffff:fffe'}] 214 | 215 | # 216 | # External Networks 217 | # 218 | - name: External1 219 | vip: true 220 | name_lower: external1 221 | vlan: 621 222 | ip_subnet: '172.20.2.64/26' 223 | allocation_pools: [{'start': '172.20.2.80', 'end': '172.20.2.89'}] 224 | gateway_ip: '172.20.2.126' 225 | ipv6_subnet: '2001:db8:fd00:1001::/64' 226 | ipv6_allocation_pools: [{'start': '2001:db8:fd00:1001::10', 'end': '2001:db8:fd00:1001:ffff:ffff:ffff:fffe'}] 227 | gateway_ipv6: '2001:db8:fd00:1001::1' 228 | 229 | # 230 | # Management !! Not used !! 231 | # 232 | - name: Management 233 | # Management network is enabled by default for backwards-compatibility, but 234 | # is not included in any roles by default. Add to role definitions to use. 235 | enabled: true 236 | vip: false # Management network does not use VIPs 237 | name_lower: management 238 | vlan: 60 239 | ip_subnet: '10.0.1.0/24' 240 | allocation_pools: [{'start': '10.0.1.4', 'end': '10.0.1.250'}] 241 | ipv6_subnet: 'fd00:fd00:fd00:6000::/64' 242 | ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:6000::10', 'end': 'fd00:fd00:fd00:6000:ffff:ffff:ffff:fffe'}] 243 | -------------------------------------------------------------------------------- /networking/overcloud/templates/nic-config/ceph0.yaml: -------------------------------------------------------------------------------- 1 | heat_template_version: queens 2 | description: > 3 | Software Config to drive os-net-config to configure VLANs for the CephStorage0 role. 4 | 5 | parameters: 6 | # --------------------------------------------------------------------------- 7 | # Supernets 8 | # --------------------------------------------------------------------------- 9 | ExternalSupernet: 10 | default: '' 11 | type: string 12 | InternalApiSupernet: 13 | description: InternalApiSupernet 14 | type: string 15 | StorageMgmtSupernet: 16 | description: StorageMgmtSupernet 17 | type: string 18 | StorageSupernet: 19 | description: StorageSupernet 20 | type: string 21 | TenantSupernet: 22 | description: TenantSupernet 23 | type: string 24 | CtlplaneSupernet: 25 | description: CtlplaneSupernet 26 | type: string 27 | 28 | # --------------------------------------------------------------------------- 29 | # Default Routes 30 | # --------------------------------------------------------------------------- 31 | ControlPlane0DefaultRoute: # Override this via parameter_defaults 32 | description: The default route of the control plane network. 33 | type: string 34 | ControlPlane1DefaultRoute: # Override this via parameter_defaults 35 | description: The default route of the control plane network. 36 | type: string 37 | ControlPlane2DefaultRoute: # Override this via parameter_defaults 38 | description: The default route of the control plane network. 39 | type: string 40 | ControlPlane3DefaultRoute: # Override this via parameter_defaults 41 | description: The default route of the control plane network. 42 | type: string 43 | 44 | Tenant0InterfaceDefaultRoute: 45 | description: TenantInterfaceDefaultRoute 46 | type: string 47 | Tenant1InterfaceDefaultRoute: 48 | description: TenantInterfaceDefaultRoute 49 | type: string 50 | Tenant2InterfaceDefaultRoute: 51 | description: TenantInterfaceDefaultRoute 52 | type: string 53 | Tenant3InterfaceDefaultRoute: 54 | description: TenantInterfaceDefaultRoute 55 | type: string 56 | 57 | InternalApi0InterfaceDefaultRoute: 58 | description: InternalApiInterfaceDefaultRoute 59 | type: string 60 | InternalApi1InterfaceDefaultRoute: 61 | description: InternalApiInterfaceDefaultRoute 62 | type: string 63 | InternalApi2InterfaceDefaultRoute: 64 | description: InternalApiInterfaceDefaultRoute 65 | type: string 66 | InternalApi3InterfaceDefaultRoute: 67 | description: InternalApiInterfaceDefaultRoute 68 | type: string 69 | 70 | StorageMgmt0InterfaceDefaultRoute: 71 | description: StorageMgmtInterfaceDefaultRoute 72 | type: string 73 | StorageMgmt1InterfaceDefaultRoute: 74 | description: StorageMgmtInterfaceDefaultRoute 75 | type: string 76 | StorageMgmt2InterfaceDefaultRoute: 77 | description: StorageMgmtInterfaceDefaultRoute 78 | type: string 79 | StorageMgmt3InterfaceDefaultRoute: 80 | description: StorageMgmtInterfaceDefaultRoute 81 | type: string 82 | 83 | Storage0InterfaceDefaultRoute: 84 | description: StorageInterfaceDefaultRoute 85 | type: string 86 | Storage1InterfaceDefaultRoute: 87 | description: StorageInterfaceDefaultRoute 88 | type: string 89 | Storage2InterfaceDefaultRoute: 90 | description: StorageInterfaceDefaultRoute 91 | type: string 92 | Storage3InterfaceDefaultRoute: 93 | description: StorageInterfaceDefaultRoute 94 | type: string 95 | 96 | # External network is not routed, only one entry. 97 | External1InterfaceDefaultRoute: 98 | description: default route for the external network 99 | type: string 100 | 101 | # --------------------------------------------------------------------------- 102 | # IP subnets 103 | # --------------------------------------------------------------------------- 104 | Storage0IpSubnet: 105 | default: '' 106 | description: IP address/subnet on the storage network 107 | type: string 108 | Storage1IpSubnet: 109 | default: '' 110 | description: IP address/subnet on the storage network 111 | type: string 112 | Storage2IpSubnet: 113 | default: '' 114 | description: IP address/subnet on the storage network 115 | type: string 116 | Storage3IpSubnet: 117 | default: '' 118 | description: IP address/subnet on the storage network 119 | type: string 120 | 121 | StorageMgmt0IpSubnet: 122 | default: '' 123 | description: IP address/subnet on the storage_mgmt network 124 | type: string 125 | StorageMgmt1IpSubnet: 126 | default: '' 127 | description: IP address/subnet on the storage_mgmt network 128 | type: string 129 | StorageMgmt2IpSubnet: 130 | default: '' 131 | description: IP address/subnet on the storage_mgmt network 132 | type: string 133 | StorageMgmt3IpSubnet: 134 | default: '' 135 | description: IP address/subnet on the storage_mgmt network 136 | type: string 137 | 138 | InternalApi0IpSubnet: 139 | default: '' 140 | description: IP address/subnet on the internal_api network 141 | type: string 142 | InternalApi1IpSubnet: 143 | default: '' 144 | description: IP address/subnet on the internal_api network 145 | type: string 146 | InternalApi2IpSubnet: 147 | default: '' 148 | description: IP address/subnet on the internal_api network 149 | type: string 150 | InternalApi3IpSubnet: 151 | default: '' 152 | description: IP address/subnet on the internal_api network 153 | type: string 154 | 155 | Tenant0IpSubnet: 156 | default: '' 157 | description: IP address/subnet on the tenant network 158 | type: string 159 | Tenant1IpSubnet: 160 | default: '' 161 | description: IP address/subnet on the tenant network 162 | type: string 163 | Tenant2IpSubnet: 164 | default: '' 165 | description: IP address/subnet on the tenant network 166 | type: string 167 | Tenant3IpSubnet: 168 | default: '' 169 | description: IP address/subnet on the tenant network 170 | type: string 171 | 172 | External1IpSubnet: 173 | default: '' 174 | description: IP address/subnet on the external network 175 | type: string 176 | ManagementIpSubnet: 177 | default: '' 178 | description: IP address/subnet on the management network 179 | type: string 180 | 181 | # --------------------------------------------------------------------------- 182 | # VLAN IDs 183 | # --------------------------------------------------------------------------- 184 | Storage0NetworkVlanID: 185 | default: 630 186 | description: Vlan ID for the storage network traffic. 187 | type: number 188 | Storage1NetworkVlanID: 189 | default: 631 190 | description: Vlan ID for the storage1 network traffic. 191 | type: number 192 | Storage2NetworkVlanID: 193 | default: 632 194 | description: Vlan ID for the storage network traffic. 195 | type: number 196 | Storage3NetworkVlanID: 197 | default: 633 198 | description: Vlan ID for the storage1 network traffic. 199 | type: number 200 | 201 | StorageMgmt0NetworkVlanID: 202 | default: 640 203 | description: Vlan ID for the storage_mgmt network traffic. 204 | type: number 205 | StorageMgmt1NetworkVlanID: 206 | default: 641 207 | description: Vlan ID for the storage_mgmt1 network traffic. 208 | type: number 209 | StorageMgmt2NetworkVlanID: 210 | default: 642 211 | description: Vlan ID for the storage_mgmt network traffic. 212 | type: number 213 | StorageMgmt3NetworkVlanID: 214 | default: 643 215 | description: Vlan ID for the storage_mgmt1 network traffic. 216 | type: number 217 | 218 | InternalApi0NetworkVlanID: 219 | default: 610 220 | description: Vlan ID for the internal_api network traffic. 221 | type: number 222 | InternalApi1NetworkVlanID: 223 | default: 611 224 | description: Vlan ID for the internal_api1 network traffic. 225 | type: number 226 | InternalApi2NetworkVlanID: 227 | default: 612 228 | description: Vlan ID for the internal_api network traffic. 229 | type: number 230 | InternalApi3NetworkVlanID: 231 | default: 613 232 | description: Vlan ID for the internal_api1 network traffic. 233 | type: number 234 | 235 | Tenant0NetworkVlanID: 236 | default: 650 237 | description: Vlan ID for the tenant network traffic. 238 | type: number 239 | Tenant1NetworkVlanID: 240 | default: 651 241 | description: Vlan ID for the tenant1 network traffic. 242 | type: number 243 | Tenant2NetworkVlanID: 244 | default: 652 245 | description: Vlan ID for the tenant network traffic. 246 | type: number 247 | Tenant3NetworkVlanID: 248 | default: 653 249 | description: Vlan ID for the tenant1 network traffic. 250 | type: number 251 | 252 | External1NetworkVlanID: 253 | default: 621 254 | description: Vlan ID for the external network traffic. 255 | type: number 256 | 257 | ManagementNetworkVlanID: 258 | default: 60 259 | description: Vlan ID for the management network traffic. 260 | type: number 261 | 262 | 263 | # --------------------------------------------------------------------------- 264 | # Subnet CIDR's - prefixes 265 | # --------------------------------------------------------------------------- 266 | ControlPlane0SubnetCidr: # Override this via parameter_defaults 267 | default: '26' 268 | description: The subnet CIDR of the control plane network. 269 | type: string 270 | ControlPlane1SubnetCidr: # Override this via parameter_defaults 271 | default: '26' 272 | description: The subnet CIDR of the control plane network. 273 | type: string 274 | ControlPlane2SubnetCidr: # Override this via parameter_defaults 275 | default: '26' 276 | description: The subnet CIDR of the control plane network. 277 | type: string 278 | ControlPlane3SubnetCidr: # Override this via parameter_defaults 279 | default: '26' 280 | description: The subnet CIDR of the control plane network. 281 | type: string 282 | 283 | # --------------------------------------------------------------------------- 284 | # EC2 metadata server IPs 285 | # --------------------------------------------------------------------------- 286 | ControlPlane0EC2MetadataIp: # Override this via parameter_defaults 287 | description: The IP address of the EC2 metadata server. 288 | type: string 289 | ControlPlane1EC2MetadataIp: # Override this via parameter_defaults 290 | description: The IP address of the EC2 metadata server. 291 | type: string 292 | ControlPlane2EC2MetadataIp: # Override this via parameter_defaults 293 | description: The IP address of the EC2 metadata server. 294 | type: string 295 | ControlPlane3EC2MetadataIp: # Override this via parameter_defaults 296 | description: The IP address of the EC2 metadata server. 297 | type: string 298 | 299 | # --------------------------------------------------------------------------- 300 | ControlPlaneIp: 301 | default: '' 302 | description: IP address/subnet on the ctlplane network 303 | type: string 304 | DnsServers: # Override this via parameter_defaults 305 | default: [] 306 | description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf. 307 | type: comma_delimited_list 308 | # --------------------------------------------------------------------------- 309 | resources: 310 | OsNetConfigImpl: 311 | type: OS::Heat::SoftwareConfig 312 | properties: 313 | group: script 314 | config: 315 | str_replace: 316 | template: 317 | get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh 318 | params: 319 | $network_config: 320 | network_config: 321 | # --------------------------------------------------------------------------- 322 | # ctlplane interface 323 | # --------------------------------------------------------------------------- 324 | - type: interface 325 | name: nic1 326 | use_dhcp: false 327 | dns_servers: 328 | get_param: DnsServers 329 | addresses: 330 | - ip_netmask: 331 | list_join: 332 | - / 333 | - - get_param: ControlPlaneIp 334 | - get_param: ControlPlane0SubnetCidr 335 | routes: 336 | - ip_netmask: 169.254.169.254/32 337 | next_hop: 338 | get_param: ControlPlane0EC2MetadataIp 339 | - default: true 340 | next_hop: 341 | get_param: ControlPlane0DefaultRoute 342 | # --------------------------------------------------------------------------- 343 | # VLAN trunk OVS bridge - Storage, StorageMgmt 344 | # --------------------------------------------------------------------------- 345 | - type: ovs_bridge 346 | name: br-ex 347 | use_dhcp: false 348 | members: 349 | - type: interface 350 | name: nic2 351 | # force the MAC address of the bridge to this interface 352 | primary: true 353 | - type: vlan 354 | vlan_id: 355 | get_param: Storage0NetworkVlanID 356 | addresses: 357 | - ip_netmask: 358 | get_param: Storage0IpSubnet 359 | routes: 360 | - ip_netmask: 361 | get_param: StorageSupernet 362 | next_hop: 363 | get_param: Storage0InterfaceDefaultRoute 364 | - type: vlan 365 | vlan_id: 366 | get_param: StorageMgmt0NetworkVlanID 367 | addresses: 368 | - ip_netmask: 369 | get_param: StorageMgmt0IpSubnet 370 | routes: 371 | - ip_netmask: 372 | get_param: StorageMgmtSupernet 373 | next_hop: 374 | get_param: StorageMgmt0InterfaceDefaultRoute 375 | # --------------------------------------------------------------------------- 376 | outputs: 377 | OS::stack_id: 378 | description: The OsNetConfigImpl resource. 379 | value: 380 | get_resource: OsNetConfigImpl -------------------------------------------------------------------------------- /networking/overcloud/templates/nic-config/ceph1.yaml: -------------------------------------------------------------------------------- 1 | heat_template_version: queens 2 | description: > 3 | Software Config to drive os-net-config to configure VLANs for the CephStorage1 role. 4 | 5 | parameters: 6 | # --------------------------------------------------------------------------- 7 | # Supernets 8 | # --------------------------------------------------------------------------- 9 | ExternalSupernet: 10 | default: '' 11 | type: string 12 | InternalApiSupernet: 13 | description: InternalApiSupernet 14 | type: string 15 | StorageMgmtSupernet: 16 | description: StorageMgmtSupernet 17 | type: string 18 | StorageSupernet: 19 | description: StorageSupernet 20 | type: string 21 | TenantSupernet: 22 | description: TenantSupernet 23 | type: string 24 | CtlplaneSupernet: 25 | description: CtlplaneSupernet 26 | type: string 27 | 28 | # --------------------------------------------------------------------------- 29 | # Default Routes 30 | # --------------------------------------------------------------------------- 31 | ControlPlane0DefaultRoute: # Override this via parameter_defaults 32 | description: The default route of the control plane network. 33 | type: string 34 | ControlPlane1DefaultRoute: # Override this via parameter_defaults 35 | description: The default route of the control plane network. 36 | type: string 37 | ControlPlane2DefaultRoute: # Override this via parameter_defaults 38 | description: The default route of the control plane network. 39 | type: string 40 | ControlPlane3DefaultRoute: # Override this via parameter_defaults 41 | description: The default route of the control plane network. 42 | type: string 43 | 44 | Tenant0InterfaceDefaultRoute: 45 | description: TenantInterfaceDefaultRoute 46 | type: string 47 | Tenant1InterfaceDefaultRoute: 48 | description: TenantInterfaceDefaultRoute 49 | type: string 50 | Tenant2InterfaceDefaultRoute: 51 | description: TenantInterfaceDefaultRoute 52 | type: string 53 | Tenant3InterfaceDefaultRoute: 54 | description: TenantInterfaceDefaultRoute 55 | type: string 56 | 57 | InternalApi0InterfaceDefaultRoute: 58 | description: InternalApiInterfaceDefaultRoute 59 | type: string 60 | InternalApi1InterfaceDefaultRoute: 61 | description: InternalApiInterfaceDefaultRoute 62 | type: string 63 | InternalApi2InterfaceDefaultRoute: 64 | description: InternalApiInterfaceDefaultRoute 65 | type: string 66 | InternalApi3InterfaceDefaultRoute: 67 | description: InternalApiInterfaceDefaultRoute 68 | type: string 69 | 70 | StorageMgmt0InterfaceDefaultRoute: 71 | description: StorageMgmtInterfaceDefaultRoute 72 | type: string 73 | StorageMgmt1InterfaceDefaultRoute: 74 | description: StorageMgmtInterfaceDefaultRoute 75 | type: string 76 | StorageMgmt2InterfaceDefaultRoute: 77 | description: StorageMgmtInterfaceDefaultRoute 78 | type: string 79 | StorageMgmt3InterfaceDefaultRoute: 80 | description: StorageMgmtInterfaceDefaultRoute 81 | type: string 82 | 83 | Storage0InterfaceDefaultRoute: 84 | description: StorageInterfaceDefaultRoute 85 | type: string 86 | Storage1InterfaceDefaultRoute: 87 | description: StorageInterfaceDefaultRoute 88 | type: string 89 | Storage2InterfaceDefaultRoute: 90 | description: StorageInterfaceDefaultRoute 91 | type: string 92 | Storage3InterfaceDefaultRoute: 93 | description: StorageInterfaceDefaultRoute 94 | type: string 95 | 96 | # External network is not routed, only one entry. 97 | External1InterfaceDefaultRoute: 98 | description: default route for the external network 99 | type: string 100 | 101 | # --------------------------------------------------------------------------- 102 | # IP subnets 103 | # --------------------------------------------------------------------------- 104 | Storage0IpSubnet: 105 | default: '' 106 | description: IP address/subnet on the storage network 107 | type: string 108 | Storage1IpSubnet: 109 | default: '' 110 | description: IP address/subnet on the storage network 111 | type: string 112 | Storage2IpSubnet: 113 | default: '' 114 | description: IP address/subnet on the storage network 115 | type: string 116 | Storage3IpSubnet: 117 | default: '' 118 | description: IP address/subnet on the storage network 119 | type: string 120 | 121 | StorageMgmt0IpSubnet: 122 | default: '' 123 | description: IP address/subnet on the storage_mgmt network 124 | type: string 125 | StorageMgmt1IpSubnet: 126 | default: '' 127 | description: IP address/subnet on the storage_mgmt network 128 | type: string 129 | StorageMgmt2IpSubnet: 130 | default: '' 131 | description: IP address/subnet on the storage_mgmt network 132 | type: string 133 | StorageMgmt3IpSubnet: 134 | default: '' 135 | description: IP address/subnet on the storage_mgmt network 136 | type: string 137 | 138 | InternalApi0IpSubnet: 139 | default: '' 140 | description: IP address/subnet on the internal_api network 141 | type: string 142 | InternalApi1IpSubnet: 143 | default: '' 144 | description: IP address/subnet on the internal_api network 145 | type: string 146 | InternalApi2IpSubnet: 147 | default: '' 148 | description: IP address/subnet on the internal_api network 149 | type: string 150 | InternalApi3IpSubnet: 151 | default: '' 152 | description: IP address/subnet on the internal_api network 153 | type: string 154 | 155 | Tenant0IpSubnet: 156 | default: '' 157 | description: IP address/subnet on the tenant network 158 | type: string 159 | Tenant1IpSubnet: 160 | default: '' 161 | description: IP address/subnet on the tenant network 162 | type: string 163 | Tenant2IpSubnet: 164 | default: '' 165 | description: IP address/subnet on the tenant network 166 | type: string 167 | Tenant3IpSubnet: 168 | default: '' 169 | description: IP address/subnet on the tenant network 170 | type: string 171 | 172 | External1IpSubnet: 173 | default: '' 174 | description: IP address/subnet on the external network 175 | type: string 176 | ManagementIpSubnet: 177 | default: '' 178 | description: IP address/subnet on the management network 179 | type: string 180 | 181 | # --------------------------------------------------------------------------- 182 | # VLAN IDs 183 | # --------------------------------------------------------------------------- 184 | Storage0NetworkVlanID: 185 | default: 630 186 | description: Vlan ID for the storage network traffic. 187 | type: number 188 | Storage1NetworkVlanID: 189 | default: 631 190 | description: Vlan ID for the storage1 network traffic. 191 | type: number 192 | Storage2NetworkVlanID: 193 | default: 632 194 | description: Vlan ID for the storage network traffic. 195 | type: number 196 | Storage3NetworkVlanID: 197 | default: 633 198 | description: Vlan ID for the storage1 network traffic. 199 | type: number 200 | 201 | StorageMgmt0NetworkVlanID: 202 | default: 640 203 | description: Vlan ID for the storage_mgmt network traffic. 204 | type: number 205 | StorageMgmt1NetworkVlanID: 206 | default: 641 207 | description: Vlan ID for the storage_mgmt1 network traffic. 208 | type: number 209 | StorageMgmt2NetworkVlanID: 210 | default: 642 211 | description: Vlan ID for the storage_mgmt network traffic. 212 | type: number 213 | StorageMgmt3NetworkVlanID: 214 | default: 643 215 | description: Vlan ID for the storage_mgmt1 network traffic. 216 | type: number 217 | 218 | InternalApi0NetworkVlanID: 219 | default: 610 220 | description: Vlan ID for the internal_api network traffic. 221 | type: number 222 | InternalApi1NetworkVlanID: 223 | default: 611 224 | description: Vlan ID for the internal_api1 network traffic. 225 | type: number 226 | InternalApi2NetworkVlanID: 227 | default: 612 228 | description: Vlan ID for the internal_api network traffic. 229 | type: number 230 | InternalApi3NetworkVlanID: 231 | default: 613 232 | description: Vlan ID for the internal_api1 network traffic. 233 | type: number 234 | 235 | Tenant0NetworkVlanID: 236 | default: 650 237 | description: Vlan ID for the tenant network traffic. 238 | type: number 239 | Tenant1NetworkVlanID: 240 | default: 651 241 | description: Vlan ID for the tenant1 network traffic. 242 | type: number 243 | Tenant2NetworkVlanID: 244 | default: 652 245 | description: Vlan ID for the tenant network traffic. 246 | type: number 247 | Tenant3NetworkVlanID: 248 | default: 653 249 | description: Vlan ID for the tenant1 network traffic. 250 | type: number 251 | 252 | External1NetworkVlanID: 253 | default: 621 254 | description: Vlan ID for the external network traffic. 255 | type: number 256 | 257 | ManagementNetworkVlanID: 258 | default: 60 259 | description: Vlan ID for the management network traffic. 260 | type: number 261 | 262 | 263 | # --------------------------------------------------------------------------- 264 | # Subnet CIDR's - prefixes 265 | # --------------------------------------------------------------------------- 266 | ControlPlane0SubnetCidr: # Override this via parameter_defaults 267 | default: '26' 268 | description: The subnet CIDR of the control plane network. 269 | type: string 270 | ControlPlane1SubnetCidr: # Override this via parameter_defaults 271 | default: '26' 272 | description: The subnet CIDR of the control plane network. 273 | type: string 274 | ControlPlane2SubnetCidr: # Override this via parameter_defaults 275 | default: '26' 276 | description: The subnet CIDR of the control plane network. 277 | type: string 278 | ControlPlane3SubnetCidr: # Override this via parameter_defaults 279 | default: '26' 280 | description: The subnet CIDR of the control plane network. 281 | type: string 282 | 283 | # --------------------------------------------------------------------------- 284 | # EC2 metadata server IPs 285 | # --------------------------------------------------------------------------- 286 | ControlPlane0EC2MetadataIp: # Override this via parameter_defaults 287 | description: The IP address of the EC2 metadata server. 288 | type: string 289 | ControlPlane1EC2MetadataIp: # Override this via parameter_defaults 290 | description: The IP address of the EC2 metadata server. 291 | type: string 292 | ControlPlane2EC2MetadataIp: # Override this via parameter_defaults 293 | description: The IP address of the EC2 metadata server. 294 | type: string 295 | ControlPlane3EC2MetadataIp: # Override this via parameter_defaults 296 | description: The IP address of the EC2 metadata server. 297 | type: string 298 | 299 | # --------------------------------------------------------------------------- 300 | ControlPlaneIp: 301 | default: '' 302 | description: IP address/subnet on the ctlplane network 303 | type: string 304 | DnsServers: # Override this via parameter_defaults 305 | default: [] 306 | description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf. 307 | type: comma_delimited_list 308 | # --------------------------------------------------------------------------- 309 | resources: 310 | OsNetConfigImpl: 311 | type: OS::Heat::SoftwareConfig 312 | properties: 313 | group: script 314 | config: 315 | str_replace: 316 | template: 317 | get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh 318 | params: 319 | $network_config: 320 | network_config: 321 | # --------------------------------------------------------------------------- 322 | # ctlplane interface 323 | # --------------------------------------------------------------------------- 324 | - type: interface 325 | name: nic1 326 | use_dhcp: false 327 | dns_servers: 328 | get_param: DnsServers 329 | addresses: 330 | - ip_netmask: 331 | list_join: 332 | - / 333 | - - get_param: ControlPlaneIp 334 | - get_param: ControlPlane1SubnetCidr 335 | routes: 336 | - ip_netmask: 169.254.169.254/32 337 | next_hop: 338 | get_param: ControlPlane1EC2MetadataIp 339 | - default: true 340 | next_hop: 341 | get_param: ControlPlane1DefaultRoute 342 | # --------------------------------------------------------------------------- 343 | # VLAN trunk OVS bridge - Storage, StorageMgmt 344 | # --------------------------------------------------------------------------- 345 | - type: ovs_bridge 346 | name: br-ex 347 | use_dhcp: false 348 | members: 349 | - type: interface 350 | name: nic2 351 | # force the MAC address of the bridge to this interface 352 | primary: true 353 | - type: vlan 354 | vlan_id: 355 | get_param: Storage1NetworkVlanID 356 | addresses: 357 | - ip_netmask: 358 | get_param: Storage1IpSubnet 359 | routes: 360 | - ip_netmask: 361 | get_param: StorageSupernet 362 | next_hop: 363 | get_param: Storage1InterfaceDefaultRoute 364 | - type: vlan 365 | vlan_id: 366 | get_param: StorageMgmt1NetworkVlanID 367 | addresses: 368 | - ip_netmask: 369 | get_param: StorageMgmt1IpSubnet 370 | routes: 371 | - ip_netmask: 372 | get_param: StorageMgmtSupernet 373 | next_hop: 374 | get_param: StorageMgmt1InterfaceDefaultRoute 375 | # --------------------------------------------------------------------------- 376 | outputs: 377 | OS::stack_id: 378 | description: The OsNetConfigImpl resource. 379 | value: 380 | get_resource: OsNetConfigImpl -------------------------------------------------------------------------------- /networking/overcloud/templates/nic-config/ceph2.yaml: -------------------------------------------------------------------------------- 1 | heat_template_version: queens 2 | description: > 3 | Software Config to drive os-net-config to configure VLANs for the CephStorage2 role. 4 | 5 | parameters: 6 | # --------------------------------------------------------------------------- 7 | # Supernets 8 | # --------------------------------------------------------------------------- 9 | ExternalSupernet: 10 | default: '' 11 | type: string 12 | InternalApiSupernet: 13 | description: InternalApiSupernet 14 | type: string 15 | StorageMgmtSupernet: 16 | description: StorageMgmtSupernet 17 | type: string 18 | StorageSupernet: 19 | description: StorageSupernet 20 | type: string 21 | TenantSupernet: 22 | description: TenantSupernet 23 | type: string 24 | CtlplaneSupernet: 25 | description: CtlplaneSupernet 26 | type: string 27 | 28 | # --------------------------------------------------------------------------- 29 | # Default Routes 30 | # --------------------------------------------------------------------------- 31 | ControlPlane0DefaultRoute: # Override this via parameter_defaults 32 | description: The default route of the control plane network. 33 | type: string 34 | ControlPlane1DefaultRoute: # Override this via parameter_defaults 35 | description: The default route of the control plane network. 36 | type: string 37 | ControlPlane2DefaultRoute: # Override this via parameter_defaults 38 | description: The default route of the control plane network. 39 | type: string 40 | ControlPlane3DefaultRoute: # Override this via parameter_defaults 41 | description: The default route of the control plane network. 42 | type: string 43 | 44 | Tenant0InterfaceDefaultRoute: 45 | description: TenantInterfaceDefaultRoute 46 | type: string 47 | Tenant1InterfaceDefaultRoute: 48 | description: TenantInterfaceDefaultRoute 49 | type: string 50 | Tenant2InterfaceDefaultRoute: 51 | description: TenantInterfaceDefaultRoute 52 | type: string 53 | Tenant3InterfaceDefaultRoute: 54 | description: TenantInterfaceDefaultRoute 55 | type: string 56 | 57 | InternalApi0InterfaceDefaultRoute: 58 | description: InternalApiInterfaceDefaultRoute 59 | type: string 60 | InternalApi1InterfaceDefaultRoute: 61 | description: InternalApiInterfaceDefaultRoute 62 | type: string 63 | InternalApi2InterfaceDefaultRoute: 64 | description: InternalApiInterfaceDefaultRoute 65 | type: string 66 | InternalApi3InterfaceDefaultRoute: 67 | description: InternalApiInterfaceDefaultRoute 68 | type: string 69 | 70 | StorageMgmt0InterfaceDefaultRoute: 71 | description: StorageMgmtInterfaceDefaultRoute 72 | type: string 73 | StorageMgmt1InterfaceDefaultRoute: 74 | description: StorageMgmtInterfaceDefaultRoute 75 | type: string 76 | StorageMgmt2InterfaceDefaultRoute: 77 | description: StorageMgmtInterfaceDefaultRoute 78 | type: string 79 | StorageMgmt3InterfaceDefaultRoute: 80 | description: StorageMgmtInterfaceDefaultRoute 81 | type: string 82 | 83 | Storage0InterfaceDefaultRoute: 84 | description: StorageInterfaceDefaultRoute 85 | type: string 86 | Storage1InterfaceDefaultRoute: 87 | description: StorageInterfaceDefaultRoute 88 | type: string 89 | Storage2InterfaceDefaultRoute: 90 | description: StorageInterfaceDefaultRoute 91 | type: string 92 | Storage3InterfaceDefaultRoute: 93 | description: StorageInterfaceDefaultRoute 94 | type: string 95 | 96 | # External network is not routed, only one entry. 97 | External1InterfaceDefaultRoute: 98 | description: default route for the external network 99 | type: string 100 | 101 | # --------------------------------------------------------------------------- 102 | # IP subnets 103 | # --------------------------------------------------------------------------- 104 | Storage0IpSubnet: 105 | default: '' 106 | description: IP address/subnet on the storage network 107 | type: string 108 | Storage1IpSubnet: 109 | default: '' 110 | description: IP address/subnet on the storage network 111 | type: string 112 | Storage2IpSubnet: 113 | default: '' 114 | description: IP address/subnet on the storage network 115 | type: string 116 | Storage3IpSubnet: 117 | default: '' 118 | description: IP address/subnet on the storage network 119 | type: string 120 | 121 | StorageMgmt0IpSubnet: 122 | default: '' 123 | description: IP address/subnet on the storage_mgmt network 124 | type: string 125 | StorageMgmt1IpSubnet: 126 | default: '' 127 | description: IP address/subnet on the storage_mgmt network 128 | type: string 129 | StorageMgmt2IpSubnet: 130 | default: '' 131 | description: IP address/subnet on the storage_mgmt network 132 | type: string 133 | StorageMgmt3IpSubnet: 134 | default: '' 135 | description: IP address/subnet on the storage_mgmt network 136 | type: string 137 | 138 | InternalApi0IpSubnet: 139 | default: '' 140 | description: IP address/subnet on the internal_api network 141 | type: string 142 | InternalApi1IpSubnet: 143 | default: '' 144 | description: IP address/subnet on the internal_api network 145 | type: string 146 | InternalApi2IpSubnet: 147 | default: '' 148 | description: IP address/subnet on the internal_api network 149 | type: string 150 | InternalApi3IpSubnet: 151 | default: '' 152 | description: IP address/subnet on the internal_api network 153 | type: string 154 | 155 | Tenant0IpSubnet: 156 | default: '' 157 | description: IP address/subnet on the tenant network 158 | type: string 159 | Tenant1IpSubnet: 160 | default: '' 161 | description: IP address/subnet on the tenant network 162 | type: string 163 | Tenant2IpSubnet: 164 | default: '' 165 | description: IP address/subnet on the tenant network 166 | type: string 167 | Tenant3IpSubnet: 168 | default: '' 169 | description: IP address/subnet on the tenant network 170 | type: string 171 | 172 | External1IpSubnet: 173 | default: '' 174 | description: IP address/subnet on the external network 175 | type: string 176 | ManagementIpSubnet: 177 | default: '' 178 | description: IP address/subnet on the management network 179 | type: string 180 | 181 | # --------------------------------------------------------------------------- 182 | # VLAN IDs 183 | # --------------------------------------------------------------------------- 184 | Storage0NetworkVlanID: 185 | default: 630 186 | description: Vlan ID for the storage network traffic. 187 | type: number 188 | Storage1NetworkVlanID: 189 | default: 631 190 | description: Vlan ID for the storage1 network traffic. 191 | type: number 192 | Storage2NetworkVlanID: 193 | default: 632 194 | description: Vlan ID for the storage network traffic. 195 | type: number 196 | Storage3NetworkVlanID: 197 | default: 633 198 | description: Vlan ID for the storage1 network traffic. 199 | type: number 200 | 201 | StorageMgmt0NetworkVlanID: 202 | default: 640 203 | description: Vlan ID for the storage_mgmt network traffic. 204 | type: number 205 | StorageMgmt1NetworkVlanID: 206 | default: 641 207 | description: Vlan ID for the storage_mgmt1 network traffic. 208 | type: number 209 | StorageMgmt2NetworkVlanID: 210 | default: 642 211 | description: Vlan ID for the storage_mgmt network traffic. 212 | type: number 213 | StorageMgmt3NetworkVlanID: 214 | default: 643 215 | description: Vlan ID for the storage_mgmt1 network traffic. 216 | type: number 217 | 218 | InternalApi0NetworkVlanID: 219 | default: 610 220 | description: Vlan ID for the internal_api network traffic. 221 | type: number 222 | InternalApi1NetworkVlanID: 223 | default: 611 224 | description: Vlan ID for the internal_api1 network traffic. 225 | type: number 226 | InternalApi2NetworkVlanID: 227 | default: 612 228 | description: Vlan ID for the internal_api network traffic. 229 | type: number 230 | InternalApi3NetworkVlanID: 231 | default: 613 232 | description: Vlan ID for the internal_api1 network traffic. 233 | type: number 234 | 235 | Tenant0NetworkVlanID: 236 | default: 650 237 | description: Vlan ID for the tenant network traffic. 238 | type: number 239 | Tenant1NetworkVlanID: 240 | default: 651 241 | description: Vlan ID for the tenant1 network traffic. 242 | type: number 243 | Tenant2NetworkVlanID: 244 | default: 652 245 | description: Vlan ID for the tenant network traffic. 246 | type: number 247 | Tenant3NetworkVlanID: 248 | default: 653 249 | description: Vlan ID for the tenant1 network traffic. 250 | type: number 251 | 252 | External1NetworkVlanID: 253 | default: 621 254 | description: Vlan ID for the external network traffic. 255 | type: number 256 | 257 | ManagementNetworkVlanID: 258 | default: 60 259 | description: Vlan ID for the management network traffic. 260 | type: number 261 | 262 | 263 | # --------------------------------------------------------------------------- 264 | # Subnet CIDR's - prefixes 265 | # --------------------------------------------------------------------------- 266 | ControlPlane0SubnetCidr: # Override this via parameter_defaults 267 | default: '26' 268 | description: The subnet CIDR of the control plane network. 269 | type: string 270 | ControlPlane1SubnetCidr: # Override this via parameter_defaults 271 | default: '26' 272 | description: The subnet CIDR of the control plane network. 273 | type: string 274 | ControlPlane2SubnetCidr: # Override this via parameter_defaults 275 | default: '26' 276 | description: The subnet CIDR of the control plane network. 277 | type: string 278 | ControlPlane3SubnetCidr: # Override this via parameter_defaults 279 | default: '26' 280 | description: The subnet CIDR of the control plane network. 281 | type: string 282 | 283 | # --------------------------------------------------------------------------- 284 | # EC2 metadata server IPs 285 | # --------------------------------------------------------------------------- 286 | ControlPlane0EC2MetadataIp: # Override this via parameter_defaults 287 | description: The IP address of the EC2 metadata server. 288 | type: string 289 | ControlPlane1EC2MetadataIp: # Override this via parameter_defaults 290 | description: The IP address of the EC2 metadata server. 291 | type: string 292 | ControlPlane2EC2MetadataIp: # Override this via parameter_defaults 293 | description: The IP address of the EC2 metadata server. 294 | type: string 295 | ControlPlane3EC2MetadataIp: # Override this via parameter_defaults 296 | description: The IP address of the EC2 metadata server. 297 | type: string 298 | 299 | # --------------------------------------------------------------------------- 300 | ControlPlaneIp: 301 | default: '' 302 | description: IP address/subnet on the ctlplane network 303 | type: string 304 | DnsServers: # Override this via parameter_defaults 305 | default: [] 306 | description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf. 307 | type: comma_delimited_list 308 | # --------------------------------------------------------------------------- 309 | resources: 310 | OsNetConfigImpl: 311 | type: OS::Heat::SoftwareConfig 312 | properties: 313 | group: script 314 | config: 315 | str_replace: 316 | template: 317 | get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh 318 | params: 319 | $network_config: 320 | network_config: 321 | # --------------------------------------------------------------------------- 322 | # ctlplane interface 323 | # --------------------------------------------------------------------------- 324 | - type: interface 325 | name: nic1 326 | use_dhcp: false 327 | dns_servers: 328 | get_param: DnsServers 329 | addresses: 330 | - ip_netmask: 331 | list_join: 332 | - / 333 | - - get_param: ControlPlaneIp 334 | - get_param: ControlPlane2SubnetCidr 335 | routes: 336 | - ip_netmask: 169.254.169.254/32 337 | next_hop: 338 | get_param: ControlPlane2EC2MetadataIp 339 | - default: true 340 | next_hop: 341 | get_param: ControlPlane2DefaultRoute 342 | # --------------------------------------------------------------------------- 343 | # VLAN trunk OVS bridge - Storage, StorageMgmt 344 | # --------------------------------------------------------------------------- 345 | - type: ovs_bridge 346 | name: br-ex 347 | use_dhcp: false 348 | members: 349 | - type: interface 350 | name: nic2 351 | # force the MAC address of the bridge to this interface 352 | primary: true 353 | - type: vlan 354 | vlan_id: 355 | get_param: Storage2NetworkVlanID 356 | addresses: 357 | - ip_netmask: 358 | get_param: Storage2IpSubnet 359 | routes: 360 | - ip_netmask: 361 | get_param: StorageSupernet 362 | next_hop: 363 | get_param: Storage2InterfaceDefaultRoute 364 | - type: vlan 365 | vlan_id: 366 | get_param: StorageMgmt2NetworkVlanID 367 | addresses: 368 | - ip_netmask: 369 | get_param: StorageMgmt2IpSubnet 370 | routes: 371 | - ip_netmask: 372 | get_param: StorageMgmtSupernet 373 | next_hop: 374 | get_param: StorageMgmt2InterfaceDefaultRoute 375 | # --------------------------------------------------------------------------- 376 | outputs: 377 | OS::stack_id: 378 | description: The OsNetConfigImpl resource. 379 | value: 380 | get_resource: OsNetConfigImpl -------------------------------------------------------------------------------- /networking/overcloud/templates/nic-config/ceph3.yaml: -------------------------------------------------------------------------------- 1 | heat_template_version: queens 2 | description: > 3 | Software Config to drive os-net-config to configure VLANs for the CephStorage3 role. 4 | 5 | parameters: 6 | # --------------------------------------------------------------------------- 7 | # Supernets 8 | # --------------------------------------------------------------------------- 9 | ExternalSupernet: 10 | default: '' 11 | type: string 12 | InternalApiSupernet: 13 | description: InternalApiSupernet 14 | type: string 15 | StorageMgmtSupernet: 16 | description: StorageMgmtSupernet 17 | type: string 18 | StorageSupernet: 19 | description: StorageSupernet 20 | type: string 21 | TenantSupernet: 22 | description: TenantSupernet 23 | type: string 24 | CtlplaneSupernet: 25 | description: CtlplaneSupernet 26 | type: string 27 | 28 | # --------------------------------------------------------------------------- 29 | # Default Routes 30 | # --------------------------------------------------------------------------- 31 | ControlPlane0DefaultRoute: # Override this via parameter_defaults 32 | description: The default route of the control plane network. 33 | type: string 34 | ControlPlane1DefaultRoute: # Override this via parameter_defaults 35 | description: The default route of the control plane network. 36 | type: string 37 | ControlPlane2DefaultRoute: # Override this via parameter_defaults 38 | description: The default route of the control plane network. 39 | type: string 40 | ControlPlane3DefaultRoute: # Override this via parameter_defaults 41 | description: The default route of the control plane network. 42 | type: string 43 | 44 | Tenant0InterfaceDefaultRoute: 45 | description: TenantInterfaceDefaultRoute 46 | type: string 47 | Tenant1InterfaceDefaultRoute: 48 | description: TenantInterfaceDefaultRoute 49 | type: string 50 | Tenant2InterfaceDefaultRoute: 51 | description: TenantInterfaceDefaultRoute 52 | type: string 53 | Tenant3InterfaceDefaultRoute: 54 | description: TenantInterfaceDefaultRoute 55 | type: string 56 | 57 | InternalApi0InterfaceDefaultRoute: 58 | description: InternalApiInterfaceDefaultRoute 59 | type: string 60 | InternalApi1InterfaceDefaultRoute: 61 | description: InternalApiInterfaceDefaultRoute 62 | type: string 63 | InternalApi2InterfaceDefaultRoute: 64 | description: InternalApiInterfaceDefaultRoute 65 | type: string 66 | InternalApi3InterfaceDefaultRoute: 67 | description: InternalApiInterfaceDefaultRoute 68 | type: string 69 | 70 | StorageMgmt0InterfaceDefaultRoute: 71 | description: StorageMgmtInterfaceDefaultRoute 72 | type: string 73 | StorageMgmt1InterfaceDefaultRoute: 74 | description: StorageMgmtInterfaceDefaultRoute 75 | type: string 76 | StorageMgmt2InterfaceDefaultRoute: 77 | description: StorageMgmtInterfaceDefaultRoute 78 | type: string 79 | StorageMgmt3InterfaceDefaultRoute: 80 | description: StorageMgmtInterfaceDefaultRoute 81 | type: string 82 | 83 | Storage0InterfaceDefaultRoute: 84 | description: StorageInterfaceDefaultRoute 85 | type: string 86 | Storage1InterfaceDefaultRoute: 87 | description: StorageInterfaceDefaultRoute 88 | type: string 89 | Storage2InterfaceDefaultRoute: 90 | description: StorageInterfaceDefaultRoute 91 | type: string 92 | Storage3InterfaceDefaultRoute: 93 | description: StorageInterfaceDefaultRoute 94 | type: string 95 | 96 | # External network is not routed, only one entry. 97 | External1InterfaceDefaultRoute: 98 | description: default route for the external network 99 | type: string 100 | 101 | # --------------------------------------------------------------------------- 102 | # IP subnets 103 | # --------------------------------------------------------------------------- 104 | Storage0IpSubnet: 105 | default: '' 106 | description: IP address/subnet on the storage network 107 | type: string 108 | Storage1IpSubnet: 109 | default: '' 110 | description: IP address/subnet on the storage network 111 | type: string 112 | Storage2IpSubnet: 113 | default: '' 114 | description: IP address/subnet on the storage network 115 | type: string 116 | Storage3IpSubnet: 117 | default: '' 118 | description: IP address/subnet on the storage network 119 | type: string 120 | 121 | StorageMgmt0IpSubnet: 122 | default: '' 123 | description: IP address/subnet on the storage_mgmt network 124 | type: string 125 | StorageMgmt1IpSubnet: 126 | default: '' 127 | description: IP address/subnet on the storage_mgmt network 128 | type: string 129 | StorageMgmt2IpSubnet: 130 | default: '' 131 | description: IP address/subnet on the storage_mgmt network 132 | type: string 133 | StorageMgmt3IpSubnet: 134 | default: '' 135 | description: IP address/subnet on the storage_mgmt network 136 | type: string 137 | 138 | InternalApi0IpSubnet: 139 | default: '' 140 | description: IP address/subnet on the internal_api network 141 | type: string 142 | InternalApi1IpSubnet: 143 | default: '' 144 | description: IP address/subnet on the internal_api network 145 | type: string 146 | InternalApi2IpSubnet: 147 | default: '' 148 | description: IP address/subnet on the internal_api network 149 | type: string 150 | InternalApi3IpSubnet: 151 | default: '' 152 | description: IP address/subnet on the internal_api network 153 | type: string 154 | 155 | Tenant0IpSubnet: 156 | default: '' 157 | description: IP address/subnet on the tenant network 158 | type: string 159 | Tenant1IpSubnet: 160 | default: '' 161 | description: IP address/subnet on the tenant network 162 | type: string 163 | Tenant2IpSubnet: 164 | default: '' 165 | description: IP address/subnet on the tenant network 166 | type: string 167 | Tenant3IpSubnet: 168 | default: '' 169 | description: IP address/subnet on the tenant network 170 | type: string 171 | 172 | External1IpSubnet: 173 | default: '' 174 | description: IP address/subnet on the external network 175 | type: string 176 | ManagementIpSubnet: 177 | default: '' 178 | description: IP address/subnet on the management network 179 | type: string 180 | 181 | # --------------------------------------------------------------------------- 182 | # VLAN IDs 183 | # --------------------------------------------------------------------------- 184 | Storage0NetworkVlanID: 185 | default: 630 186 | description: Vlan ID for the storage network traffic. 187 | type: number 188 | Storage1NetworkVlanID: 189 | default: 631 190 | description: Vlan ID for the storage1 network traffic. 191 | type: number 192 | Storage2NetworkVlanID: 193 | default: 632 194 | description: Vlan ID for the storage network traffic. 195 | type: number 196 | Storage3NetworkVlanID: 197 | default: 633 198 | description: Vlan ID for the storage1 network traffic. 199 | type: number 200 | 201 | StorageMgmt0NetworkVlanID: 202 | default: 640 203 | description: Vlan ID for the storage_mgmt network traffic. 204 | type: number 205 | StorageMgmt1NetworkVlanID: 206 | default: 641 207 | description: Vlan ID for the storage_mgmt1 network traffic. 208 | type: number 209 | StorageMgmt2NetworkVlanID: 210 | default: 642 211 | description: Vlan ID for the storage_mgmt network traffic. 212 | type: number 213 | StorageMgmt3NetworkVlanID: 214 | default: 643 215 | description: Vlan ID for the storage_mgmt1 network traffic. 216 | type: number 217 | 218 | InternalApi0NetworkVlanID: 219 | default: 610 220 | description: Vlan ID for the internal_api network traffic. 221 | type: number 222 | InternalApi1NetworkVlanID: 223 | default: 611 224 | description: Vlan ID for the internal_api1 network traffic. 225 | type: number 226 | InternalApi2NetworkVlanID: 227 | default: 612 228 | description: Vlan ID for the internal_api network traffic. 229 | type: number 230 | InternalApi3NetworkVlanID: 231 | default: 613 232 | description: Vlan ID for the internal_api1 network traffic. 233 | type: number 234 | 235 | Tenant0NetworkVlanID: 236 | default: 650 237 | description: Vlan ID for the tenant network traffic. 238 | type: number 239 | Tenant1NetworkVlanID: 240 | default: 651 241 | description: Vlan ID for the tenant1 network traffic. 242 | type: number 243 | Tenant2NetworkVlanID: 244 | default: 652 245 | description: Vlan ID for the tenant network traffic. 246 | type: number 247 | Tenant3NetworkVlanID: 248 | default: 653 249 | description: Vlan ID for the tenant1 network traffic. 250 | type: number 251 | 252 | External1NetworkVlanID: 253 | default: 621 254 | description: Vlan ID for the external network traffic. 255 | type: number 256 | 257 | ManagementNetworkVlanID: 258 | default: 60 259 | description: Vlan ID for the management network traffic. 260 | type: number 261 | 262 | 263 | # --------------------------------------------------------------------------- 264 | # Subnet CIDR's - prefixes 265 | # --------------------------------------------------------------------------- 266 | ControlPlane0SubnetCidr: # Override this via parameter_defaults 267 | default: '26' 268 | description: The subnet CIDR of the control plane network. 269 | type: string 270 | ControlPlane1SubnetCidr: # Override this via parameter_defaults 271 | default: '26' 272 | description: The subnet CIDR of the control plane network. 273 | type: string 274 | ControlPlane2SubnetCidr: # Override this via parameter_defaults 275 | default: '26' 276 | description: The subnet CIDR of the control plane network. 277 | type: string 278 | ControlPlane3SubnetCidr: # Override this via parameter_defaults 279 | default: '26' 280 | description: The subnet CIDR of the control plane network. 281 | type: string 282 | 283 | # --------------------------------------------------------------------------- 284 | # EC2 metadata server IPs 285 | # --------------------------------------------------------------------------- 286 | ControlPlane0EC2MetadataIp: # Override this via parameter_defaults 287 | description: The IP address of the EC2 metadata server. 288 | type: string 289 | ControlPlane1EC2MetadataIp: # Override this via parameter_defaults 290 | description: The IP address of the EC2 metadata server. 291 | type: string 292 | ControlPlane2EC2MetadataIp: # Override this via parameter_defaults 293 | description: The IP address of the EC2 metadata server. 294 | type: string 295 | ControlPlane3EC2MetadataIp: # Override this via parameter_defaults 296 | description: The IP address of the EC2 metadata server. 297 | type: string 298 | 299 | # --------------------------------------------------------------------------- 300 | ControlPlaneIp: 301 | default: '' 302 | description: IP address/subnet on the ctlplane network 303 | type: string 304 | DnsServers: # Override this via parameter_defaults 305 | default: [] 306 | description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf. 307 | type: comma_delimited_list 308 | # --------------------------------------------------------------------------- 309 | resources: 310 | OsNetConfigImpl: 311 | type: OS::Heat::SoftwareConfig 312 | properties: 313 | group: script 314 | config: 315 | str_replace: 316 | template: 317 | get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh 318 | params: 319 | $network_config: 320 | network_config: 321 | # --------------------------------------------------------------------------- 322 | # ctlplane interface 323 | # --------------------------------------------------------------------------- 324 | - type: interface 325 | name: nic1 326 | use_dhcp: false 327 | dns_servers: 328 | get_param: DnsServers 329 | addresses: 330 | - ip_netmask: 331 | list_join: 332 | - / 333 | - - get_param: ControlPlaneIp 334 | - get_param: ControlPlane3SubnetCidr 335 | routes: 336 | - ip_netmask: 169.254.169.254/32 337 | next_hop: 338 | get_param: ControlPlane3EC2MetadataIp 339 | - default: true 340 | next_hop: 341 | get_param: ControlPlane3DefaultRoute 342 | # --------------------------------------------------------------------------- 343 | # VLAN trunk OVS bridge - Storage, StorageMgmt 344 | # --------------------------------------------------------------------------- 345 | - type: ovs_bridge 346 | name: br-ex 347 | use_dhcp: false 348 | members: 349 | - type: interface 350 | name: nic2 351 | # force the MAC address of the bridge to this interface 352 | primary: true 353 | - type: vlan 354 | vlan_id: 355 | get_param: Storage3NetworkVlanID 356 | addresses: 357 | - ip_netmask: 358 | get_param: Storage3IpSubnet 359 | routes: 360 | - ip_netmask: 361 | get_param: StorageSupernet 362 | next_hop: 363 | get_param: Storage3InterfaceDefaultRoute 364 | - type: vlan 365 | vlan_id: 366 | get_param: StorageMgmt3NetworkVlanID 367 | addresses: 368 | - ip_netmask: 369 | get_param: StorageMgmt3IpSubnet 370 | routes: 371 | - ip_netmask: 372 | get_param: StorageMgmtSupernet 373 | next_hop: 374 | get_param: StorageMgmt3InterfaceDefaultRoute 375 | # --------------------------------------------------------------------------- 376 | outputs: 377 | OS::stack_id: 378 | description: The OsNetConfigImpl resource. 379 | value: 380 | get_resource: OsNetConfigImpl -------------------------------------------------------------------------------- /networking/undercloud/README.rst: -------------------------------------------------------------------------------- 1 | tripleo-workshop - networking - Undercloud Installation 2 | ####################################################### 3 | 4 | Install undercloud 5 | ------------------ 6 | 7 | #. Set the hostname 8 | 9 | :: 10 | 11 | hostnamectl set-hostname undercloud.example.com 12 | hostnamectl set-hostname --transient undercloud.example.com 13 | cat << EOF > /etc/hosts 14 | 127.0.0.1 undercloud.exeample.com undercloud localhost localhost.localdomain localhost4 localhost4.localdomain4 15 | ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 16 | EOF 17 | 18 | #. Reference the 19 | `documentation `_ 20 | and install stable/queens python-tripleoclient. 21 | 22 | :: 23 | 24 | useradd stack 25 | passwd stack 26 | 27 | echo "stack ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/stack 28 | chmod 0440 /etc/sudoers.d/stack 29 | 30 | su - stack 31 | 32 | sudo yum -y install https://trunk.rdoproject.org/centos7/current/python2-tripleo-repos-0.0.1-0.20180418175107.ef4e12e.el7.centos.noarch.rpm 33 | sudo -E tripleo-repos -b queens current ceph 34 | 35 | sudo yum install -y python-tripleoclient 36 | 37 | #. Clone the git repo 38 | 39 | :: 40 | 41 | git clone https://github.com/redhat-openstack/tripleo-workshop.git 42 | 43 | #. Copy the undercloud configuration file from the git repo 44 | 45 | :: 46 | 47 | cp ./tripleo-workshop/networking/undercloud/undercloud.conf . 48 | 49 | #. Install the undercloud 50 | 51 | :: 52 | 53 | openstack undercloud install 54 | 55 | #. Build overcloud images and upload them in undercloud 56 | 57 | Reference the 58 | `documentation and build overcloud images 59 | `_. 60 | 61 | .. NOTE:: If using ceph make sure to use the luminous repo 62 | :: 63 | 64 | export DIB_YUM_REPO_CONF="/etc/yum.repos.d/delorean*" 65 | export DIB_YUM_REPO_CONF="$DIB_YUM_REPO_CONF /etc/yum.repos.d/tripleo-centos-ceph-luminous.repo" 66 | 67 | Alternatively download pre-built images:: 68 | 69 | mkdir images 70 | cd images 71 | 72 | # Download from rdoporject.org 73 | curl -O https://images.rdoproject.org/queens/delorean/current-tripleo/ironic-python-agent.tar 74 | curl -O https://images.rdoproject.org/queens/delorean/current-tripleo/ironic-python-agent.tar.md5 75 | curl -O https://images.rdoproject.org/queens/delorean/current-tripleo/overcloud-full.tar 76 | curl -O https://images.rdoproject.org/queens/delorean/current-tripleo/overcloud-full.tar.md5 77 | 78 | # Download from internal lab network 79 | curl -O http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/ironic-python-agent.tar 80 | curl -O http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/ironic-python-agent.tar.md5 81 | curl -O http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/overcloud-full.tar 82 | curl -O http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/overcloud-full.tar.md5 83 | 84 | tar xvf ironic-python-agent.tar 85 | tar xvf overcloud-full.tar 86 | 87 | openstack overcloud image upload 88 | 89 | cd ~ 90 | 91 | Reference the 92 | `documentation and upload overcloud images in the undercloud 93 | `_. 94 | 95 | 96 | #. Copy instack-env.json to the undercloud 97 | 98 | scp root@192.168.122.1:instackenv.json . 99 | 100 | #. Register nodes 101 | 102 | Reference the 103 | `documentation to register nodes 104 | `_ 105 | using ``instackenv.json`` that was generated and copied 106 | to the undercloud in previous steps. 107 | 108 | :: 109 | 110 | openstack overcloud node import instackenv.json 111 | 112 | #. Set root device hint for Ceph nodes 113 | 114 | :: 115 | 116 | openstack baremetal node set overcloud-ceph1-0 --property root_device='{"name": "/dev/vda"}' 117 | openstack baremetal node set overcloud-ceph2-0 --property root_device='{"name": "/dev/vda"}' 118 | openstack baremetal node set overcloud-ceph3-0 --property root_device='{"name": "/dev/vda"}' 119 | 120 | #. Introspect Nodes 121 | 122 | Reference the 123 | `documentation and introspect all the nodes 124 | `_. 125 | 126 | :: 127 | 128 | openstack overcloud node introspect --all-manageable 129 | 130 | .. NOTE:: The introspection will fail. Try to figure it out. First on to 131 | solve it can put the solution in the etherpad. 132 | 133 | #. Move on to set up `overcloud `_. -------------------------------------------------------------------------------- /networking/undercloud/undercloud.conf: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | 3 | undercloud_hostname = undercloud.example.com 4 | local_ip = 172.20.0.1/26 5 | undercloud_public_host = 172.20.0.2 6 | undercloud_admin_host = 172.20.0.3 7 | # Change if this is not the libvirt default virbr0 interface ip 8 | undercloud_nameservers = 192.168.122.1 9 | undercloud_ntp_servers = clock.redhat.com,clock2.redhat.com 10 | 11 | subnets = ctlplane0,ctlplane1,ctlplane2,ctlplane3 12 | local_subnet = ctlplane0 13 | 14 | local_interface = eth1 15 | local_mtu = 1500 16 | inspection_interface = br-ctlplane 17 | scheduler_max_attempts = 3 18 | enable_routed_networks = true 19 | 20 | # Comment this if not using a docker registry mirror 21 | docker_registry_mirror = http://10.12.50.1:5000 22 | 23 | [ctlplane0] 24 | cidr = 172.20.0.0/26 25 | gateway = 172.20.0.62 26 | dhcp_start = 172.20.0.10 27 | dhcp_end = 172.20.0.29 28 | inspection_iprange = 172.20.0.30,172.20.0.49 29 | masquerade = false 30 | 31 | [ctlplane1] 32 | cidr = 172.20.0.64/26 33 | gateway = 172.20.0.126 34 | dhcp_start = 172.20.0.80 35 | dhcp_end = 172.20.0.99 36 | inspection_iprange = 172.20.0.100,172.20.0.119 37 | masquerade = false 38 | 39 | [ctlplane2] 40 | cidr = 172.20.0.128/26 41 | gateway = 172.20.0.190 42 | dhcp_start = 172.20.0.140 43 | dhcp_end = 172.20.0.159 44 | inspection_iprange = 172.20.0.170,172.20.0.189 45 | masquerade = false 46 | 47 | [ctlplane3] 48 | cidr = 172.20.0.192/26 49 | gateway = 172.20.0.253 50 | dhcp_start = 172.20.0.200 51 | dhcp_end = 172.20.0.219 52 | inspection_iprange = 172.20.0.230,172.20.0.249 53 | masquerade = false 54 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/express_setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | ############################################################################### 6 | echo "Generate ssh keys" 7 | #ssh-keygen 8 | ssh-keygen -f ~/.ssh/id_rsa -t rsa -N '' 9 | 10 | ############################################################################### 11 | echo "Install TripleO Repos" 12 | { 13 | yum -y install https://trunk.rdoproject.org/centos7/current/python2-tripleo-repos-0.0.1-0.20180418175107.ef4e12e.el7.centos.noarch.rpm || true 14 | tripleo-repos -b queens current ceph 15 | } >> express.log 16 | 17 | ############################################################################### 18 | echo "Install Virtualization Host + Virtual BMC, OpenvSwitch, git etc." 19 | { 20 | yum -y groupinstall 'Virtualization Host' 21 | yum -y install git python2-setuptools python-virtualbmc openvswitch virt-install libguestfs-tools libguestfs-xfs 22 | } >> express.log 23 | 24 | 25 | ############################################################################### 26 | echo "Enable nested virtualization." 27 | { 28 | cat << EOF > /etc/modprobe.d/kvm_intel.conf 29 | options kvm-intel nested=1 30 | options kvm-intel enable_shadow_vmcs=1 31 | options kvm-intel enable_apicv=1 32 | options kvm-intel ept=1 33 | EOF 34 | 35 | modprobe -r kvm_intel 36 | modprobe kvm_intel 37 | } >> express.log 2>&1 38 | 39 | ############################################################################### 40 | echo "Compile and install dhcrelay from ics-dhcp." 41 | { 42 | yum -y install gcc make 43 | useradd devuser 44 | sudo -u devuser curl -o /home/devuser/dhcp-4-3-6-p1.tar.gz https://www.isc.org/downloads/file/dhcp-4-3-6-p1/ 45 | sudo -u devuser tar xvzf /home/devuser/dhcp-4-3-6-p1.tar.gz -C /home/devuser/ 46 | cd /home/devuser/dhcp-4.3.6-P1/ 47 | sudo -u devuser ./configure --prefix=/usr/local 48 | sudo -u devuser make 49 | make install 50 | cd ~ 51 | } >> express.log 2>&1 52 | 53 | ############################################################################### 54 | echo "Cloning lab from git repo" 55 | { 56 | git clone https://github.com/redhat-openstack/tripleo-workshop.git 57 | } >> express.log 2>&1 58 | 59 | ############################################################################### 60 | echo "Deploy the config files" 61 | { 62 | scp -r ./tripleo-workshop/networking/virtual-baremetal-lab/root/* / 63 | chmod +x /usr/local/bin/generate_instackenv.py 64 | } >> express.log 65 | 66 | ############################################################################### 67 | echo "Restart networking and Firewall" 68 | { 69 | systemctl restart network 70 | systemctl restart firewalld 71 | } >> express.log 2>&1 72 | 73 | ############################################################################### 74 | echo "Enable IP Routing" 75 | { 76 | cat << EOF > /etc/sysctl.d/90-ip-forwarding.conf 77 | net.ipv4.ip_forward = 1 78 | EOF 79 | 80 | sysctl --system 81 | } >> express.log 2>&1 82 | 83 | ############################################################################### 84 | echo "Enable dhcp relay service on ctlplane networks." 85 | { 86 | systemctl daemon-reload 87 | systemctl enable dhcrelay.service 88 | systemctl start dhcrelay.service 89 | systemctl status dhcrelay.service 90 | } >> express.log 2>&1 91 | 92 | ############################################################################### 93 | echo "Create libvirt networks." 94 | { 95 | # Make sure libvirt is running 96 | systemctl status libvirtd.service || systemctl restart libvirtd.service 97 | cd /root/tripleo-workshop/networking/virtual-baremetal-lab/libvirt/networks/ 98 | bash create_networks.sh 99 | cd ~ 100 | } >> express.log 2>&1 101 | 102 | ############################################################################### 103 | echo "Create disks for vms." 104 | { 105 | cd /var/lib/libvirt/images/ 106 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-controller-0.qcow2 60G 107 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-controller-1.qcow2 60G 108 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-controller-2.qcow2 60G 109 | 110 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-compute1-0.qcow2 60G 111 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-compute2-0.qcow2 60G 112 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-compute3-0.qcow2 60G 113 | 114 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph1-0-root.qcow2 60G 115 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph1-0-osd0.qcow2 20G 116 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph1-0-osd1.qcow2 20G 117 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph1-0-osd2.qcow2 20G 118 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph1-0-osd3.qcow2 20G 119 | 120 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph2-0-root.qcow2 60G 121 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph2-0-osd0.qcow2 20G 122 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph2-0-osd1.qcow2 20G 123 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph2-0-osd2.qcow2 20G 124 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph2-0-osd3.qcow2 20G 125 | 126 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph3-0-root.qcow2 60G 127 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph3-0-osd0.qcow2 20G 128 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph3-0-osd1.qcow2 20G 129 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph3-0-osd2.qcow2 20G 130 | qemu-img create -f qcow2 -o preallocation=metadata overcloud-ceph3-0-osd3.qcow2 20G 131 | 132 | cd ~ 133 | } >> express.log 2>&1 134 | 135 | ############################################################################### 136 | echo "Create overcloud vms." 137 | { 138 | cd /root/tripleo-workshop/networking/virtual-baremetal-lab/libvirt/vms 139 | bash create_vms.sh 140 | 141 | cd ~ 142 | } >> express.log 2>&1 143 | 144 | ############################################################################### 145 | echo "Configure virtual BMC for overcloud nodes." 146 | { 147 | vbmc add --username admin --password password --port 6240 overcloud-controller-0 148 | vbmc add --username admin --password password --port 6241 overcloud-controller-1 149 | vbmc add --username admin --password password --port 6242 overcloud-controller-2 150 | vbmc add --username admin --password password --port 6243 overcloud-compute1-0 151 | vbmc add --username admin --password password --port 6244 overcloud-compute2-0 152 | vbmc add --username admin --password password --port 6245 overcloud-compute3-0 153 | vbmc add --username admin --password password --port 6246 overcloud-ceph1-0 154 | vbmc add --username admin --password password --port 6247 overcloud-ceph2-0 155 | vbmc add --username admin --password password --port 6248 overcloud-ceph3-0 156 | 157 | vbmc start overcloud-controller-0 158 | vbmc start overcloud-controller-1 159 | vbmc start overcloud-controller-2 160 | vbmc start overcloud-compute1-0 161 | vbmc start overcloud-compute2-0 162 | vbmc start overcloud-compute3-0 163 | vbmc start overcloud-ceph1-0 164 | vbmc start overcloud-ceph2-0 165 | vbmc start overcloud-ceph3-0 166 | } >> express.log 2>&1 167 | vbmc list 168 | 169 | 170 | ############################################################################### 171 | echo "Generate instack-env.json." 172 | /usr/local/bin/generate_instackenv.py > /root/instackenv.json 173 | 174 | ############################################################################### 175 | echo "Create undercloud vm." 176 | { 177 | cd /var/lib/libvirt/images/ 178 | # Download and decompress CentOS Cloud image 179 | #curl -O https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz 180 | curl -O http://10.12.50.1/pub/tripleo-masterclass/CentOS-7-x86_64-GenericCloud.qcow2.xz 181 | unxz CentOS-7-x86_64-GenericCloud.qcow2.xz 182 | 183 | # Create a new image for undercloud 184 | qemu-img create -f qcow2 netlab-undercloud.qcow2 40G 185 | 186 | # Clone and resize the CentOS cloud image to our 40G undercloud image 187 | virt-resize --expand /dev/sda1 CentOS-7-x86_64-GenericCloud.qcow2 netlab-undercloud.qcow2 188 | 189 | # Set the root password 190 | virt-customize -a netlab-undercloud.qcow2 --root-password password:Redhat01 191 | } >> express.log 2>&1 192 | 193 | # Create config drive 194 | 195 | mkdir -p /tmp/cloud-init-data/ 196 | cat << EOF > /tmp/cloud-init-data/meta-data 197 | instance-id: undercloud-instance-id 198 | local-hostname: undercloud.example.com 199 | network: 200 | version: 2 201 | ethernets: 202 | eth0: 203 | dhcp4: true 204 | EOF 205 | cat << EOF > /tmp/cloud-init-data/user-data 206 | #cloud-config 207 | disable_root: false 208 | ssh_authorized_keys: 209 | - $(cat ~/.ssh/id_rsa.pub) 210 | EOF 211 | 212 | { 213 | genisoimage -o netlab-undercloud-config.iso -V cidata -r \ 214 | -J /tmp/cloud-init-data/meta-data /tmp/cloud-init-data/user-data 215 | 216 | # Launch the undercloud vm 217 | virt-install --ram 16384 --vcpus 4 --os-variant centos7.0 \ 218 | --disk path=/var/lib/libvirt/images/netlab-undercloud.qcow2,device=disk,bus=virtio,format=qcow2 \ 219 | --disk path=/var/lib/libvirt/images/netlab-undercloud-config.iso,device=cdrom \ 220 | --import --noautoconsole --vnc \ 221 | --network network:default \ 222 | --network network:ctlplane,portgroup=ctlplane0 \ 223 | --name netlab-undercloud 224 | } >> express.log 2>&1 225 | 226 | # Get the IP address of the undercloud 227 | #sleep 30 228 | #undercloudip=$(virsh domifaddr undercloud | grep ipv4 | awk '{ print $4 }' | cut --fields=1 --delimiter='/') 229 | #echo "$undercloudip undercloud.example.com undercloud" >> /etc/hosts 230 | 231 | echo "########################################################################" 232 | echo "# DONE" 233 | echo "#" 234 | echo "# To get the undercloud ip - run: virsh domifaddr netlab-undercloud " 235 | 236 | 237 | 238 | 239 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/networks/create_networks.sh: -------------------------------------------------------------------------------- 1 | virsh net-define ovs-ctlplane.xml 2 | virsh net-autostart ctlplane 3 | virsh net-start ctlplane 4 | 5 | virsh net-define ovs-trunk.xml 6 | virsh net-autostart trunk 7 | virsh net-start trunk 8 | 9 | 10 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/networks/ovs-ctlplane.xml: -------------------------------------------------------------------------------- 1 | 2 | ctlplane 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/networks/ovs-trunk.xml: -------------------------------------------------------------------------------- 1 | 2 | trunk 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/create_vms.sh: -------------------------------------------------------------------------------- 1 | virsh define --file ./overcloud-controller-2.xml 2 | virsh define --file ./overcloud-controller-0.xml 3 | virsh define --file ./overcloud-controller-1.xml 4 | virsh define --file ./overcloud-compute1-0.xml 5 | virsh define --file ./overcloud-compute2-0.xml 6 | virsh define --file ./overcloud-compute3-0.xml 7 | virsh define --file ./overcloud-ceph1-0.xml 8 | virsh define --file ./overcloud-ceph2-0.xml 9 | virsh define --file ./overcloud-ceph3-0.xml 10 | 11 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-ceph1-0.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-ceph1-0 3 | 8388608 4 | 8388608 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-ceph2-0.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-ceph2-0 3 | 8388608 4 | 8388608 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-ceph3-0.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-ceph3-0 3 | 8388608 4 | 8388608 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-compute1-0.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-compute1-0 3 | 16777216 4 | 16777216 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-compute2-0.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-compute2-0 3 | 16777216 4 | 16777216 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-compute3-0.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-compute3-0 3 | 16777216 4 | 16777216 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-controller-0.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-controller-0 3 | 16777216 4 | 16777216 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-controller-1.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-controller-1 3 | 16777216 4 | 16777216 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/libvirt/vms/overcloud-controller-2.xml: -------------------------------------------------------------------------------- 1 | 2 | overcloud-controller-2 3 | 16777216 4 | 16777216 5 | 4 6 | 7 | hvm 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | /usr/libexec/qemu-kvm 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/firewalld/direct.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | [ ] 5 | [ -j overcloud_masquerade ] 6 | [ -s 172.20.0.0/16 -d 172.20.0.0/16 -j RETURN ] 7 | [ -s 172.20.0.0/16 -j MASQUERADE ] 8 | 9 | [ -i ctlplane0 -j ACCEPT ] 10 | [ -i ctlplane1 -j ACCEPT ] 11 | [ -i ctlplane2 -j ACCEPT ] 12 | [ -i ctlplane3 -j ACCEPT ] 13 | 14 | [ -i external0 -j ACCEPT ] 15 | [ -i external1 -j ACCEPT ] 16 | [ -i external2 -j ACCEPT ] 17 | [ -i external3 -j ACCEPT ] 18 | 19 | [ -i tenant0 -o tenant1 -j ACCEPT ] 20 | [ -i tenant0 -o tenant2 -j ACCEPT ] 21 | [ -i tenant0 -o tenant3 -j ACCEPT ] 22 | [ -i tenant1 -o tenant0 -j ACCEPT ] 23 | [ -i tenant1 -o tenant2 -j ACCEPT ] 24 | [ -i tenant1 -o tenant3 -j ACCEPT ] 25 | [ -i tenant2 -o tenant0 -j ACCEPT ] 26 | [ -i tenant2 -o tenant1 -j ACCEPT ] 27 | [ -i tenant2 -o tenant3 -j ACCEPT ] 28 | [ -i tenant3 -o tenant0 -j ACCEPT ] 29 | [ -i tenant3 -o tenant1 -j ACCEPT ] 30 | [ -i tenant3 -o tenant2 -j ACCEPT ] 31 | 32 | [ -i storage0 -o storage1 -j ACCEPT ] 33 | [ -i storage0 -o storage2 -j ACCEPT ] 34 | [ -i storage0 -o storage3 -j ACCEPT ] 35 | [ -i storage1 -o storage0 -j ACCEPT ] 36 | [ -i storage1 -o storage2 -j ACCEPT ] 37 | [ -i storage1 -o storage3 -j ACCEPT ] 38 | [ -i storage2 -o storage0 -j ACCEPT ] 39 | [ -i storage2 -o storage1 -j ACCEPT ] 40 | [ -i storage2 -o storage3 -j ACCEPT ] 41 | [ -i storage3 -o storage0 -j ACCEPT ] 42 | [ -i storage3 -o storage1 -j ACCEPT ] 43 | [ -i storage3 -o storage2 -j ACCEPT ] 44 | 45 | [ -i storagemgmt0 -o storagemgmt1 -j ACCEPT ] 46 | [ -i storagemgmt0 -o storagemgmt2 -j ACCEPT ] 47 | [ -i storagemgmt0 -o storagemgmt3 -j ACCEPT ] 48 | [ -i storagemgmt1 -o storagemgmt0 -j ACCEPT ] 49 | [ -i storagemgmt1 -o storagemgmt2 -j ACCEPT ] 50 | [ -i storagemgmt1 -o storagemgmt3 -j ACCEPT ] 51 | [ -i storagemgmt2 -o storagemgmt0 -j ACCEPT ] 52 | [ -i storagemgmt2 -o storagemgmt1 -j ACCEPT ] 53 | [ -i storagemgmt2 -o storagemgmt3 -j ACCEPT ] 54 | [ -i storagemgmt3 -o storagemgmt0 -j ACCEPT ] 55 | [ -i storagemgmt3 -o storagemgmt1 -j ACCEPT ] 56 | [ -i storagemgmt3 -o storagemgmt2 -j ACCEPT ] 57 | 58 | [ -i intapi0 -o intapi1 -j ACCEPT ] 59 | [ -i intapi0 -o intapi2 -j ACCEPT ] 60 | [ -i intapi0 -o intapi3 -j ACCEPT ] 61 | [ -i intapi1 -o intapi0 -j ACCEPT ] 62 | [ -i intapi1 -o intapi2 -j ACCEPT ] 63 | [ -i intapi1 -o intapi3 -j ACCEPT ] 64 | [ -i intapi2 -o intapi0 -j ACCEPT ] 65 | [ -i intapi2 -o intapi1 -j ACCEPT ] 66 | [ -i intapi2 -o intapi3 -j ACCEPT ] 67 | [ -i intapi3 -o intapi0 -j ACCEPT ] 68 | [ -i intapi3 -o intapi1 -j ACCEPT ] 69 | [ -i intapi3 -o intapi2 -j ACCEPT ] 70 | 71 | [ -i ctlplane0 -p udp -m udp --dport 67:68 --sport 67:68 -j ACCEPT ] 72 | [ -i ctlplane1 -p udp -m udp --dport 67:68 --sport 67:68 -j ACCEPT ] 73 | [ -i ctlplane2 -p udp -m udp --dport 67:68 --sport 67:68 -j ACCEPT ] 74 | [ -i ctlplane3 -p udp -m udp --dport 67:68 --sport 67:68 -j ACCEPT ] 75 | 76 | [ -p udp -m udp -m multiport --dports 6240:6248 -j ACCEPT ] 77 | 78 | 79 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-br-ctlplane: -------------------------------------------------------------------------------- 1 | DEVICE=br-ctlplane 2 | ONBOOT=yes 3 | DEVICETYPE=ovs 4 | TYPE=OVSBridge 5 | HOTPLUG=no 6 | BOOTPROTO=none 7 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-br-trunk: -------------------------------------------------------------------------------- 1 | DEVICE=br-trunk 2 | ONBOOT=yes 3 | DEVICETYPE=ovs 4 | TYPE=OVSBridge 5 | HOTPLUG=no 6 | BOOTPROTO=none 7 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-ctlplane0: -------------------------------------------------------------------------------- 1 | NAME=ctlplane0 2 | DEVICE=ctlplane0 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-ctlplane 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.0.62 10 | PREFIX=26 11 | OVS_OPTIONS="tag=600" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-ctlplane1: -------------------------------------------------------------------------------- 1 | NAME=ctlplane1 2 | DEVICE=ctlplane1 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-ctlplane 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.0.126 10 | PREFIX=26 11 | OVS_OPTIONS="tag=601" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-ctlplane2: -------------------------------------------------------------------------------- 1 | NAME=ctlplane2 2 | DEVICE=ctlplane2 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-ctlplane 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.0.190 10 | PREFIX=26 11 | OVS_OPTIONS="tag=602" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-ctlplane3: -------------------------------------------------------------------------------- 1 | NAME=ctlplane3 2 | DEVICE=ctlplane3 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-ctlplane 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.0.254 10 | PREFIX=26 11 | OVS_OPTIONS="tag=603" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-external1: -------------------------------------------------------------------------------- 1 | NAME=external1 2 | DEVICE=external1 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.2.126 10 | PREFIX=26 11 | OVS_OPTIONS="tag=621" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-intapi0: -------------------------------------------------------------------------------- 1 | NAME=intapi0 2 | DEVICE=intapi0 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.1.62 10 | PREFIX=26 11 | OVS_OPTIONS="tag=610" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-intapi1: -------------------------------------------------------------------------------- 1 | NAME=intapi1 2 | DEVICE=intapi1 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.1.126 10 | PREFIX=26 11 | OVS_OPTIONS="tag=611" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-intapi2: -------------------------------------------------------------------------------- 1 | NAME=intapi2 2 | DEVICE=intapi2 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.1.190 10 | PREFIX=26 11 | OVS_OPTIONS="tag=612" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-intapi3: -------------------------------------------------------------------------------- 1 | NAME=intapi3 2 | DEVICE=intapi3 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.1.254 10 | PREFIX=26 11 | OVS_OPTIONS="tag=613" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-storage0: -------------------------------------------------------------------------------- 1 | NAME=storage0 2 | DEVICE=storage0 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.3.62 10 | PREFIX=26 11 | OVS_OPTIONS="tag=630" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-storage1: -------------------------------------------------------------------------------- 1 | NAME=storage1 2 | DEVICE=storage1 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.3.126 10 | PREFIX=26 11 | OVS_OPTIONS="tag=631" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-storage2: -------------------------------------------------------------------------------- 1 | NAME=storage2 2 | DEVICE=storage2 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.3.190 10 | PREFIX=26 11 | OVS_OPTIONS="tag=632" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-storage3: -------------------------------------------------------------------------------- 1 | NAME=storage3 2 | DEVICE=storage3 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.3.254 10 | PREFIX=26 11 | OVS_OPTIONS="tag=633" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-storagemgmt0: -------------------------------------------------------------------------------- 1 | NAME=storagemgmt0 2 | DEVICE=storagemgmt0 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.4.62 10 | PREFIX=26 11 | OVS_OPTIONS="tag=640" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-storagemgmt1: -------------------------------------------------------------------------------- 1 | NAME=storagemgmt1 2 | DEVICE=storagemgmt1 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.4.126 10 | PREFIX=26 11 | OVS_OPTIONS="tag=641" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-storagemgmt2: -------------------------------------------------------------------------------- 1 | NAME=storagemgmt2 2 | DEVICE=storagemgmt2 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.4.190 10 | PREFIX=26 11 | OVS_OPTIONS="tag=642" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-storagemgmt3: -------------------------------------------------------------------------------- 1 | NAME=storagemgmt3 2 | DEVICE=storagemgmt3 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.4.254 10 | PREFIX=26 11 | OVS_OPTIONS="tag=643" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-tenant0: -------------------------------------------------------------------------------- 1 | NAME=tenant0 2 | DEVICE=tenant0 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.5.62 10 | PREFIX=26 11 | OVS_OPTIONS="tag=650" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-tenant1: -------------------------------------------------------------------------------- 1 | NAME=tenant1 2 | DEVICE=tenant1 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.5.126 10 | PREFIX=26 11 | OVS_OPTIONS="tag=651" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-tenant2: -------------------------------------------------------------------------------- 1 | NAME=tenant2 2 | DEVICE=tenant2 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.5.190 10 | PREFIX=26 11 | OVS_OPTIONS="tag=652" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/sysconfig/network-scripts/ifcfg-tenant3: -------------------------------------------------------------------------------- 1 | NAME=tenant3 2 | DEVICE=tenant3 3 | ONBOOT=yes 4 | DEVICETYPE=ovs 5 | TYPE=OVSIntPort 6 | OVS_BRIDGE=br-trunk 7 | IPV6INIT=no 8 | BOOTPROTO=static 9 | IPADDR=172.20.5.254 10 | PREFIX=26 11 | OVS_OPTIONS="tag=653" 12 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/etc/systemd/system/dhcrelay.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=DHCP Relay Agent Daemon 3 | Documentation=man:dhcrelay(8) 4 | Wants=network-online.target 5 | After=network-online.target 6 | 7 | [Service] 8 | Type=simple 9 | # 172.20.0.1 = undercloud introspection dhcp server 10 | # 172.20.0.10 = undercloud neutron dhcp server 11 | ExecStart=/usr/local/sbin/dhcrelay -d --no-pid 172.20.0.10 172.20.0.1 -iu ctlplane0 -id ctlplane1 -id ctlplane2 -id ctlplane3 12 | StandardError=null 13 | 14 | [Install] 15 | WantedBy=multi-user.target 16 | 17 | -------------------------------------------------------------------------------- /networking/virtual-baremetal-lab/root/usr/local/bin/generate_instackenv.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | import json 4 | import libvirt 5 | from xml.dom import minidom 6 | 7 | NODE_PREFIX = 'overcloud' 8 | VBMC_HOST = '192.168.122.1' 9 | VBMC_USER = 'admin' 10 | VBMC_PASSWORD = 'password' 11 | 12 | VBMC_PORT_MAP = {'overcloud-controller-0': 6240, 13 | 'overcloud-controller-1': 6241, 14 | 'overcloud-controller-2': 6242, 15 | 'overcloud-compute1-0': 6243, 16 | 'overcloud-compute2-0': 6244, 17 | 'overcloud-compute3-0': 6245, 18 | 'overcloud-ceph1-0': 6246, 19 | 'overcloud-ceph2-0': 6247, 20 | 'overcloud-ceph3-0': 6248} 21 | 22 | instackenv = {'nodes': []} 23 | nodes = instackenv['nodes'] 24 | data_format = '"pm_type": "pxe_ipmitool", ' \ 25 | '"mac": ["{mac}"], ' \ 26 | '"pm_user": "' + VBMC_USER + '", ' \ 27 | '"pm_password": "' + VBMC_PASSWORD + '", ' \ 28 | '"pm_addr": "' + VBMC_HOST + '", ' \ 29 | '"pm_port": "{vbmc_port}", ' \ 30 | '"name": "{domain_name}"' 31 | 32 | 33 | conn = libvirt.openReadOnly(None) 34 | domains = conn.listAllDomains(0) 35 | for domain in domains: 36 | if domain.name().startswith(NODE_PREFIX): 37 | raw_xml = domain.XMLDesc() 38 | xml = minidom.parseString(raw_xml) 39 | mac = xml.getElementsByTagName('interface')[0].getElementsByTagName('mac')[0].attributes['address'].value 40 | data = data_format.format(mac=mac, 41 | vbmc_port=VBMC_PORT_MAP[domain.name()], 42 | domain_name=domain.name()) 43 | nodes.append(json.loads('{' + data + '}')) 44 | 45 | print json.dumps(instackenv, indent=4, sort_keys=True) -------------------------------------------------------------------------------- /oooq/config-ipv6.yaml: -------------------------------------------------------------------------------- 1 | undercloud_generate_service_certificate: false 2 | undercloud_clean_nodes: true 3 | ssl_overcloud: false 4 | undercloud_docker_registry_mirror: http://10.12.50.1:5000 5 | step_introspect: false 6 | containerized_overcloud: true 7 | enable_pacemaker: true 8 | overcloud_ipv6: true 9 | 10 | undercloud_enable_ui: false 11 | 12 | telemetry_args: >- 13 | -e {{ overcloud_templates_path }}/environments/disable-telemetry.yaml 14 | 15 | extra_args: >- 16 | --ntp-server clock.redhat.com 17 | test_ping: true 18 | modify_image_vc_verbose: true 19 | modify_image_vc_root_password: redhat 20 | 21 | # Use local mirror for images 22 | overcloud_image_url: http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/overcloud-full.tar 23 | ipa_image_url: http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/ironic-python-agent.tar 24 | undercloud_image_url: http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/undercloud.qcow2 25 | 26 | undercloud_network_cidr: 192.168.24.0/24 27 | #undercloud_network_gateway: 192.168.24.1 28 | #undercloud_undercloud_public_vip: 192.168.24.2 29 | #undercloud_undercloud_admin_vip: 192.168.24.3 30 | #undercloud_local_interface: eth1 31 | #undercloud_masquerade_network: 192.168.24.0/24 32 | #undercloud_dhcp_start: 192.168.24.5 33 | #undercloud_dhcp_end: 192.168.24.24 34 | #undercloud_inspection_iprange: 192.168.24.25,192.168.24.39 35 | #undercloud_external_network_cidr: 10.0.0.0/24 36 | 37 | 38 | overcloud_dns_servers: ["10.12.50.1" ] 39 | network_environment_args: 40 | ExternalInterfaceDefaultRoute: "2001:db8:fd00:1000::1" 41 | ExternalNetCidr: "2001:db8:fd00:1000::/64" 42 | ExternalAllocationPools: [{'end': '2001:db8:fd00:1000:ffff:ffff:ffff:fffe', 'start': '2001:db8:fd00:1000::10'}] 43 | NeutronExternalNetworkBridge: "" 44 | ControlPlaneSubnetCidr: "{{ undercloud_network_cidr|ipaddr('prefix') }}" 45 | ControlPlaneDefaultRoute: "{{ undercloud_network_cidr|nthhost(1) }}" 46 | EC2MetadataIp: "{{ undercloud_network_cidr|nthhost(1) }}" 47 | InternalApiNetCidr: "fd00:fd00:fd00:2000::/64" 48 | InternalApiAllocationPools: [{"start": "fd00:fd00:fd00:2000::10", "end": "fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe"}] 49 | StorageNetCidr: "fd00:fd00:fd00:3000::/64" 50 | StorageAllocationPools: [{"start": "fd00:fd00:fd00:3000::10", "end": "fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe"}] 51 | StorageMgmtNetCidr: "fd00:fd00:fd00:4000::/64" 52 | StorageMgmtAllocationPools: [{"start": "fd00:fd00:fd00:4000::10", "end": "fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe"}] 53 | TenantNetCidr: 172.16.0.0/24 54 | TenantAllocationPools: [{"start": "172.16.0.10", "end": "172.16.0.250"}] 55 | DnsServers: "{{ overcloud_dns_servers }}" 56 | PublicVirtualFixedIPs: [{ "ip_address": "{{ undercloud_external_network_cidr|nthhost(5) }}" }] 57 | 58 | network_isolation: true 59 | network_isolation_type: 'single-nic-vlans' 60 | network_isolation_args: >- 61 | -e {{ overcloud_templates_path }}/environments/network-isolation-v6.yaml 62 | -e {{ overcloud_templates_path }}/environments/net-single-nic-with-vlans-v6.yaml 63 | -e {{ working_dir }}/network-environment.yaml 64 | 65 | topology: >- 66 | --compute-scale 1 67 | --control-scale 3 68 | --ceph-storage-scale 0 69 | -------------------------------------------------------------------------------- /oooq/config.yaml: -------------------------------------------------------------------------------- 1 | undercloud_generate_service_certificate: false 2 | undercloud_clean_nodes: true 3 | ssl_overcloud: false 4 | undercloud_docker_registry_mirror: http://10.12.50.1:5000 5 | step_introspect: false 6 | containerized_overcloud: true 7 | enable_pacemaker: true 8 | 9 | undercloud_enable_ui: false 10 | 11 | telemetry_args: >- 12 | -e {{ overcloud_templates_path }}/environments/disable-telemetry.yaml 13 | 14 | extra_args: >- 15 | --ntp-server clock.redhat.com 16 | test_ping: true 17 | modify_image_vc_verbose: true 18 | modify_image_vc_root_password: redhat 19 | 20 | # Use local mirror for images 21 | overcloud_image_url: http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/overcloud-full.tar 22 | ipa_image_url: http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/ironic-python-agent.tar 23 | undercloud_image_url: http://10.12.50.1/pub/tripleo-masterclass/queens-tripleo/undercloud.qcow2 24 | 25 | undercloud_network_cidr: 192.168.24.0/24 26 | #undercloud_network_gateway: 192.168.24.1 27 | #undercloud_undercloud_public_vip: 192.168.24.2 28 | #undercloud_undercloud_admin_vip: 192.168.24.3 29 | #undercloud_local_interface: eth1 30 | #undercloud_masquerade_network: 192.168.24.0/24 31 | #undercloud_dhcp_start: 192.168.24.5 32 | #undercloud_dhcp_end: 192.168.24.24 33 | #undercloud_inspection_iprange: 192.168.24.25,192.168.24.39 34 | #undercloud_external_network_cidr: 10.0.0.0/24 35 | 36 | 37 | overcloud_dns_servers: ["10.12.50.1" ] 38 | network_environment_args: 39 | ExternalNetCidr: "{{ undercloud_external_network_cidr }}" 40 | ExternalAllocationPools: > 41 | [{'start': '{{ undercloud_external_network_cidr|nthhost(10) }}', 42 | 'end': '{{ undercloud_external_network_cidr|nthhost(50) }}'}] 43 | NeutronExternalNetworkBridge: "" 44 | ControlPlaneSubnetCidr: "{{ undercloud_network_cidr|ipaddr('prefix') }}" 45 | ControlPlaneDefaultRoute: "{{ undercloud_network_cidr|nthhost(1) }}" 46 | EC2MetadataIp: "{{ undercloud_network_cidr|nthhost(1) }}" 47 | ExternalInterfaceDefaultRoute: "{{ undercloud_external_network_cidr|nthhost(1) }}" 48 | InternalApiNetCidr: 172.20.0.0/24 49 | InternalApiAllocationPools: [{"start": "172.20.0.10", "end": "172.20.0.250"}] 50 | StorageNetCidr: 172.18.0.0/24 51 | StorageAllocationPools: [{"start": "172.18.0.10", "end": "172.18.0.250"}] 52 | StorageMgmtNetCidr: 172.19.0.0/24 53 | StorageMgmtAllocationPools: [{"start": "172.19.0.10", "end": "172.19.0.250"}] 54 | TenantNetCidr: 172.16.0.0/24 55 | TenantAllocationPools: [{"start": "172.16.0.10", "end": "172.16.0.250"}] 56 | DnsServers: "{{ overcloud_dns_servers }}" 57 | PublicVirtualFixedIPs: [{ "ip_address": "{{ undercloud_external_network_cidr|nthhost(5) }}" }] 58 | 59 | network_isolation: true 60 | network_isolation_type: 'single-nic-vlans' 61 | topology: >- 62 | --compute-scale 1 63 | --control-scale 3 64 | --ceph-storage-scale 0 65 | -------------------------------------------------------------------------------- /oooq/nodes.yaml: -------------------------------------------------------------------------------- 1 | # Deploy a big HA OpenStack environment 2 | # 3 | # This will require (8192 * 6) == approx. 48GB for the overcloud 4 | # nodes, plus another 12GB for the undercloud, for a total of around 5 | # 60GB. 6 | control_memory: 12192 7 | compute_memory: 12192 8 | ceph_memory: 8192 9 | undercloud_memory: 28288 10 | undercloud_disk: 250 11 | 12 | # Giving the undercloud additional CPUs can greatly improve heat's 13 | # performance (and result in a shorter deploy time). 14 | # Using a total of 10 vcpus (1 is the default for overcloud nodes) 15 | undercloud_vcpu: 8 16 | 17 | # Since HA has more machines, doesn't we can set the cpu for controllers and 18 | # compute nodes to 1 19 | extradisks_size: 55G 20 | default_vcpu: 2 21 | flavors: 22 | undercloud: 23 | memory: '{{undercloud_memory|default(undercloud_memory)}}' 24 | disk: '{{undercloud_disk|default(undercloud_disk)}}' 25 | vcpu: '{{undercloud_vcpu|default(undercloud_vcpu)}}' 26 | 27 | compute: 28 | memory: '{{compute_memory|default(default_memory)}}' 29 | disk: '{{compute_disk|default(default_disk)}}' 30 | vcpu: '{{compute_vcpu|default(default_vcpu)}}' 31 | 32 | control: 33 | memory: '{{control_memory|default(default_memory)}}' 34 | disk: '{{control_disk|default(default_disk)}}' 35 | vcpu: '{{control_vcpu|default(default_vcpu)}}' 36 | 37 | ceph: 38 | memory: '{{ceph_memory|default(default_memory)}}' 39 | disk: '{{ceph_disk|default(default_disk)}}' 40 | vcpu: '{{ceph_vcpu|default(default_vcpu)}}' 41 | extradisks: true 42 | 43 | overcloud_nodes: 44 | - name: control_0 45 | flavor: control 46 | virtualbmc_port: 6230 47 | 48 | - name: control_1 49 | flavor: control 50 | virtualbmc_port: 6231 51 | 52 | - name: control_2 53 | flavor: control 54 | virtualbmc_port: 6232 55 | 56 | - name: compute_0 57 | flavor: compute 58 | virtualbmc_port: 6233 59 | 60 | - name: ceph_0 61 | flavor: ceph 62 | virtualbmc_port: 6234 63 | 64 | - name: ceph_1 65 | flavor: ceph 66 | virtualbmc_port: 6235 67 | 68 | - name: ceph_2 69 | flavor: ceph 70 | virtualbmc_port: 6244 71 | 72 | node_count: 7 73 | -------------------------------------------------------------------------------- /oooq/oooq-lab.txt: -------------------------------------------------------------------------------- 1 | 1. Log on your machine as root, create the 'oooq' user and set a password for it, install tmux, vim, editor 2 | 3 | useradd oooq 4 | echo "Redhat123" | passwd --stdin oooq 5 | 6 | # Needed for quickstart.sh --install-deps 7 | echo "oooq ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/oooq 8 | sudo chmod 0440 /etc/sudoers.d/oooq 9 | 10 | yum install -y tmux vim libguestfs-tools wget 11 | 12 | # Due to https://bugzilla.redhat.com/show_bug.cgi?id=1581364 libvirt issue 13 | mkdir rpms; pushd rpms 14 | wget -r -nd -l1 -v --no-parent http://file.rdu.redhat.com/~mbaldess/libvirt-rpms/ 15 | rpm -Fvh *rpm 16 | popd 17 | systemctl restart libvirtd 18 | 19 | 2. Log in as oooq (copy your ssh pub key to that user), start tmux 20 | ssh-keygen -f ~/.ssh/id_rsa -t rsa -N '' 21 | ssh-copy-id root@127.0.0.2 22 | 23 | 3. Download quickstart.sh: 24 | curl -O https://raw.githubusercontent.com/openstack/tripleo-quickstart/master/quickstart.sh 25 | chmod +x quickstart.sh 26 | ./quickstart.sh --install-deps 27 | 28 | sudo rm -f /etc/sudoers.d/oooq 29 | 30 | 4. Deploy oooq pointing it to 127.0.0.2 31 | Note: If your machine is not in Rhys' lab then, depending where the machine is, the 32 | "undercloud_docker_registry_mirror" and "*_image_url" settings might need tweaking. 33 | 34 | ./quickstart.sh -R queens --nodes nodes.yaml --config config.yaml 127.0.0.2 35 | 36 | The above takes ~35 minutes on the lab hardware. 37 | 38 | You should get the following VMs: 39 | 3 controllers 40 | 1 compute 41 | 3 ceph storage nodes 42 | 43 | 5. Fetch all containers and generate a fencing.yaml 44 | Log on the undercloud (ssh -F ~/.quickstart/ssh.config.ansible undercloud) and run: 45 | overcloud-prep-containers.sh 46 | openstack overcloud generate fencing --ipmi-lanplus instackenv.json --output fencing.yaml 47 | 48 | Also add '-e /home/stack/fencing.yaml' to the overcloud-deploy.sh script. 49 | 50 | 6. Deploy the overcloud: 51 | Run ./overcloud-deploy.sh. 52 | 53 | It will fail because the default tags used by quickstart.sh do not create 54 | ~/network-environment.yaml (see https://bugs.launchpad.net/tripleo/+bug/1737602 for more info) 55 | 56 | How on earth am I supposed to know which tags quickstart.sh will run? 57 | ./quickstart.sh --dry-run ... 58 | 59 | 7. Let's execute only that step only: 60 | ./quickstart.sh --retain-inventory --teardown none --tags 'overcloud-prep-config' -R queens --nodes nodes.yaml --config config.yaml 127.0.0.2 61 | 62 | By adding --retain-inventory and --teardown none we force it to reuse the work done until now. 63 | Now we should have a network-environment.yaml created on the undercloud 64 | 65 | 8. Retry the deployment via ./overcloud-deploy.sh 66 | Barring errors we should get a CREATE_COMPLETE 67 | 68 | A full successful deployment lasts around ~45mins. NB: If you check 'pcs status' the stonith devices will be stopped. why? 69 | 70 | 9. Let's validate that VMs can actually start: 71 | ./quickstart.sh --retain-inventory --teardown none --tags 'overcloud-validate' -R queens --nodes nodes.yaml --config config.yaml 127.0.0.2 72 | 73 | This will spin up a VM and confirm (or not) if the overcloud is working okay. 74 | -------------------------------------------------------------------------------- /upgrade/01-get-pike-templates.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | cd $HOME 5 | 6 | git clone -b stable/pike https://git.openstack.org/openstack/tripleo-heat-templates tht-pike 7 | 8 | echo > basic-deployment.yaml 'resource_registry: 9 | OS::TripleO::Services::Ipsec: OS::Heat::None 10 | OS::TripleO::Services::OsloMessagingRpc: OS::Heat::None 11 | OS::TripleO::Services::OsloMessagingNotify: OS::Heat::None 12 | 13 | parameter_defaults: 14 | DnsServers: ["192.168.23.1"] 15 | 16 | ControllerImage: overcloud-full-pike 17 | controllerImage: overcloud-full-pike 18 | NovaImage: overcloud-full-pike 19 | ComputeImage: overcloud-full-pike 20 | ControllerServices: 21 | - OS::TripleO::Services::CACerts 22 | - OS::TripleO::Services::Clustercheck 23 | - OS::TripleO::Services::Docker 24 | - OS::TripleO::Services::GlanceApi 25 | - OS::TripleO::Services::HAproxy 26 | - OS::TripleO::Services::Ipsec 27 | - OS::TripleO::Services::Iscsid 28 | - OS::TripleO::Services::Keepalived 29 | - OS::TripleO::Services::Kernel 30 | - OS::TripleO::Services::Keystone 31 | - OS::TripleO::Services::Memcached 32 | - OS::TripleO::Services::MySQL 33 | - OS::TripleO::Services::MySQLClient 34 | - OS::TripleO::Services::NeutronCorePlugin 35 | - OS::TripleO::Services::NeutronApi 36 | - OS::TripleO::Services::NeutronDhcpAgent 37 | - OS::TripleO::Services::NeutronL3Agent 38 | - OS::TripleO::Services::NeutronMetadataAgent 39 | - OS::TripleO::Services::NeutronOvsAgent 40 | - OS::TripleO::Services::NovaApi 41 | - OS::TripleO::Services::NovaConductor 42 | - OS::TripleO::Services::NovaMetadata 43 | - OS::TripleO::Services::NovaPlacement 44 | - OS::TripleO::Services::NovaScheduler 45 | - OS::TripleO::Services::Ntp 46 | - OS::TripleO::Services::RabbitMQ 47 | - OS::TripleO::Services::Pacemaker 48 | - OS::TripleO::Services::Sshd 49 | - OS::TripleO::Services::SwiftProxy 50 | - OS::TripleO::Services::SwiftDispersion 51 | - OS::TripleO::Services::SwiftRingBuilder 52 | - OS::TripleO::Services::SwiftStorage 53 | - OS::TripleO::Services::Timezone 54 | - OS::TripleO::Services::TripleoFirewall 55 | - OS::TripleO::Services::TripleoPackages 56 | ComputeServices: 57 | - OS::TripleO::Services::CACerts 58 | - OS::TripleO::Services::ComputeNeutronCorePlugin 59 | - OS::TripleO::Services::ComputeNeutronOvsAgent 60 | - OS::TripleO::Services::Docker 61 | - OS::TripleO::Services::Ipsec 62 | - OS::TripleO::Services::Iscsid 63 | - OS::TripleO::Services::Kernel 64 | - OS::TripleO::Services::MySQLClient 65 | - OS::TripleO::Services::NovaCompute 66 | - OS::TripleO::Services::NovaLibvirt 67 | - OS::TripleO::Services::NovaMigrationTarget 68 | - OS::TripleO::Services::Ntp 69 | - OS::TripleO::Services::Sshd 70 | - OS::TripleO::Services::Timezone 71 | - OS::TripleO::Services::TripleoFirewall 72 | - OS::TripleO::Services::TripleoPackages 73 | ' 74 | -------------------------------------------------------------------------------- /upgrade/02-get-pike-images.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | cd $HOME 5 | 6 | RELEASE=pike 7 | THT="$HOME/tht-${RELEASE}" 8 | 9 | IMAGE_LOCATION="http://10.12.50.1/pub/tripleo-masterclass/pike-tripleo/overcloud-full.tar" 10 | # IMAGE_LOCATION="https://images.rdoproject.org/pike/delorean/current-tripleo/overcloud-full.tar" 11 | 12 | mkdir overcloud-full-pike 13 | pushd overcloud-full-pike 14 | curl -O "$IMAGE_LOCATION" 15 | tar -xvf overcloud-full.tar 16 | mv overcloud-full{,-pike}.qcow2 17 | mv overcloud-full{,-pike}.initrd 18 | mv overcloud-full{,-pike}.vmlinuz 19 | ln -s ../ironic-python-agent.initramfs 20 | ln -s ../ironic-python-agent.kernel 21 | openstack overcloud image upload --os-image-name overcloud-full-pike.qcow2 --image-path $HOME/overcloud-full-pike 22 | popd 23 | 24 | curl -o ${RELEASE}-container-images-template.yaml.j2 https://raw.githubusercontent.com/openstack/tripleo-common/stable/${RELEASE}/container-images/overcloud_containers.yaml.j2 25 | 26 | openstack overcloud container image prepare \ 27 | --template-file ${RELEASE}-container-images-template.yaml.j2 \ 28 | --namespace tripleo${RELEASE} \ 29 | --tag current-tripleo \ 30 | --push-destination 192.168.24.1:8787/tripleo${RELEASE} \ 31 | --output-images-file ~/${RELEASE}-container-images.yaml \ 32 | -e $THT/environments/docker.yaml \ 33 | -e $THT/environments/docker-ha.yaml \ 34 | -e basic-deployment.yaml \ 35 | 36 | openstack overcloud container image upload \ 37 | --debug \ 38 | --config-file ~/${RELEASE}-container-images.yaml \ 39 | 40 | openstack overcloud container image prepare \ 41 | --namespace 192.168.24.1:8787/tripleo${RELEASE} \ 42 | --tag current-tripleo \ 43 | --output-env-file ~/${RELEASE}-container-params.yaml \ 44 | -e $THT/environments/docker.yaml \ 45 | -e $THT/environments/docker-ha.yaml \ 46 | -e basic-deployment.yaml \ 47 | -------------------------------------------------------------------------------- /upgrade/03-deploy-pike-overcloud.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source ~/stackrc 4 | 5 | set -euxo pipefail 6 | cd $HOME 7 | 8 | RELEASE=pike 9 | THT="$HOME/tht-${RELEASE}" 10 | 11 | if [ -z "${NTP_SERVER:-}" ]; then 12 | echo "Set NTP_SERVER" 13 | exit 1 14 | fi 15 | 16 | openstack overcloud deploy \ 17 | --templates $THT \ 18 | --libvirt-type qemu \ 19 | -e $THT/environments/docker.yaml \ 20 | -e $THT/environments/docker-ha.yaml \ 21 | -e $THT/environments/low-memory-usage.yaml \ 22 | -e $THT/environments/debug.yaml \ 23 | -e $HOME/basic-deployment.yaml \ 24 | -e $HOME/${RELEASE}-container-params.yaml \ 25 | --control-scale 3 \ 26 | --compute-scale 1 \ 27 | --ntp-server "$NTP_SERVER" \ 28 | 29 | # --no-config-download # only for master undercloud 30 | -------------------------------------------------------------------------------- /upgrade/04-get-queens-images.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euxo pipefail 4 | cd $HOME 5 | 6 | RELEASE=queens 7 | THT="/usr/share/openstack-tripleo-heat-templates" 8 | 9 | openstack overcloud container image prepare \ 10 | --namespace tripleo${RELEASE} \ 11 | --tag current-tripleo \ 12 | --push-destination 192.168.24.1:8787/tripleo${RELEASE} \ 13 | --output-images-file ~/${RELEASE}-container-images.yaml \ 14 | -e $THT/environments/docker.yaml \ 15 | -e $THT/environments/docker-ha.yaml \ 16 | -e basic-deployment.yaml \ 17 | 18 | openstack overcloud container image upload \ 19 | --debug \ 20 | --config-file ~/${RELEASE}-container-images.yaml \ 21 | 22 | openstack overcloud container image prepare \ 23 | --namespace 192.168.24.1:8787/tripleo${RELEASE} \ 24 | --tag current-tripleo \ 25 | --output-env-file ~/${RELEASE}-container-params.yaml \ 26 | -e $THT/environments/docker.yaml \ 27 | -e $THT/environments/docker-ha.yaml \ 28 | -e basic-deployment.yaml \ 29 | -------------------------------------------------------------------------------- /upgrade/05-queens-upgrade-prepare.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source ~/stackrc 4 | 5 | set -euxo pipefail 6 | cd $HOME 7 | 8 | RELEASE=queens 9 | THT="/usr/share/openstack-tripleo-heat-templates" 10 | 11 | if [ -z "${NTP_SERVER:-}" ]; then 12 | echo "Set NTP_SERVER" 13 | exit 1 14 | fi 15 | 16 | echo > ${RELEASE}-upgrade-repos.yaml ' 17 | parameter_defaults: 18 | UpgradeInitCommand: | 19 | yum -y install https://trunk.rdoproject.org/centos7/current/python2-tripleo-repos-0.0.1-0.20180418175107.ef4e12e.el7.centos.noarch.rpm 20 | tripleo-repos -b queens current 21 | yum clean all 22 | ' 23 | 24 | openstack overcloud upgrade prepare \ 25 | --templates $THT \ 26 | --libvirt-type qemu \ 27 | -e $THT/environments/docker.yaml \ 28 | -e $THT/environments/docker-ha.yaml \ 29 | -e $THT/environments/low-memory-usage.yaml \ 30 | -e $THT/environments/debug.yaml \ 31 | -e $HOME/basic-deployment.yaml \ 32 | -e $HOME/${RELEASE}-container-params.yaml \ 33 | -e $HOME/${RELEASE}-upgrade-repos.yaml \ 34 | --control-scale 3 \ 35 | --compute-scale 1 \ 36 | --ntp-server "$NTP_SERVER" \ 37 | 38 | # --no-config-download # only for master undercloud 39 | -------------------------------------------------------------------------------- /upgrade/06-queens-upgrade-run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source ~/stackrc 4 | 5 | set -euxo pipefail 6 | cd $HOME 7 | 8 | openstack overcloud upgrade run --roles Controller 9 | 10 | openstack overcloud upgrade run --nodes overcloud-novacompute-0 11 | 12 | # add --skip-tags validation if re-running after failure 13 | # to not fail because services are stopped 14 | -------------------------------------------------------------------------------- /upgrade/07-queens-upgrade-converge.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | source ~/stackrc 4 | 5 | set -euxo pipefail 6 | cd $HOME 7 | 8 | RELEASE=queens 9 | THT="/usr/share/openstack-tripleo-heat-templates" 10 | 11 | if [ -z "${NTP_SERVER:-}" ]; then 12 | echo "Set NTP_SERVER" 13 | exit 1 14 | fi 15 | 16 | openstack overcloud upgrade converge \ 17 | --templates $THT \ 18 | --libvirt-type qemu \ 19 | -e $THT/environments/docker.yaml \ 20 | -e $THT/environments/docker-ha.yaml \ 21 | -e $THT/environments/low-memory-usage.yaml \ 22 | -e $THT/environments/debug.yaml \ 23 | -e $HOME/basic-deployment.yaml \ 24 | -e $HOME/${RELEASE}-container-params.yaml \ 25 | --control-scale 3 \ 26 | --compute-scale 1 \ 27 | --ntp-server "$NTP_SERVER" \ 28 | 29 | # --no-config-download # only for master undercloud 30 | -------------------------------------------------------------------------------- /upgrade/README.md: -------------------------------------------------------------------------------- 1 | Upgrade lab 2 | =========== 3 | 4 | Prerequisites 5 | ------------- 6 | 7 | * Have a deployed stable/queens undercloud with free nodes for at 8 | least 3 controllers and 1 compute. 9 | 10 | Recommendations 11 | --------------- 12 | 13 | You could in theory just run the scripts, but it's recommended to open 14 | them and run the commands manually to get more familiarity with the 15 | workflow. 16 | 17 | Steps 18 | ----- 19 | 20 | * `01-get-pike-templates.sh` - Fetch Pike tripleo-heat-templates and 21 | create an environment file with definition of the Pike overcloud. 22 | 23 | * `02-get-pike-images.sh` - Fetch Pike overcloud machine image and 24 | Pike container images. 25 | 26 | * `03-deploy-pike-overcloud.sh` - Deploy Pike overcloud using Queens 27 | undercloud. 28 | 29 | * `04-get-queens-images.sh` - Fetch Queens container images. 30 | 31 | * `05-queens-upgrade-prepare.sh` - Run `upgrade prepare` for upgrade 32 | to Queens. 33 | 34 | * `06-queens-upgrade-run.sh` - Upgrade to Queens, first all 35 | controllers, then compute. 36 | 37 | * `07-queens-upgrade-converge.sh` - Run `upgrade converge`, concluding 38 | the upgrade to Queens. 39 | --------------------------------------------------------------------------------