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.
+
+
+
+ | Parameter |
+ Optionality |
+ Description |
+
+
+ | name |
+ N |
+ Should be pre-post. |
+
+
+ | host |
+ Define this set of parameters for each host machine (A separate host section should be defined for each host machine). |
+
+
+ |
+ ip |
+ Y |
+ IP of Management network. |
+
+
+ |
+ node_type |
+ N |
+ User can choose node type controller/compute. |
+
+
+ |
+ primary_interface |
+ N |
+ Name of primary interfaces. |
+
+
+ |
+ target_interface |
+ N |
+ Name 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"