Support configuration of BIOS and RAID for controllers
This commit is contained in:
parent
b9b62138f6
commit
17c198fc69
@ -6,6 +6,36 @@
|
|||||||
# to setup the Kayobe user account.
|
# to setup the Kayobe user account.
|
||||||
controller_bootstrap_user: "{{ lookup('env', 'USER') }}"
|
controller_bootstrap_user: "{{ lookup('env', 'USER') }}"
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Controller node BIOS configuration.
|
||||||
|
|
||||||
|
# Dict of controller BIOS options. Format is same as that used by stackhpc.drac
|
||||||
|
# role.
|
||||||
|
controller_bios_config: "{{ controller_bios_config_default | combine(controller_bios_config_extra) }}"
|
||||||
|
|
||||||
|
# Dict of default controller BIOS options. Format is same as that used by
|
||||||
|
# stackhpc.drac role.
|
||||||
|
controller_bios_config_default: {}
|
||||||
|
|
||||||
|
# Dict of additional controller BIOS options. Format is same as that used by
|
||||||
|
# stackhpc.drac role.
|
||||||
|
controller_bios_config_extra: {}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Controller node RAID configuration.
|
||||||
|
|
||||||
|
# List of controller RAID volumes. Format is same as that used by stackhpc.drac
|
||||||
|
# role.
|
||||||
|
controller_raid_config: "{{ controller_raid_config_default + controller_raid_config_extra }}"
|
||||||
|
|
||||||
|
# List of default controller RAID volumes. Format is same as that used by
|
||||||
|
# stackhpc.drac role.
|
||||||
|
controller_raid_config_default: []
|
||||||
|
|
||||||
|
# List of additional controller RAID volumes. Format is same as that used by
|
||||||
|
# stackhpc.drac role.
|
||||||
|
controller_raid_config_extra: []
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Controller node LVM configuration.
|
# Controller node LVM configuration.
|
||||||
|
|
||||||
|
@ -19,13 +19,11 @@ inspector_manage_firewall: False
|
|||||||
|
|
||||||
# List of of default inspector processing plugins.
|
# List of of default inspector processing plugins.
|
||||||
inspector_processing_hooks_default:
|
inspector_processing_hooks_default:
|
||||||
- root_disk_selection
|
- ramdisk_error
|
||||||
- scheduler
|
- scheduler
|
||||||
- validate_interfaces
|
- validate_interfaces
|
||||||
- ramdisk_error
|
|
||||||
- capabilities
|
- capabilities
|
||||||
- pci_devices
|
- pci_devices
|
||||||
- raid_device
|
|
||||||
- local_link_connection
|
- local_link_connection
|
||||||
- lldp_basic
|
- lldp_basic
|
||||||
|
|
||||||
|
90
ansible/overcloud-bios-raid.yml
Normal file
90
ansible/overcloud-bios-raid.yml
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
---
|
||||||
|
- name: Group controller hosts by their BMC type
|
||||||
|
hosts: controllers
|
||||||
|
gather_facts: no
|
||||||
|
tasks:
|
||||||
|
- name: Group controller hosts by their BMC type
|
||||||
|
group_by:
|
||||||
|
key: "controllers_with_bmcs_of_type_{{ bmc_type | default('unknown') }}"
|
||||||
|
|
||||||
|
- name: Check whether any changes to controller BIOS and RAID configuration are required
|
||||||
|
hosts: controllers_with_bmcs_of_type_idrac
|
||||||
|
gather_facts: no
|
||||||
|
vars:
|
||||||
|
# Set this to False to avoid rebooting the nodes after configuration.
|
||||||
|
drac_reboot: True
|
||||||
|
roles:
|
||||||
|
- role: stackhpc.drac
|
||||||
|
drac_address: "{{ ipmi_address }}"
|
||||||
|
drac_username: "{{ ipmi_username }}"
|
||||||
|
drac_password: "{{ ipmi_password }}"
|
||||||
|
drac_bios_config: "{{ controller_bios_config }}"
|
||||||
|
drac_raid_config: "{{ controller_raid_config }}"
|
||||||
|
drac_check_mode: True
|
||||||
|
tasks:
|
||||||
|
- name: Set a fact about whether the configuration changed
|
||||||
|
set_fact:
|
||||||
|
bios_or_raid_change: "{{ drac_result | changed }}"
|
||||||
|
|
||||||
|
- name: Ensure that controller BIOS and RAID volumes are configured
|
||||||
|
hosts: controllers_with_bmcs_of_type_idrac
|
||||||
|
gather_facts: no
|
||||||
|
vars:
|
||||||
|
# Set this to False to avoid rebooting the nodes after configuration.
|
||||||
|
drac_reboot: True
|
||||||
|
pre_tasks:
|
||||||
|
- name: Set the controller nodes' maintenance mode
|
||||||
|
command: >
|
||||||
|
docker exec bifrost_deploy
|
||||||
|
bash -c '. env-vars &&
|
||||||
|
export OS_URL=$IRONIC_URL &&
|
||||||
|
export OS_TOKEN=$OS_AUTH_TOKEN &&
|
||||||
|
export BIFROST_INVENTORY_SOURCE=ironic &&
|
||||||
|
ansible baremetal
|
||||||
|
--connection local
|
||||||
|
--inventory /etc/bifrost/inventory/
|
||||||
|
-e @/etc/bifrost/bifrost.yml
|
||||||
|
-e @/etc/bifrost/dib.yml
|
||||||
|
--limit {{ inventory_hostname }}
|
||||||
|
-m command
|
||||||
|
-a "openstack baremetal node maintenance set {% raw %}{{ inventory_hostname }}{% endraw %} --reason BIOS-RAID"'
|
||||||
|
register: show_result
|
||||||
|
# We use this convoluted construct to work around Ansible's limitations
|
||||||
|
# in evaluation of the delegate_to keyword.
|
||||||
|
delegate_to: "{{ item }}"
|
||||||
|
with_items:
|
||||||
|
- "{{ hostvars[groups['seed'][0]].ansible_host }}"
|
||||||
|
when: "{{ bios_or_raid_change | bool }}"
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: stackhpc.drac
|
||||||
|
drac_address: "{{ ipmi_address }}"
|
||||||
|
drac_username: "{{ ipmi_username }}"
|
||||||
|
drac_password: "{{ ipmi_password }}"
|
||||||
|
drac_bios_config: "{{ controller_bios_config }}"
|
||||||
|
drac_raid_config: "{{ controller_raid_config }}"
|
||||||
|
when: "{{ bios_or_raid_change | bool }}"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Unset the controller nodes' maintenance mode
|
||||||
|
command: >
|
||||||
|
docker exec bifrost_deploy
|
||||||
|
bash -c '. env-vars &&
|
||||||
|
export OS_URL=$IRONIC_URL &&
|
||||||
|
export OS_TOKEN=$OS_AUTH_TOKEN &&
|
||||||
|
export BIFROST_INVENTORY_SOURCE=ironic &&
|
||||||
|
ansible baremetal
|
||||||
|
--connection local
|
||||||
|
--inventory /etc/bifrost/inventory/
|
||||||
|
-e @/etc/bifrost/bifrost.yml
|
||||||
|
-e @/etc/bifrost/dib.yml
|
||||||
|
--limit {{ inventory_hostname }}
|
||||||
|
-m command
|
||||||
|
-a "openstack baremetal node maintenance unset {% raw %}{{ inventory_hostname }}{% endraw %}"'
|
||||||
|
register: show_result
|
||||||
|
# We use this convoluted construct to work around Ansible's limitations
|
||||||
|
# in evaluation of the delegate_to keyword.
|
||||||
|
delegate_to: "{{ item }}"
|
||||||
|
with_items:
|
||||||
|
- "{{ hostvars[groups['seed'][0]].ansible_host }}"
|
||||||
|
when: "{{ bios_or_raid_change | bool }}"
|
@ -285,6 +285,20 @@ to add them to the Kayobe and bifrost Ansible inventories::
|
|||||||
|
|
||||||
(kayobe-venv) $ kayobe overcloud inventory discover
|
(kayobe-venv) $ kayobe overcloud inventory discover
|
||||||
|
|
||||||
|
BIOS and RAID Configuration
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
BIOS and RAID configuration may require one or more power cycles of the
|
||||||
|
hardware to complete the operation. These will be performed automatically.
|
||||||
|
|
||||||
|
Configuration of BIOS settings and RAID volumes is currently performed out of
|
||||||
|
band as a separate task from hardware provisioning. To configure the BIOS and
|
||||||
|
RAID::
|
||||||
|
|
||||||
|
(kayobe-venv) $ kayobe overcloud bios raid configure
|
||||||
|
|
||||||
Provisioning
|
Provisioning
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
@ -15,6 +15,36 @@
|
|||||||
# List of extra networks to which controller nodes are attached.
|
# List of extra networks to which controller nodes are attached.
|
||||||
#controller_extra_network_interfaces:
|
#controller_extra_network_interfaces:
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Controller node BIOS configuration.
|
||||||
|
|
||||||
|
# Dict of controller BIOS options. Format is same as that used by stackhpc.drac
|
||||||
|
# role.
|
||||||
|
#controller_bios_config:
|
||||||
|
|
||||||
|
# Dict of default controller BIOS options. Format is same as that used by
|
||||||
|
# stackhpc.drac role.
|
||||||
|
#controller_bios_config_default:
|
||||||
|
|
||||||
|
# Dict of additional controller BIOS options. Format is same as that used by
|
||||||
|
# stackhpc.drac role.
|
||||||
|
#controller_bios_config_extra:
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Controller node RAID configuration.
|
||||||
|
|
||||||
|
# List of controller RAID volumes. Format is same as that used by stackhpc.drac
|
||||||
|
# role.
|
||||||
|
#controller_raid_config:
|
||||||
|
|
||||||
|
# List of default controller RAID volumes. Format is same as that used by
|
||||||
|
# stackhpc.drac role.
|
||||||
|
#controller_raid_config_default:
|
||||||
|
|
||||||
|
# List of additional controller RAID volumes. Format is same as that used by
|
||||||
|
# stackhpc.drac role.
|
||||||
|
#controller_raid_config_extra:
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Controller node LVM configuration.
|
# Controller node LVM configuration.
|
||||||
|
|
||||||
|
@ -293,25 +293,22 @@ class OvercloudInventoryDiscover(KayobeAnsibleMixin, Command):
|
|||||||
tags="config")
|
tags="config")
|
||||||
|
|
||||||
|
|
||||||
|
class OvercloudBIOSRAIDConfigure(KayobeAnsibleMixin, Command):
|
||||||
|
"""Configure BIOS and RAID for the overcloud hosts."""
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
self.app.LOG.debug("Configure overcloud BIOS and RAID")
|
||||||
|
playbooks = _build_playbook_list("overcloud-bios-raid")
|
||||||
|
self.run_kayobe_playbooks(parsed_args, playbooks)
|
||||||
|
|
||||||
|
|
||||||
class OvercloudProvision(KayobeAnsibleMixin, Command):
|
class OvercloudProvision(KayobeAnsibleMixin, Command):
|
||||||
"""Provision the overcloud."""
|
"""Provision the overcloud."""
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
self.app.LOG.debug("Provisioning overcloud")
|
self.app.LOG.debug("Provisioning overcloud")
|
||||||
self._configure_network(parsed_args)
|
playbooks = _build_playbook_list("overcloud-provision")
|
||||||
self._configure_bios_and_raid(parsed_args)
|
self.run_kayobe_playbooks(parsed_args, playbooks)
|
||||||
self._deploy_servers(parsed_args)
|
|
||||||
|
|
||||||
def _configure_network(self, parsed_args):
|
|
||||||
self.app.LOG.debug("TODO: configure overcloud network")
|
|
||||||
|
|
||||||
def _configure_bios_and_raid(self, parsed_args):
|
|
||||||
self.app.LOG.debug("TODO: configure overcloud BIOS and RAID")
|
|
||||||
|
|
||||||
def _deploy_servers(self, parsed_args):
|
|
||||||
self.app.LOG.debug("Deploying overcloud servers via Bifrost")
|
|
||||||
self.run_kayobe_playbook(parsed_args,
|
|
||||||
"ansible/overcloud-provision.yml")
|
|
||||||
|
|
||||||
|
|
||||||
class OvercloudDeprovision(KayobeAnsibleMixin, Command):
|
class OvercloudDeprovision(KayobeAnsibleMixin, Command):
|
||||||
@ -319,8 +316,8 @@ class OvercloudDeprovision(KayobeAnsibleMixin, Command):
|
|||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
self.app.LOG.debug("Deprovisioning overcloud")
|
self.app.LOG.debug("Deprovisioning overcloud")
|
||||||
self.run_kayobe_playbook(parsed_args,
|
playbooks = _build_playbook_list("overcloud-deprovision")
|
||||||
"ansible/overcloud-deprovision.yml")
|
self.run_kayobe_playbooks(parsed_args, playbooks)
|
||||||
|
|
||||||
|
|
||||||
class OvercloudHostConfigure(KollaAnsibleMixin, KayobeAnsibleMixin, Command):
|
class OvercloudHostConfigure(KollaAnsibleMixin, KayobeAnsibleMixin, Command):
|
||||||
|
1
setup.py
1
setup.py
@ -40,6 +40,7 @@ setup(
|
|||||||
'control_host_bootstrap = kayobe.cli.commands:ControlHostBootstrap',
|
'control_host_bootstrap = kayobe.cli.commands:ControlHostBootstrap',
|
||||||
'configuration_dump = kayobe.cli.commands:ConfigurationDump',
|
'configuration_dump = kayobe.cli.commands:ConfigurationDump',
|
||||||
'kolla_ansible_run = kayobe.cli.commands:KollaAnsibleRun',
|
'kolla_ansible_run = kayobe.cli.commands:KollaAnsibleRun',
|
||||||
|
'overcloud_bios_raid_configure = kayobe.cli.commands:OvercloudBIOSRAIDConfigure',
|
||||||
'overcloud_container_image_build = kayobe.cli.commands:OvercloudContainerImageBuild',
|
'overcloud_container_image_build = kayobe.cli.commands:OvercloudContainerImageBuild',
|
||||||
'overcloud_container_image_pull = kayobe.cli.commands:OvercloudContainerImagePull',
|
'overcloud_container_image_pull = kayobe.cli.commands:OvercloudContainerImagePull',
|
||||||
'overcloud_deprovision = kayobe.cli.commands:OvercloudDeprovision',
|
'overcloud_deprovision = kayobe.cli.commands:OvercloudDeprovision',
|
||||||
|
Loading…
Reference in New Issue
Block a user