Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions doc/source/install/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,57 @@ below.
</tr>
</table>

### 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.

<table>
<tr>
<th colspan="3">Parameter</th>
<th>Optionality</th>
<th>Description</th>
</tr>
<tr>
<td colspan="3">name</td>
<td>N</td>
<td>Should be <code>pre-post</code>.</td>
</tr>
<tr>
<td colspan="4">host</td>
<td>Define this set of parameters for each host machine (A separate host section should be defined for each host machine).</td>
</tr>
<tr>
<td/>
<td colspan="2">ip</td>
<td>Y</td>
<td>IP of Management network.</td>
</tr>
<tr>
<td/>
<td colspan="2">node_type</td>
<td>N</td>
<td>User can choose node type controller/compute.</td>
</tr>
<tr>
<td/>
<td colspan="2">primary_interface</td>
<td>N</td>
<td>Name of primary interfaces.</td>
</tr>
<tr>
<td/>
<td colspan="2">target_interface</td>
<td>N</td>
<td>Name of the veth pairs to be created.</td>
</tr>
</table>

## 4 Installation Steps

### 4.1 Fresh OpenStack Installation
Expand Down Expand Up @@ -612,6 +663,34 @@ Run `network_config.py` as shown below:
sudo python <repo_dir>/network_config.py -f <repo_dir>/snaps_openstack/utilities/var.yaml -mtu
```

### 4.4 Settings for Single NIC deployment

#### Step 1

Go to `<repo_dir>/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 <repo_dir>/network_config.py -f <repo_dir>/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 <repo_dir>/network_config.py -f <repo_dir>/snaps_openstack/utilities/var.yaml -postNic
```

## 5 Cleanup and Troubleshooting

### 5.1 Fresh Deployment with Existing Docker Repository
Expand Down Expand Up @@ -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 <repo_dir>/network_config.py -f <repo_dir>/snaps_openstack/utilities/var.yaml -cleanNic
```
45 changes: 45 additions & 0 deletions network_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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
Expand Down
51 changes: 51 additions & 0 deletions snaps_openstack/utilities/network_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
19 changes: 19 additions & 0 deletions snaps_openstack/utilities/playbooks/viface_clean_play.yaml
Original file line number Diff line number Diff line change
@@ -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"

32 changes: 32 additions & 0 deletions snaps_openstack/utilities/playbooks/viface_post_play.yaml
Original file line number Diff line number Diff line change
@@ -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

21 changes: 21 additions & 0 deletions snaps_openstack/utilities/playbooks/viface_pre_play.yaml
Original file line number Diff line number Diff line change
@@ -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
13 changes: 13 additions & 0 deletions snaps_openstack/utilities/var.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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"