diff options
author | Peter Mikus <pmikus@cisco.com> | 2019-02-23 16:27:07 +0000 |
---|---|---|
committer | Peter Mikus <pmikus@cisco.com> | 2019-05-22 09:30:11 +0000 |
commit | 04ea580e111ddf5be6101be1fbfe9fde56f1a214 (patch) | |
tree | 09247ed50f1da5e09b79dcf41a05b38afeaa4ee2 /resources/tools/testbed-setup/ansible/roles/common | |
parent | c6cd03e08d9429168b0e183b8dcbce991112f279 (diff) |
Ansible: Add CIMC/IPMI/COBBLER
- added tasks and handlers for CIMC, IPMI, COBBLER
- allows provisioning of servers via COBBLER
Change-Id: I64080069260dabb8a6e3b648aeff12f109d3f7c2
Signed-off-by: Peter Mikus <pmikus@cisco.com>
Diffstat (limited to 'resources/tools/testbed-setup/ansible/roles/common')
5 files changed, 193 insertions, 38 deletions
diff --git a/resources/tools/testbed-setup/ansible/roles/common/handlers/cimc.yaml b/resources/tools/testbed-setup/ansible/roles/common/handlers/cimc.yaml new file mode 100644 index 0000000000..e31d712d4d --- /dev/null +++ b/resources/tools/testbed-setup/ansible/roles/common/handlers/cimc.yaml @@ -0,0 +1,69 @@ +--- +# file: roles/common/handlers/cimc.yaml + +- name: Boot from network + imc_rest: + hostname: '{{ inventory_cimc_hostname }}' + username: '{{ inventory_cimc_username }}' + password: '{{ inventory_cimc_password }}' + validate_certs: no + content: | + <!-- Configure PXE boot --> + <configConfMo><inConfig> + <lsbootLan dn="sys/rack-unit-1/boot-policy/lan-read-only" access="read-only" order="1" prot="pxe" type="lan"/> + </inConfig></configConfMo> + delegate_to: localhost + tags: boot-network + +- name: Boot from storage + imc_rest: + hostname: '{{ inventory_cimc_hostname }}' + username: '{{ inventory_cimc_username }}' + password: '{{ inventory_cimc_password }}' + validate_certs: no + content: | + <configConfMo><inConfig> + <lsbootStorage dn="sys/rack-unit-1/boot-policy/storage-read-write" access="read-write" order="1" type="storage"/> + </inConfig></configConfMo> + delegate_to: localhost + tags: boot-storage + +- name: Power up server + imc_rest: + hostname: '{{ inventory_cimc_hostname }}' + username: '{{ inventory_cimc_username }}' + password: '{{ inventory_cimc_password }}' + validate_certs: no + content: | + <configConfMo><inConfig> + <computeRackUnit dn="sys/rack-unit-1" adminPower="up"/> + </inConfig></configConfMo> + delegate_to: localhost + tags: power-up + +- name: Power down server + imc_rest: + hostname: '{{ inventory_cimc_hostname }}' + username: '{{ inventory_cimc_username }}' + password: '{{ inventory_cimc_password }}' + validate_certs: no + content: | + <configConfMo><inConfig> + <computeRackUnit dn="sys/rack-unit-1" adminPower="down"/> + </inConfig></configConfMo> + delegate_to: localhost + tags: power-down + +- name: Power cycle server + imc_rest: + hostname: '{{ inventory_cimc_hostname }}' + username: '{{ inventory_cimc_username }}' + password: '{{ inventory_cimc_password }}' + validate_certs: no + content: | + <!-- Power cycle server --> + <configConfMo><inConfig> + <computeRackUnit dn="sys/rack-unit-1" adminPower="cycle-immediate"/> + </inConfig></configConfMo> + delegate_to: localhost + tags: power-cycle diff --git a/resources/tools/testbed-setup/ansible/roles/common/handlers/ipmi.yaml b/resources/tools/testbed-setup/ansible/roles/common/handlers/ipmi.yaml new file mode 100644 index 0000000000..6252cc04fd --- /dev/null +++ b/resources/tools/testbed-setup/ansible/roles/common/handlers/ipmi.yaml @@ -0,0 +1,47 @@ +--- +# file: roles/common/handlers/ipmi.yaml + +- name: Boot from network + ipmi_boot: + name: '{{ inventory_ipmi_hostname }}' + user: '{{ inventory_ipmi_username }}' + password: '{{ inventory_ipmi_password }}' + bootdev: network + delegate_to: localhost + tags: boot-network + +- name: Boot from storage + ipmi_boot: + name: '{{ inventory_ipmi_hostname }}' + user: '{{ inventory_ipmi_username }}' + password: '{{ inventory_ipmi_password }}' + bootdev: hd + delegate_to: localhost + tags: boot-storage + +- name: Power up server + ipmi_power: + name: '{{ inventory_ipmi_hostname }}' + user: '{{ inventory_ipmi_username }}' + password: '{{ inventory_ipmi_password }}' + state: on + delegate_to: localhost + tags: power-up + +- name: Power down server + ipmi_power: + name: '{{ inventory_ipmi_hostname }}' + user: '{{ inventory_ipmi_username }}' + password: '{{ inventory_ipmi_password }}' + state: off + delegate_to: localhost + tags: power-down + +- name: Power cycle server + ipmi_power: + name: '{{ inventory_ipmi_hostname }}' + user: '{{ inventory_ipmi_username }}' + password: '{{ inventory_ipmi_password }}' + state: boot + delegate_to: localhost + tags: power-cycle diff --git a/resources/tools/testbed-setup/ansible/roles/common/handlers/main.yaml b/resources/tools/testbed-setup/ansible/roles/common/handlers/main.yaml index bdcf6832f4..f994afdc60 100644 --- a/resources/tools/testbed-setup/ansible/roles/common/handlers/main.yaml +++ b/resources/tools/testbed-setup/ansible/roles/common/handlers/main.yaml @@ -1,6 +1,30 @@ --- # file: roles/common/handlers/main.yaml +- name: IPMI specific + import_tasks: ipmi.yaml + when: inventory_ipmi_hostname is defined + tags: ipmi-handlers + +- name: CIMC specific + import_tasks: cimc.yaml + when: inventory_cimc_hostname is defined + tags: cimc-handlers + - name: Update GRUB command: update-grub tags: update-grub + +- name: Reboot server + reboot: + reboot_timeout: 3600 + tags: reboot-server + +- name: Wait for server to restart + wait_for: + host: '{{ inventory_hostname }}' + search_regex: OpenSSH + port: 22 + delay: 60 + timeout: 3600 + tags: reboot-server diff --git a/resources/tools/testbed-setup/ansible/roles/common/handlers/reboot.yaml b/resources/tools/testbed-setup/ansible/roles/common/handlers/reboot.yaml deleted file mode 100644 index 01e1eb1b6b..0000000000 --- a/resources/tools/testbed-setup/ansible/roles/common/handlers/reboot.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -# file roles/common/handlers/reboot.yaml - -- name: Reboot host - command: shutdown -r now "Ansible updates triggered" - async: 0 - poll: 0 - ignore_errors: true - tags: reboot-host - -- name: Waiting for server to come back - local_action: wait_for host={{ inventory_hostname }} - state=started - tags: reboot-host diff --git a/resources/tools/testbed-setup/ansible/roles/common/tasks/main.yaml b/resources/tools/testbed-setup/ansible/roles/common/tasks/main.yaml index d7355883e0..43e83105ce 100644 --- a/resources/tools/testbed-setup/ansible/roles/common/tasks/main.yaml +++ b/resources/tools/testbed-setup/ansible/roles/common/tasks/main.yaml @@ -1,29 +1,62 @@ --- # file: roles/common/tasks/main.yaml +- name: Ensure the system exists in Cobbler + cobbler_system: + host: '{{ cobbler_hostname }}' + port: 60080 + interfaces: + br1: + ipaddress: '{{ ansible_default_ipv4.address }}' + macaddress: '{{ ansible_default_ipv4.macaddress }}' + name: '{{ hostname }}' + password: '{{ cobbler_password }}' + properties: + hostname: '{{ hostname }}' + gateway: '{{ ansible_default_ipv4.gateway }}' + profile: '{{ cobbler_profile }}' + name_servers: '{{ name_servers }}' + name_servers_search: '{{ name_servers_search }}' + kickstart: '/var/lib/cobbler/kickstarts/{{ cobbler_profile }}.seed' + kernel_options: '"interface={{ ansible_default_ipv4.interface }}"' + netboot_enabled: yes + username: '{{ cobbler_username }}' + use_ssl: no + validate_certs: no + when: provision_enabled + delegate_to: localhost + tags: cobbler-include + +- name: Commit Cobbler changes + cobbler_sync: + host: '{{ cobbler_hostname }}' + port: 60080 + password: '{{ cobbler_password }}' + username: '{{ cobbler_username }}' + use_ssl: no + validate_certs: no + run_once: yes + when: provision_enabled + delegate_to: localhost + register: __included_in_cobbler + notify: + - 'Boot from network' + - 'Reboot server' + tags: cobbler-include + +- meta: flush_handlers + - name: Add permanent proxy settings lineinfile: - path: "/etc/environment" - state: "present" - line: "{{ item.key }}={{ item.value }}" - with_dict: "{{ proxy_env }}" + path: '/etc/environment' + state: 'present' + line: '{{ item.key }}={{ item.value }}' + with_dict: '{{ proxy_env }}' when: proxy_env is defined - name: Install distribution - release - machine prerequisites include_tasks: '{{ ansible_distribution|lower }}_{{ ansible_distribution_release }}.yaml' -- name: Set hostname - hostname: - name: '{{ hostname }}' - tags: set-hostname - -- name: Ensure hostname is in /etc/hosts - lineinfile: - path: '/etc/hosts' - regexp: '^{{ ansible_default_ipv4.address }}.+$' - line: '{{ ansible_default_ipv4.address }} {{ hostname }}.{{ name_servers_search }}' - tags: set-hostname - - name: Set sudoers admin lineinfile: path: '/etc/sudoers' @@ -49,13 +82,9 @@ owner: 'root' group: 'root' mode: '644' - notify: ['Update GRUB'] + notify: + - 'Update GRUB' + - 'Reboot server' tags: copy-grub -- name: Add permanent proxy settings - lineinfile: - path: "/etc/environment" - state: "present" - line: "{{ item.key }}={{ item.value }}" - with_dict: "{{ proxy_env }}" - when: proxy_env is defined +- meta: flush_handlers |