summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xci/infra/bifrost/playbooks/xci-prepare-env.yml33
-rw-r--r--xci/infra/bifrost/playbooks/xci-setup-nodes.yml3
-rw-r--r--xci/playbooks/roles/create-nodes/defaults/main.yml6
-rw-r--r--xci/playbooks/roles/create-nodes/tasks/barematalhoststojson.yml79
-rw-r--r--xci/playbooks/roles/create-nodes/tasks/create_vm.yml6
-rw-r--r--xci/playbooks/roles/create-nodes/tasks/main.yml9
6 files changed, 122 insertions, 14 deletions
diff --git a/xci/infra/bifrost/playbooks/xci-prepare-env.yml b/xci/infra/bifrost/playbooks/xci-prepare-env.yml
index b4ad8c0c..d576324d 100644
--- a/xci/infra/bifrost/playbooks/xci-prepare-env.yml
+++ b/xci/infra/bifrost/playbooks/xci-prepare-env.yml
@@ -18,10 +18,6 @@
vars_files:
- "{{ xci_path }}/xci/var/opnfv.yml"
tasks:
- - name: Copy bifrost inventory file
- copy:
- src: /tmp/baremetal.json
- dest: /tmp/baremetal.json
- name: Configure SSH key for devuser
user:
@@ -70,6 +66,25 @@
state: directory
become: yes
+ # Directory must exist before passing the static config
+ - name: "Setup Inventory DHCP Hosts Directory"
+ file:
+ path: "/etc/dnsmasq.d/bifrost.dhcp-hosts.d"
+ state: directory
+ owner: "root"
+ group: "root"
+ mode: 0755
+ become: yes
+
+ - name: Copy bifrost files
+ copy:
+ src: "{{ item.src }}"
+ dest: "{{ item.dst }}"
+ with_items:
+ - { src: '/tmp/baremetal.json', dst: '/tmp/baremetal.json' }
+ - { src: '/tmp/baremetalstaticips', dst: '/etc/dnsmasq.d/bifrost.dhcp-hosts.d/baremetalstaticips' }
+ become: yes
+
- name: Copy original qcow2 image to OPNFV VM
synchronize:
src: "{{ xci_cache }}/{{ item }}"
@@ -91,3 +106,13 @@
become: yes
when: _resolv_conf_netconfig.stat.exists
when: ansible_pkg_mgr == 'zypper'
+
+ #TODO: Find a way to do this with Ansible
+ - name: Make sure the default gateway is correct
+ shell: "ip route del default"
+ become: yes
+
+ #TODO: Find a way to do this with Ansible
+ - name: Make sure the default gateway is correct
+ shell: "ip route add default via {{ host_info[inventory_hostname].public.gateway }}"
+ become: yes
diff --git a/xci/infra/bifrost/playbooks/xci-setup-nodes.yml b/xci/infra/bifrost/playbooks/xci-setup-nodes.yml
index aaa50997..a0f92159 100644
--- a/xci/infra/bifrost/playbooks/xci-setup-nodes.yml
+++ b/xci/infra/bifrost/playbooks/xci-setup-nodes.yml
@@ -38,7 +38,8 @@
state: started
port: 22
connect_timeout: 10
- timeout: 180
+ timeout: 10180
+
# No ansible module for brctl found
- name: Add pxe interface to the bridge
shell: "brctl addif {{ item.bridge }} {{ item.interface }}"
diff --git a/xci/playbooks/roles/create-nodes/defaults/main.yml b/xci/playbooks/roles/create-nodes/defaults/main.yml
index b03f1386..02a429cf 100644
--- a/xci/playbooks/roles/create-nodes/defaults/main.yml
+++ b/xci/playbooks/roles/create-nodes/defaults/main.yml
@@ -4,10 +4,10 @@ baremetal_json_file: '/tmp/baremetal.json'
# We collect these parameters from the pdf
vm_nic: "virtio"
-vm_groups: {}
-vm_default_groups: "{{ lookup('env', 'DEFAULT_HOST_GROUPS').split() | default(['baremetal'], true) }}"
vm_disk_cache: unsafe
node_names: "{{ lookup('env', 'NODE_NAMES').split() }}"
+node_groups: {}
+node_default_groups: "{{ lookup('env', 'DEFAULT_HOST_GROUPS').split() | default(['baremetal'], true) }}"
network_bridge_admin: 'br-admin'
network_bridge_mgmt: 'br-mgmt'
@@ -27,4 +27,6 @@ vm_libvirt_uri: "{{ lookup('env', 'LIBVIRT_CONNECT_URI') | default('qemu:///syst
opnfv_image_path: "/var/lib/libvirt/images"
+vms_to_create: "{{ (baremetal | bool) | ternary([opnfv_vm_pdf], [opnfv_vm_pdf] + nodes) }}"
+baremetal_nodes: "{{ (baremetal | bool) | ternary(nodes, omit) }}"
libvirt_networks: "{{ (baremetal | bool) | ternary([vm_network_admin,vm_network_mgmt],[vm_network_admin]) }}"
diff --git a/xci/playbooks/roles/create-nodes/tasks/barematalhoststojson.yml b/xci/playbooks/roles/create-nodes/tasks/barematalhoststojson.yml
new file mode 100644
index 00000000..070221fd
--- /dev/null
+++ b/xci/playbooks/roles/create-nodes/tasks/barematalhoststojson.yml
@@ -0,0 +1,79 @@
+---
+# Copyright 2018, SUSE Linux GmbH
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This playbook builds the json file with information about the baremetal nodes
+# which is read by ironic to start the pxe booting
+
+
+- name: BAREMETAL - Create file for static ip
+ file:
+ path: /tmp/baremetalstaticips
+ state: touch
+ group: root
+ owner: root
+ mode: 0644
+
+- name: "Generating the json describing baremetal nodes"
+ block:
+
+ - set_fact:
+ host_group: "{{ node_default_groups }}"
+
+ - set_fact:
+ host_group: "{{ node_default_groups | union(node_groups[item.name]) }}"
+ when: node_groups[item.name] is defined
+
+ - name: BAREMETAL - Fetch the ip
+ set_fact:
+ admin_ip: "{{ item.interfaces[idf.net_config.admin.interface].address }}"
+
+ - name: BAREMETAL - Fetch the mac
+ set_fact:
+ admin_mac: "{{ item.interfaces[idf.net_config.admin.interface].mac_address }}"
+
+ - name: BAREMETAL - set the json entry for baremetal nodes
+ set_fact:
+ node_data:
+ name: "{{ item.name }}"
+ uuid: "{{ item.name | to_uuid }}"
+ host_groups: "{{ vm_host_group }}"
+ driver: "{{ vm_node_driver|default('ipmi') }}"
+ driver_info:
+ power:
+ ipmi_address: "{{ item.remote_management.address }}"
+ ipmi_port: "{{ virtual_ipmi_port| default('623') }}"
+ ipmi_username: "{{ item.remote_management.user }}"
+ ipmi_password: "{{ item.remote_management.pass }}"
+ nics:
+ - mac: "{{ admin_mac }}"
+ ansible_ssh_host: "{{ admin_ip }}"
+ ipv4_address: "{{ admin_ip }}"
+ properties:
+ cpu_arch: "{{ item.node.arch }}"
+ ram: "{{ item.node.memory.rstrip('G') }}"
+ cpus: "{{ item.node.cpus }}"
+ disk_size: "{{ item.disks[0].disk_capacity.rstrip('G') }}"
+
+ - name: BAREMETAL - Static ip config for dnsmasq
+ lineinfile:
+ path: /tmp/baremetalstaticips
+ state: present
+ line: '{{ admin_mac }},{{ admin_ip }}'
+
+ - name: BAREMETAL - add created node info
+ set_fact:
+ nodes_json_data: "{{ nodes_json_data | combine({item.name: node_data}) }}"
+
+ when: (num_nodes | int) > (nodes_json_data | length | int) + 1
diff --git a/xci/playbooks/roles/create-nodes/tasks/create_vm.yml b/xci/playbooks/roles/create-nodes/tasks/create_vm.yml
index bca5b483..7e1a745a 100644
--- a/xci/playbooks/roles/create-nodes/tasks/create_vm.yml
+++ b/xci/playbooks/roles/create-nodes/tasks/create_vm.yml
@@ -6,11 +6,11 @@
- set_fact:
vm_log_file: "{{ node_logdir }}/{{ vm_name }}_console.log"
- vm_host_group: "{{ vm_default_groups }}"
+ vm_host_group: "{{ node_default_groups }}"
- set_fact:
- vm_host_group: "{{ vm_default_groups | union(vm_groups[vm_name]) }}"
- when: vm_groups[vm_name] is defined
+ vm_host_group: "{{ node_default_groups | union(node_groups[vm_name]) }}"
+ when: node_groups[vm_name] is defined
- name: set prealloc arg for Debian
set_fact:
diff --git a/xci/playbooks/roles/create-nodes/tasks/main.yml b/xci/playbooks/roles/create-nodes/tasks/main.yml
index 18bc9871..0e51b411 100644
--- a/xci/playbooks/roles/create-nodes/tasks/main.yml
+++ b/xci/playbooks/roles/create-nodes/tasks/main.yml
@@ -20,10 +20,13 @@
# First we create the opnfv_vm
- include_tasks: create_vm.yml
- with_indexed_items: "{{ [opnfv_vm_pdf] + nodes }}"
+ with_indexed_items: "{{ vms_to_create }}"
+
+- include_tasks: barematalhoststojson.yml
+ with_items: "{{ baremetal_nodes }}"
- name: Start the opnfv vm
- virt:
+ virt:
command: start
name: opnfv
@@ -38,8 +41,6 @@
dest: "{{ baremetal_json_file }}"
content: "{{ nodes_json_data | to_nice_json }}"
-- debug: var=nodes_json_data
-
- name: >
"Set file permissions such that the baremetal data file
can be read by the user executing Ansible"