diff --git a/doc/source/install/install.md b/doc/source/install/install.md index d584aba..12645e7 100644 --- a/doc/source/install/install.md +++ b/doc/source/install/install.md @@ -547,6 +547,57 @@ below. +### 3.4 var.yaml (Single NIC settings) + +Configuration file used by SNAPS-OpenStack for single NIC deployment. + +#### TASKS + +Parameters defined in this section allows user to specify pre and post deployment tasks +(Single NIC). Configuration parameters defined in this section are explained +below. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterOptionalityDescription
nameNShould be pre-post.
hostDefine this set of parameters for each host machine (A separate host section should be defined for each host machine).
+ ipYIP of Management network.
+ node_typeNUser can choose node type controller/compute.
+ primary_interfaceNName of primary interfaces.
+ target_interfaceNName of the veth pairs to be created.
+ ## 4 Installation Steps ### 4.1 Fresh OpenStack Installation @@ -612,6 +663,34 @@ Run `network_config.py` as shown below: sudo python /network_config.py -f /snaps_openstack/utilities/var.yaml -mtu ``` +### 4.4 Settings for Single NIC deployment + +#### Step 1 + +Go to `/snaps_openstack/utilities/` directory. + +Define Single NIC configurations for all hosts in `var.yaml` file under pre-post task. + +#### Step 2 + +Run `network_config.py` as shown below: + +``` +sudo python /network_config.py -f /snaps_openstack/utilities/var.yaml -preNic +``` + +#### Step 3 + +Install fresh openstack using physical interface and veth0 as management and data interfaces respectively. (Please refer to 4.1) + +#### Step 2 + +Run `network_config.py` as shown below: + +``` +sudo python /network_config.py -f /snaps_openstack/utilities/var.yaml -postNic +``` + ## 5 Cleanup and Troubleshooting ### 5.1 Fresh Deployment with Existing Docker Repository @@ -716,3 +795,12 @@ Exit from mariadb container interactive mode: ``` exit ``` +#### 5.3.2 Single NIC Cleanup + +Before cleaning the opesntack setup user needs to clean up the single NIC configurations. + +Run `network_config.py` as shown below: + +``` +sudo python /network_config.py -f /snaps_openstack/utilities/var.yaml -cleanNic +``` diff --git a/network_config.py b/network_config.py index 0cd1ea9..b4d9638 100644 --- a/network_config.py +++ b/network_config.py @@ -83,6 +83,42 @@ def __main(arguments): logger.info('Completed operation successfully') else: logger.info('Error while performing operation') + if arguments.preNic is not ARG_NOT_SET: + for task in config.get("TASKS"): + if task.get("name") == "pre-post": + logger.info("Performing Task " + task.get( + 'name') + " with arguments") + logger.info("--pre-post") + network_utils.add_ansible_hosts(task.get("HOSTS")) + ret = network_utils.preNic(task) + if ret == 0: + logger.info('Completed operation successfully') + else: + logger.info('Error while performing operation') + if arguments.postNic is not ARG_NOT_SET: + for task in config.get("TASKS"): + if task.get("name") == "pre-post": + logger.info("Performing Task " + task.get( + 'name') + " with arguments") + logger.info("--pre-post") + network_utils.add_ansible_hosts(task.get("HOSTS")) + ret = network_utils.postNic(task) + if ret == 0: + logger.info('Completed operation successfully') + else: + logger.info('Error while performing operation') + if arguments.cleanNic is not ARG_NOT_SET: + for task in config.get("TASKS"): + if task.get("name") == "pre-post": + logger.info("Performing Task " + task.get( + 'name') + " with arguments") + logger.info("--pre-post") + network_utils.add_ansible_hosts(task.get("HOSTS")) + ret = network_utils.cleanNic(task) + if ret == 0: + logger.info('Completed operation successfully') + else: + logger.info('Error while performing operation') except Exception as e: logger.error( @@ -117,6 +153,15 @@ def __main(arguments): parser.add_argument( '-mtu', '--mtu', dest='mtu', nargs='?', default=ARG_NOT_SET, help='When used, sets the mtu size on nic') + parser.add_argument( + '-preNic', '--preNic', dest='preNic', nargs='?', default=ARG_NOT_SET, + help='When used, sets the pre play for single nic support') + parser.add_argument( + '-postNic', '--postNic', dest='postNic', nargs='?', default=ARG_NOT_SET, + help='When used, sets the post play for single nic support') + parser.add_argument( + '-cleanNic', '--cleanNic', dest='cleanNic', nargs='?', default=ARG_NOT_SET, + help='When used, cleanup of single nic support') args = parser.parse_args() if (args.tenant_vlan is ARG_NOT_SET diff --git a/snaps_openstack/utilities/network_utils.py b/snaps_openstack/utilities/network_utils.py index dd2a6c9..39f4694 100755 --- a/snaps_openstack/utilities/network_utils.py +++ b/snaps_openstack/utilities/network_utils.py @@ -177,3 +177,54 @@ def mtu(task): ret = os.system(ansible_command_restart) return ret +def preNic(task): + ret = None + for host in task.get("HOSTS"): + ip = host.get("ip") + primary_interface = host.get("primary_interface") + target_interface = host.get("target_interface") + pre_pb = pkg_resources.resource_filename( + 'snaps_openstack.utilities.playbooks', + 'viface_pre_play.yaml') + ansible_command = "ansible-playbook " + pre_pb \ + + " --extra-vars=\'{\"target\": \"" \ + + ip + "\",\"target_interface\": \"" + target_interface + "\"}\'" + logger.info(ansible_command) + ret = os.system(ansible_command) + return ret +def postNic(task): + ret = None + for host in task.get("HOSTS"): + ip = host.get("ip") + primary_interface = host.get("primary_interface") + target_interface = host.get("target_interface") + node_type = host.get("node_type") + post_pb = pkg_resources.resource_filename( + 'snaps_openstack.utilities.playbooks', + 'viface_post_play.yaml') + ansible_command = "ansible-playbook " + post_pb \ + + " --extra-vars=\'{\"target\": \"" \ + + ip + "\",\"node_type\":\"" + node_type \ + + "\",\"interface\": \"" + primary_interface \ + + "\"}\'" + logger.info(ansible_command) + ret = os.system(ansible_command) + return ret +def cleanNic(task): + ret = None + for host in task.get("HOSTS"): + ip = host.get("ip") + primary_interface = host.get("primary_interface") + target_interface = host.get("target_interface") + node_type = host.get("node_type") + clean_pb = pkg_resources.resource_filename( + 'snaps_openstack.utilities.playbooks', + 'viface_clean_play.yaml') + ansible_command = "ansible-playbook " + clean_pb \ + + " --extra-vars=\'{\"target\": \"" \ + + ip + "\",\"node_type\":\"" + node_type \ + +"\",\"interface\": \"" + primary_interface \ + + "\"}\'" + logger.info(ansible_command) + ret = os.system(ansible_command) + return ret diff --git a/snaps_openstack/utilities/playbooks/viface_clean_play.yaml b/snaps_openstack/utilities/playbooks/viface_clean_play.yaml new file mode 100755 index 0000000..4ea9b2f --- /dev/null +++ b/snaps_openstack/utilities/playbooks/viface_clean_play.yaml @@ -0,0 +1,19 @@ +--- +- hosts: "{{ target }}" + tasks: + - name: Remove Script file + shell: rm /etc/network/veth.sh + ignore_errors: True + - name: Edit interface file + lineinfile: + dest: /etc/network/interfaces + state: present + regexp: '^post-up' + line: '' + - name: Removing port from linux bridge + shell: brctl delif br-ex '{{ interface }}';systemctl restart networking + when: node_type == "controller" + - name: Removing port from OVS bridge + shell: docker exec $(docker ps -a| grep switchd| awk {'print $1'}) ovs-vsctl del-port br-ex '{{ interface }}';ifconfig br-ex 0.0.0.0; systemctl restart networking + when: node_type == "compute" + diff --git a/snaps_openstack/utilities/playbooks/viface_post_play.yaml b/snaps_openstack/utilities/playbooks/viface_post_play.yaml new file mode 100755 index 0000000..fce5c27 --- /dev/null +++ b/snaps_openstack/utilities/playbooks/viface_post_play.yaml @@ -0,0 +1,32 @@ +--- +- hosts: '{{ target }}' + become: yes + become_user: root +# vars_files: +# vars: + tasks: + - name: get the default gateway of machine + shell: ip route show | grep default|awk '{print $3}' + register: gateway + - debug: + var: gateway.stdout_lines[0] + - name: Editing script file for controller + lineinfile: + dest: /etc/network/veth.sh + line: 'brctl addif uplinkbridge "{{ interface }}";ip addr add "{{ target }}"/24 dev uplinkbridge;ip addr del "{{ target }}"/24 dev "{{ interface }}";route add default gw "{{ gateway.stdout_lines[0] }}" uplinkbridge;ifconfig "{{ interface }}" "{{ target }}"/24;' + when: node_type == "controller" + - name: Editing script file for compute + lineinfile: + dest: /etc/network/veth.sh + line: "(sleep 90;echo 'starting ovs config' ip a a '{{ target }}'/24 dev br-ex;docker exec -i $(docker ps -a| grep switchd| awk {'print $1'}) ovs-vsctl add-port br-ex '{{ interface }}';ifconfig br-ex up;route add default gw '{{ gateway.stdout_lines[0] }}' br-ex;ifconfig '{{ interface }}' 0.0.0.0;echo 'ending ovs config')& " + when: node_type == "compute" + + - name: "Reboot if required" + shell: sleep 1 && shutdown -r now 'Reboot required' + become: true + async: 1 + poll: 0 + ignore_errors: true + - name: waiting for server to come back + local_action: wait_for host={{ target }} port=22 state=started delay=10 + diff --git a/snaps_openstack/utilities/playbooks/viface_pre_play.yaml b/snaps_openstack/utilities/playbooks/viface_pre_play.yaml new file mode 100755 index 0000000..191c08a --- /dev/null +++ b/snaps_openstack/utilities/playbooks/viface_pre_play.yaml @@ -0,0 +1,21 @@ +--- +- hosts: "{{ target }}" + tasks: + - name: install bridge-utils + shell: sudo apt-get install bridge-utils; + ignore_errors: True + - name: creating veth script file + file: + path: /etc/network/veth.sh + state: touch + mode: 0777 + - lineinfile: + dest: /etc/network/veth.sh + # line: 'ip link add type "{{ veth_name }}";ip link set dev "{{ veth_name }}"0 up;ip link set dev "{{ veth_name }}"1 up;brctl addbr uplinkbridge;brctl addif uplinkbridge "{{ veth_name }}"0;ip link set dev uplinkbridge up;' + line: 'ip link add veth0 type veth peer name "{{ target_interface }}";ip link set dev veth0 up;ip link set dev "{{ target_interface }}" up;brctl addbr uplinkbridge;brctl addif uplinkbridge veth0;ip link set dev uplinkbridge up;' + - name: Editing interface file + lineinfile: + dest: /etc/network/interfaces + line: 'post-up /etc/network/veth.sh' + - name: restarting networks + command: systemctl restart networking diff --git a/snaps_openstack/utilities/var.yaml b/snaps_openstack/utilities/var.yaml index f9b4403..5e0216f 100755 --- a/snaps_openstack/utilities/var.yaml +++ b/snaps_openstack/utilities/var.yaml @@ -60,3 +60,16 @@ TASKS: - port_name: size: '' + - + name: pre-post + HOSTS: + - + ip: "" + node_type: "controller" + primary_interface: "" + target_interface: "veth1" + - + ip: "" + node_type: "compute" + primary_interface: "" + target_interface: "veth1"