Add raid configuration playbook and options
This change adds the baremetal raid configuration option to the os_baremetal_clean_node module. This was added here because cleaning has a direct connection to raid configuration within the API and CLI so it makes sense to couple these things within the same module. The module will now handle the raid_config option and apply the configuration to all node_uuid(s) provided prior to running a cleaning event. Story: 2007212 Task: 38449 Change-Id: I51b1977b53995c93eb661f9ffa6d7cbad033ab75 Signed-off-by: Kevin Carter <kecarter@redhat.com>
This commit is contained in:
parent
b595bacddb
commit
a2ea23670a
@ -81,6 +81,11 @@ options:
|
||||
type: int
|
||||
required: False
|
||||
default: 20
|
||||
raid_config:
|
||||
description:
|
||||
- Sets the raid configuration for a given node.
|
||||
type: dict
|
||||
required: False
|
||||
requirements: ["openstacksdk"]
|
||||
'''
|
||||
|
||||
@ -342,6 +347,11 @@ EXAMPLES = '''
|
||||
cloud: undercloud
|
||||
node_uuid:
|
||||
- 0593c323-ad62-4ce9-b431-3c322827a428
|
||||
raid_config:
|
||||
logical_disks:
|
||||
- "size_gb": 100
|
||||
"raid_level": "1"
|
||||
"controller": "software"
|
||||
clean_steps:
|
||||
- interface: raid
|
||||
step: delete_configuration
|
||||
@ -384,6 +394,8 @@ import yaml
|
||||
|
||||
from concurrent import futures
|
||||
|
||||
from openstack import exceptions
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
from ansible.module_utils.openstack import (openstack_full_argument_spec,
|
||||
openstack_module_kwargs,
|
||||
@ -396,7 +408,34 @@ def parallel_nodes_cleaning(conn, module):
|
||||
nodes = module.params['node_uuid'] + module.params['node_name']
|
||||
clean_steps = module.params['clean_steps']
|
||||
result = {}
|
||||
workers = min(len(nodes), module.params['concurrency'])
|
||||
|
||||
if module.params['raid_config']:
|
||||
for node in nodes:
|
||||
try:
|
||||
node_info = client.update_node(
|
||||
node,
|
||||
target_raid_config=module.params['raid_config']
|
||||
)
|
||||
result.update({node: {
|
||||
'msg': 'Setting the raid configuration'
|
||||
' for node {} succeeded.'.format(node),
|
||||
'failed': False,
|
||||
'info': node_info,
|
||||
}})
|
||||
except exceptions.BadRequestException as e:
|
||||
result.update({node: {
|
||||
'msg': 'Setting raid configuration'
|
||||
' for node {} failed. Error: {}'.format(
|
||||
node,
|
||||
str(e)
|
||||
),
|
||||
'failed': True,
|
||||
'error': str(e),
|
||||
'info': {},
|
||||
}})
|
||||
nodes.pop(nodes.index(node))
|
||||
|
||||
workers = min(len(nodes), module.params['concurrency']) or 1
|
||||
with futures.ThreadPoolExecutor(max_workers=workers) as executor:
|
||||
future_to_build = {
|
||||
executor.submit(
|
||||
|
73
tripleo_ansible/playbooks/cli-baremetal-raid.yaml
Normal file
73
tripleo_ansible/playbooks/cli-baremetal-raid.yaml
Normal file
@ -0,0 +1,73 @@
|
||||
---
|
||||
# Copyright 2019 Red Hat, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
|
||||
- name: Baremetal cleaning for multiple Ironic Nodes
|
||||
connection: "{{ (tripleo_target_host is defined) | ternary('ssh', 'local') }}"
|
||||
hosts: "{{ tripleo_target_host | default('localhost') }}"
|
||||
remote_user: "{{ tripleo_target_user | default(lookup('env', 'USER')) }}"
|
||||
gather_facts: "{{ (tripleo_target_host is defined) | ternary(true, false) }}"
|
||||
any_errors_fatal: true
|
||||
vars:
|
||||
run_validations: false
|
||||
concurrency: 20
|
||||
max_retries: 2
|
||||
node_timeout: 1200
|
||||
pre_tasks:
|
||||
- name: Check for required inputs
|
||||
fail:
|
||||
msg: >
|
||||
Input missing `{{ item }}`
|
||||
when:
|
||||
- hostvars[inventory_hostname][item] is undefined
|
||||
loop:
|
||||
- node_uuids
|
||||
- raid_configuration
|
||||
|
||||
tasks:
|
||||
- name: Set node_uuids_raid fact
|
||||
set_fact:
|
||||
node_uuids_raid: "{{ node_uuids }}"
|
||||
|
||||
- name: exit if nothing to do
|
||||
block:
|
||||
- name: Notice
|
||||
debug:
|
||||
msg: No nodes are manageable at this time.
|
||||
|
||||
- name: end play
|
||||
meta: end_play
|
||||
when:
|
||||
- (node_uuids_raid | length) < 1
|
||||
|
||||
- name: Notice
|
||||
debug:
|
||||
msg: >-
|
||||
Running raid config on the following nodes, {{ node_uuids_raid }}.
|
||||
|
||||
- name: Start baremetal raid configuration
|
||||
os_baremetal_clean_node:
|
||||
cloud: undercloud
|
||||
node_uuid: "{{ node_uuids_raid }}"
|
||||
concurrency: "{{ concurrency }}"
|
||||
raid_config: "{{ raid_configuration }}"
|
||||
timeout: "{{ node_timeout }}"
|
||||
clean_steps:
|
||||
- interface: raid
|
||||
step: delete_configuration
|
||||
- interface: deploy
|
||||
step: erase_devices_metadata
|
||||
- interface: raid
|
||||
step: create_configuration
|
Loading…
Reference in New Issue
Block a user