From 52e6d67924beb90bcf2e39a6a4ba2b7f4b796423 Mon Sep 17 00:00:00 2001 From: Raoul Scarazzini Date: Thu, 23 Feb 2017 08:11:40 -0500 Subject: [PATCH] Add ethernet support on external network Today when we need to configure the external network on the undercloud we can only set an ovs device with type OVSIntPort. This commit makes you able to set a device as it is (so without any vlan or additional ovs options), like this: undercloud_networks: external: address: 172.20.0.254 netmask: 255.255.255.0 device_type: ethernet device_name: eth2 Change-Id: I0e57891d845bde21a42746b2babb55c75b336ee7 --- roles/overcloud-prep-network/README.md | 60 ++++++++++++++++--- .../templates/overcloud-prep-network.sh.j2 | 15 ++++- 2 files changed, 67 insertions(+), 8 deletions(-) diff --git a/roles/overcloud-prep-network/README.md b/roles/overcloud-prep-network/README.md index 6a5bb14ca..2e0b757ce 100644 --- a/roles/overcloud-prep-network/README.md +++ b/roles/overcloud-prep-network/README.md @@ -1,27 +1,73 @@ Role Name ========= -An Ansible role to copy configuration files to the undercloud prior to deployment. +An Ansible role to copy configuration files to the undercloud prior to +deployment. Requirements ------------ -This playbook expects that the undercloud has been installed and setup using one of the roles relevant to baremetal overcloud deployments. +This playbook expects that the undercloud has been installed and setup using +one of the roles relevant to baremetal overcloud deployments. Role Variables -------------- **Note:** Make sure to include all environment file and options from your [initial Overcloud creation](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/7/html/Director_Installation_and_Usage/sect-Scaling_the_Overcloud.html). -- working_dir: <'/home/stack'> -- working directory for the role. Assumes stackrc file is present at this location -- baremetal_instackenv: <"{{ working_dir }}/instackenv.json"> -- location of instackenv.json to copy over -- baremetal_network_environment: <"{{ working_dir }}/network-isolation.yml"> -- location of network-environment file to copy over -- undercloud_type: -- can be overwritten with values like 'baremetal' or 'ovb' +- working_dir: <'/home/stack'> -- working directory for the role. Assumes +stackrc file is present at this location +- baremetal_instackenv: <"{{ working_dir }}/instackenv.json"> -- location of +instackenv.json to copy over +- baremetal_network_environment: <"{{ working_dir }}/network-isolation.yml"> +-- location of network-environment file to copy over +- undercloud_type: -- can be overwritten with values like 'baremetal' + or 'ovb' +- undercloud_networks: by default an external network is defined by + tripleo-quickstart, as follows: + + undercloud_networks: + external: + address: "{{ undercloud_external_network_cidr|nthhost(1) }}" + netmask: "{{ undercloud_external_network_cidr|ipaddr('netmask') }}" + address6: "{{ undercloud_external_network_cidr6|nthhost(1) }}" + device_type: ovs + type: OVSIntPort + ovs_bridge: br-ctlplane + ovs_options: '"tag=10"' + tag: 10 + + But it is possible to override this, when specific vlan options are needed: + + undercloud_networks: + external: + address: 172.20.0.254 + netmask: 255.255.255.0 + device_type: ovs + type: OVSIntPort + ovs_bridge: br-ctlplane + ovs_options: '"tag=1005"' + tag: 1005 + + Or when the external network on the undercloud is and ethernet device instead +of a bridge: + + undercloud_networks: + external: + address: 172.20.0.254 + netmask: 255.255.255.0 + device_type: ethernet + device_name: eth2 + + What makes the difference in this case is the *device_type* set to *ethernet* +instead of *ovs* and the *device_name* which must be the name of the ethernet +device on the undercloud. Dependencies ------------ -This playbook does not deploy the overcloud. After this playbook runs, call https://github.com/redhat-openstack/ansible-role-tripleo-overcloud. +This playbook does not deploy the overcloud. After this playbook runs, call +https://github.com/redhat-openstack/ansible-role-tripleo-overcloud. Example Playbook ---------------- diff --git a/roles/overcloud-prep-network/templates/overcloud-prep-network.sh.j2 b/roles/overcloud-prep-network/templates/overcloud-prep-network.sh.j2 index 0f5a80476..a7ff01730 100644 --- a/roles/overcloud-prep-network/templates/overcloud-prep-network.sh.j2 +++ b/roles/overcloud-prep-network/templates/overcloud-prep-network.sh.j2 @@ -38,7 +38,7 @@ echo "Please use 'single-nic-vlans' and 'bond-with-vlans'" {% endif %} {% for name, network in (undercloud_networks|default({})).items() if name == 'external' %} -{% if not overcloud_ipv6|bool %} +{% if not overcloud_ipv6|bool and network.device_type == 'ovs' %} sudo bash -c 'cat < /etc/sysconfig/network-scripts/ifcfg-vlan{{ network.tag }} DEVICE=vlan{{ network.tag }} ONBOOT=yes @@ -53,6 +53,19 @@ EOF' sudo ifup ifcfg-vlan{{ network.tag }} +{% elif not overcloud_ipv6|bool and network.device_type == 'ethernet' %} + +sudo bash -c 'cat < /etc/sysconfig/network-scripts/ifcfg-{{ network.device_name }} +DEVICE={{ network.device_name }} +ONBOOT=yes +TYPE=Ethernet +BOOTPROTO=static +IPADDR={{ network.address }} +NETMASK={{ network.netmask }} +EOF' + +sudo ifup ifcfg-{{ network.device_name }} + {% else %} sudo bash -c 'cat < /etc/sysconfig/network-scripts/ifcfg-eth6