summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Buil <mbuil@suse.com>2018-08-09 15:53:40 +0200
committerManuel Buil <mbuil@suse.com>2018-09-28 17:47:00 +0200
commit3fe75598de97c73c95d83739e6ed11277b619988 (patch)
tree5012ff76ed7ed9d00f02181d0de369cf5aa29b05
parent013bfffe38ab9a6c86a4a6e3bc2d08a5b5aedcbd (diff)
[baremetal] idf for opnfv_vm and update the pdf
Physical hardware PODs provide a pdf and a idf to describe hardware and other information (e.g. what is the purpose for each interface). To reuse the same code for opnfv vm and also become consistent, we should also describe the opnfv vm with an idf and a pdf. This patch simplifies what needs to be done for baremetal, especially for this (future) patch: https://gerrit.opnfv.org/gerrit/#/c/60797/11 As we add an idf, we should update dynamic_inventory and how we create the opnfv vm. Obviously, he opnfv_vm.yml gets removed. Change-Id: I930728474631fc214e4a9adc8581e0c16d230176 Signed-off-by: Manuel Buil <mbuil@suse.com>
-rw-r--r--xci/infra/bifrost/playbooks/xci-create-virtual.yml3
-rwxr-xr-xxci/playbooks/dynamic_inventory.py40
-rw-r--r--xci/playbooks/roles/create-vm-nodes/tasks/create_vm.yml6
-rw-r--r--xci/playbooks/roles/create-vm-nodes/tasks/main.yml2
-rw-r--r--xci/playbooks/roles/create-vm-nodes/templates/net.xml.j28
-rw-r--r--xci/playbooks/roles/create-vm-nodes/templates/vm.xml.j210
-rw-r--r--xci/var/opnfv_vm_idf.yml19
-rw-r--r--xci/var/opnfv_vm_pdf.yml (renamed from xci/var/opnfv_vm.yml)34
8 files changed, 80 insertions, 42 deletions
diff --git a/xci/infra/bifrost/playbooks/xci-create-virtual.yml b/xci/infra/bifrost/playbooks/xci-create-virtual.yml
index bc40d108..381c4fd4 100644
--- a/xci/infra/bifrost/playbooks/xci-create-virtual.yml
+++ b/xci/infra/bifrost/playbooks/xci-create-virtual.yml
@@ -14,7 +14,8 @@
vars_files:
- "{{ pdf_file }}"
- "{{ idf_file }}"
- - "{{ xci_path }}/xci/var/opnfv_vm.yml"
+ - "{{ xci_path }}/xci/var/opnfv_vm_pdf.yml"
+ - "{{ xci_path }}/xci/var/opnfv_vm_idf.yml"
- "{{ xci_path }}/xci/var/opnfv.yml"
pre_tasks:
- name: Load distribution variables
diff --git a/xci/playbooks/dynamic_inventory.py b/xci/playbooks/dynamic_inventory.py
index f6e93398..7f60f94e 100755
--- a/xci/playbooks/dynamic_inventory.py
+++ b/xci/playbooks/dynamic_inventory.py
@@ -76,6 +76,8 @@ class XCIInventory(object):
def read_pdf_idf(self):
pdf_file = os.environ['PDF']
idf_file = os.environ['IDF']
+ opnfv_file = os.path.dirname(os.path.realpath(__file__)) + "/../var/opnfv_vm_pdf.yml"
+ opnfv_idf_file = os.path.dirname(os.path.realpath(__file__)) + "/../var/opnfv_vm_idf.yml"
nodes = []
host_networks = {}
@@ -93,6 +95,21 @@ class XCIInventory(object):
print(e)
sys.exit(1)
+ with open(opnfv_file) as f:
+ try:
+ opnfv_pdf = yaml.safe_load(f)
+ except yaml.YAMLError as e:
+ print(e)
+ sys.exit(1)
+
+ with open(opnfv_idf_file) as f:
+ try:
+ opnfv_idf = yaml.safe_load(f)
+ except yaml.YAMLError as e:
+ print(e)
+ sys.exit(1)
+
+
valid_host = (host for host in idf['xci']['installers'][self.installer]['nodes_roles'] \
if host in idf['xci']['flavors'][self.flavor] \
and host != 'opnfv')
@@ -119,10 +136,33 @@ class XCIInventory(object):
if 'dns' in ndata.keys():
host_networks[hostname][network]['dns'] = str(ndata['dns'])
+ # Get also vlan and mac_address from pdf
+ host_networks[hostname][network]['mac_address'] = str(pdf_host_info['interfaces'][int(network_interface_num)]['mac_address'])
+ host_networks[hostname][network]['vlan'] = str(pdf_host_info['interfaces'][int(network_interface_num)]['vlan'])
+
+ # Get also vlan and mac_address from opnfv_pdf
+ mgmt_idf_index = int(opnfv_idf['opnfv_vm_idf']['net_config']['mgmt']['interface'])
+ opnfv_mgmt = opnfv_pdf['opnfv_vm_pdf']['interfaces'][mgmt_idf_index]
+ admin_idf_index = int(opnfv_idf['opnfv_vm_idf']['net_config']['admin']['interface'])
+ opnfv_public = opnfv_pdf['opnfv_vm_pdf']['interfaces'][admin_idf_index]
+ self.opnfv_networks['opnfv']['mgmt']['mac_address'] = str(opnfv_mgmt['mac_address'])
+ self.opnfv_networks['opnfv']['mgmt']['vlan'] = str(opnfv_mgmt['vlan'])
+ self.opnfv_networks['opnfv']['public']['mac_address'] = str(opnfv_public['mac_address'])
+ self.opnfv_networks['opnfv']['public']['vlan'] = str(opnfv_public['vlan'])
+
+ # Add the interfaces from idf
+
+
host_networks.update(self.opnfv_networks)
self.add_groupvar('all', 'host_info', host_networks)
+ if 'deployment_host_interfaces' in idf['xci']['installers'][self.installer]['network']:
+ mgmt_idf_index = int(opnfv_idf['opnfv_vm_idf']['net_config']['mgmt']['interface'])
+ admin_idf_index = int(opnfv_idf['opnfv_vm_idf']['net_config']['admin']['interface'])
+ self.add_hostvar('deployment_host', 'network_interface_admin', idf['xci']['installers'][self.installer]['network']['deployment_host_interfaces'][admin_idf_index])
+ self.add_hostvar('deployment_host', 'network_interface_mgmt', idf['xci']['installers'][self.installer]['network']['deployment_host_interfaces'][mgmt_idf_index])
+
# Now add the additional groups
for parent in idf['xci']['installers'][self.installer]['groups'].keys():
map(lambda x: self.add_group(x, parent), idf['xci']['installers'][self.installer]['groups'][parent])
diff --git a/xci/playbooks/roles/create-vm-nodes/tasks/create_vm.yml b/xci/playbooks/roles/create-vm-nodes/tasks/create_vm.yml
index 700c6c72..df019c88 100644
--- a/xci/playbooks/roles/create-vm-nodes/tasks/create_vm.yml
+++ b/xci/playbooks/roles/create-vm-nodes/tasks/create_vm.yml
@@ -128,9 +128,13 @@
command: get_xml
register: vm_xml
+ - name: Fetch the index for admin network
+ set_fact:
+ admin_index: "{{ (vm_name == 'opnfv') | ternary(opnfv_vm_idf.net_config.admin.interface, idf.net_config.admin.interface) | int }}"
+
- name: Fetch the ip
set_fact:
- vm_ip: "{%- for interface in item.1.interfaces %}{%- if 'native' in (interface.vlan | string) %}{{ interface.address }}{%- endif %}{%- endfor %}"
+ vm_ip: "{{ item.1.interfaces[admin_index | int].address }}"
# Assumes there is only a single NIC per VM
- name: get MAC from vm XML
diff --git a/xci/playbooks/roles/create-vm-nodes/tasks/main.yml b/xci/playbooks/roles/create-vm-nodes/tasks/main.yml
index c1cee6dc..64857d80 100644
--- a/xci/playbooks/roles/create-vm-nodes/tasks/main.yml
+++ b/xci/playbooks/roles/create-vm-nodes/tasks/main.yml
@@ -18,7 +18,7 @@
# First we create the opnfv_vm
- include_tasks: create_vm.yml
- with_indexed_items: "{{ [opnfv_vm] + nodes }}"
+ with_indexed_items: "{{ [opnfv_vm_pdf] + nodes }}"
- name: Start the opnfv vm
virt:
diff --git a/xci/playbooks/roles/create-vm-nodes/templates/net.xml.j2 b/xci/playbooks/roles/create-vm-nodes/templates/net.xml.j2
index 3c082170..7e372ffe 100644
--- a/xci/playbooks/roles/create-vm-nodes/templates/net.xml.j2
+++ b/xci/playbooks/roles/create-vm-nodes/templates/net.xml.j2
@@ -6,13 +6,9 @@
</nat>
</forward>
<bridge name='{{ network_interface }}' stp='on' delay='0'/>
- <ip address='{{ nodes[0].remote_management.address.split(':')[0] }}' netmask='{{ node_network_netmask }}'>
+ <ip address='{{ opnfv_vm_pdf.interfaces[opnfv_vm_idf.net_config.admin.interface].gateway }}' netmask='{{ node_network_netmask }}'>
<dhcp>
- {%- for interface in opnfv_vm.interfaces %}
- {%- if 'native' in (interface.vlan | string) %}
- <host mac="{{ interface.mac_address }}" ip="{{ interface.address }}"/>
- {%- endif %}
- {%- endfor %}
+ <host mac="{{ opnfv_vm_pdf.interfaces[opnfv_vm_idf.net_config.admin.interface].mac_address }}" ip="{{ opnfv_vm_pdf.interfaces[opnfv_vm_idf.net_config.admin.interface].address }}"/>
</dhcp>
</ip>
</network>
diff --git a/xci/playbooks/roles/create-vm-nodes/templates/vm.xml.j2 b/xci/playbooks/roles/create-vm-nodes/templates/vm.xml.j2
index 5c235f55..e4e41eda 100644
--- a/xci/playbooks/roles/create-vm-nodes/templates/vm.xml.j2
+++ b/xci/playbooks/roles/create-vm-nodes/templates/vm.xml.j2
@@ -35,19 +35,11 @@
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
- {% set native_interfaces = [] %}
- {%- for interface in item.1.interfaces %}
- {%- if 'native' in (interface.vlan | string) %}
- {%- set _ = native_interfaces.append(interface) %}
- {%- endif %}
- {%- endfor %}
- {%- for interface in native_interfaces -%}
<interface type='network'>
<source network='{{ vm_network }}'/>
<model type='{{ vm_nic }}'/>
- <mac address='{{ interface.mac_address }}'/>
+ <mac address='{{ item.1.interfaces[opnfv_vm_idf.net_config.admin.interface].mac_address }}'/>
</interface>
- {% endfor -%}
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
<video>
diff --git a/xci/var/opnfv_vm_idf.yml b/xci/var/opnfv_vm_idf.yml
new file mode 100644
index 00000000..fa647287
--- /dev/null
+++ b/xci/var/opnfv_vm_idf.yml
@@ -0,0 +1,19 @@
+---
+##############################################################################
+# Copyright (c) 2017 Ericsson AB and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+opnfv_vm_idf:
+ version: 0.1
+ net_config: &net_config
+ admin:
+ interface: 0
+ network: 192.168.122.0
+ mask: 24
+ mgmt:
+ interface: 1
+ network: 172.29.236.0
+ mask: 22
diff --git a/xci/var/opnfv_vm.yml b/xci/var/opnfv_vm_pdf.yml
index 17f5038c..51371388 100644
--- a/xci/var/opnfv_vm.yml
+++ b/xci/var/opnfv_vm_pdf.yml
@@ -6,7 +6,7 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-opnfv_vm:
+opnfv_vm_pdf:
name: opnfv
node: &nodeparams
type: virtual
@@ -36,32 +36,18 @@ opnfv_vm:
name: nic1
speed:
features:
- vlan: 10
+ vlan: native
interface_common_nic2: &interface_common_nic2
name: nic2
speed:
features:
- vlan: 20
- interface_common_nic3: &interface_common_nic3
- name: nic3
- speed:
- features:
vlan: native
- interface_common_nic4: &interface_common_nic4
- name: nic4
- speed:
- features:
- vlan: 30
interfaces:
- - mac_address: "52:54:00:33:82:d0"
- address: 172.29.236.10
- <<: *interface_common_nic1
- - mac_address: "52:54:00:33:82:d0"
- address: 172.29.244.10
- <<: *interface_common_nic2
- - mac_address: "52:54:00:33:82:d0"
- address: 192.168.122.2
- <<: *interface_common_nic3
- - mac_address: "52:54:00:33:82:d0"
- address: 172.29.240.10
- <<: *interface_common_nic4
+ - mac_address: "52:54:00:33:82:d0"
+ address: 192.168.122.2
+ gateway: 192.168.122.1
+ <<: *interface_common_nic1
+ - mac_address: "52:54:00:33:82:d1"
+ address: 172.29.236.10
+ gateway: 172.29.236.1
+ <<: *interface_common_nic2