diff --git a/roles/tripleo_overcloud_node_configure/README.md b/roles/tripleo_overcloud_node_configure/README.md new file mode 100644 index 0000000..1c452d1 --- /dev/null +++ b/roles/tripleo_overcloud_node_configure/README.md @@ -0,0 +1,60 @@ +tripleo_overcloud_node_configure +======================== + +A role to run a node configuration. + +Requirements +------------ + +None. + +Role Variables +-------------- + +* `tripleo_overcloud_node_configure_node_uuids`: Baremetal Node UUIDs for the node(s) to be configured +* `tripleo_overcloud_node_configure_all_manageable`: Configure all nodes currently in 'manageable' state +* `tripleo_overcloud_node_configure_deploy_kernel`: Image with deploy kernel. +* `tripleo_overcloud_node_configure_deploy_ramdisk`: Image with deploy ramdisk. +* `tripleo_overcloud_node_configure_instance_boot_option`: Whether to set instances for booting from local hard drive (local) or network (netboot). +* `tripleo_overcloud_node_configure_root_device`: Define the root device for nodes. + Can be either a list of device names (without /dev) to choose from or one of two strategies: largest or smallest. + For it to work this command should be run after the introspection. +* `tripleo_overcloud_node_configure_root_device_minimum_size`: Minimum size (in GiB) of the detected root device. Used with --root-device. +* `tripleo_overcloud_node_configure_overwrite_root_device_hints`: Whether to overwrite existing root device hints when --root-device is used. +* `tripleo_overcloud_node_configure_os_cloud`: (String) (String) OS_CLOUD value to use when running the command. If `tripleo_os_cloud` is defined, it will be the default. Otherwise the default is ''. This variable takes precedence over `tripleo_overcloud_node_configure_rc_file`. +* `tripleo_overcloud_node_configure_rc_file`: (String) (String) Path to the credential file to use. If `tripleo_rc_file` is defined, it will be the default. Default: "{{ ansible_env.HOME }}/stackrc" + +NOTE: Please note that this command should be run against the undercloud so the +OS_CLOUD or rc file variables should be set to use the 'undercloud' when +calling this role. If you are not defining `tripleo_os_cloud` or `tripleo_rc_file`, +stackrc will be used by default. + +Output Variables +---------------- + +* `tripleo_overcloud_node_configure_output`: (String) The command standard output. +* `tripleo_overcloud_node_configure_result`: Ansible shell execution results + +Dependencies +------------ + +None. + +Example Playbook +---------------- + +Example overcloud node configuration playbook + +```yaml +- hosts: undercloud + gather_facts: true + tasks: + - name: Configure node + import_role: + name: tripleo_overcloud_node_configure +``` + +License +------- + +Apache-2.0 diff --git a/roles/tripleo_overcloud_node_configure/defaults/main.yml b/roles/tripleo_overcloud_node_configure/defaults/main.yml new file mode 100644 index 0000000..b56e576 --- /dev/null +++ b/roles/tripleo_overcloud_node_configure/defaults/main.yml @@ -0,0 +1,14 @@ +--- +# defaults file for tripleo_overcloud_node_configure +openstack_bin: openstack +tripleo_overcloud_node_configure_debug: false +tripleo_overcloud_node_configure_node_uuids: [] +tripleo_overcloud_node_configure_all_manageable: false +tripleo_overcloud_node_configure_deploy_kernel: +tripleo_overcloud_node_configure_deploy_ramdisk: +tripleo_overcloud_node_configure_instance_boot_option: +tripleo_overcloud_node_configure_root_device: +tripleo_overcloud_node_configure_root_device_minimum_size: +tripleo_overcloud_node_configure_overwrite_root_device_hints: false +tripleo_overcloud_node_configure_os_cloud: "{{ tripleo_os_cloud | default('') }}" +tripleo_overcloud_node_configure_rc_file: "{{ tripleo_rc_file | default(ansible_env.HOME ~ '/stackrc') }}" diff --git a/roles/tripleo_overcloud_node_configure/meta/main.yml b/roles/tripleo_overcloud_node_configure/meta/main.yml new file mode 100644 index 0000000..c0ad953 --- /dev/null +++ b/roles/tripleo_overcloud_node_configure/meta/main.yml @@ -0,0 +1,42 @@ +--- +# 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. + + +galaxy_info: + author: OpenStack + description: TripleO Operator Role -- tripleo_overcloud_node_configure + company: Red Hat + license: Apache-2.0 + min_ansible_version: 2.8 + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + platforms: + - name: CentOS + versions: + - 7 + - 8 + + galaxy_tags: + - tripleo + + +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +dependencies: [] diff --git a/roles/tripleo_overcloud_node_configure/molecule/default/molecule.yml b/roles/tripleo_overcloud_node_configure/molecule/default/molecule.yml new file mode 100644 index 0000000..d2d5bd5 --- /dev/null +++ b/roles/tripleo_overcloud_node_configure/molecule/default/molecule.yml @@ -0,0 +1,21 @@ +--- +driver: + name: delegated + options: + managed: false + ansible_connection_options: + ansible_connection: local +log: true +lint: + name: yamllint + enabled: false +platforms: + - name: instance +provisioner: + name: ansible +scenario: + name: default + test_sequence: + - syntax + - converge + - verify diff --git a/roles/tripleo_overcloud_node_configure/molecule/default/playbook.yml b/roles/tripleo_overcloud_node_configure/molecule/default/playbook.yml new file mode 100644 index 0000000..35c71c6 --- /dev/null +++ b/roles/tripleo_overcloud_node_configure/molecule/default/playbook.yml @@ -0,0 +1,153 @@ +--- +- name: Converge + hosts: all + tasks: + + - name: "Include tripleo_overcloud_node_configure" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_overcloud_node_configure_debug: true + tripleo_os_cloud: undercloud + + - name: Check role + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure" + + - name: Check parameter "tripleo_overcloud_node_configure_node_uuids" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_node_uuids: ['test1', 'test2'] + + - name: Assert "tripleo_overcloud_node_configure_node_uuids" + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure test1 test2" + + - name: Check parameter "tripleo_overcloud_node_configure_all_manageable" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_all_manageable: true + + - name: Assert "tripleo_overcloud_node_configure_all_manageable" + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure --all-manageable" + + - name: Check parameter "tripleo_overcloud_node_configure_deploy_kernel" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_deploy_kernel: value + + - name: Assert "tripleo_overcloud_node_configure_deploy_kernel" + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure --deploy-kernel value" + + - name: Check parameter "tripleo_overcloud_node_configure_deploy_ramdisk" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_deploy_ramdisk: value + + - name: Assert "tripleo_overcloud_node_configure_deploy_ramdisk" + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure --deploy-ramdisk value" + + - name: Check parameter "tripleo_overcloud_node_configure_instance_boot_option" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_instance_boot_option: value + + - name: Assert "tripleo_overcloud_node_configure_instance_boot_option" + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure --instance-boot-option value" + + - name: Check parameter "tripleo_overcloud_node_configure_root_device" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_root_device: value + + - name: Assert "tripleo_overcloud_node_configure_root_device" + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure --root-device value" + + - name: Check parameter "tripleo_overcloud_node_configure_root_device_minimum_size" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_root_device_minimum_size: value + + - name: Assert "tripleo_overcloud_node_configure_root_device_minimum_size" + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure --root-device-minimum-size value" + + - name: Check parameter "tripleo_overcloud_node_configure_overwrite_root_device_hints" + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_overwrite_root_device_hints: true + + - name: Assert "tripleo_overcloud_node_configure_overwrite_root_device_hints" + assert: + that: + - tripleo_overcloud_node_configure_output == "overcloud node configure --overwrite-root-device-hints" + + + - name: Check all parameters for role tripleo_overcloud_node_configure + include_role: + name: "tripleo_overcloud_node_configure" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_configure_debug: true + tripleo_overcloud_node_configure_node_uuids: ['value1', 'value2'] + tripleo_overcloud_node_configure_all_manageable: true + tripleo_overcloud_node_configure_deploy_kernel: value + tripleo_overcloud_node_configure_deploy_ramdisk: value + tripleo_overcloud_node_configure_instance_boot_option: value + tripleo_overcloud_node_configure_root_device: value + tripleo_overcloud_node_configure_root_device_minimum_size: value + tripleo_overcloud_node_configure_overwrite_root_device_hints: true + + - name: Assert all parameters for role tripleo_overcloud_node_configure + assert: + that: + - tripleo_overcloud_node_configure_output == + "overcloud node configure value1 value2 --all-manageable --deploy-kernel value --deploy-ramdisk value --instance-boot-option value + --root-device value --root-device-minimum-size value --overwrite-root-device-hints" diff --git a/roles/tripleo_overcloud_node_configure/tasks/main.yml b/roles/tripleo_overcloud_node_configure/tasks/main.yml new file mode 100644 index 0000000..616ed07 --- /dev/null +++ b/roles/tripleo_overcloud_node_configure/tasks/main.yml @@ -0,0 +1,32 @@ +--- +# tasks file for tripleo_overcloud_node_configure +- name: Setup overcloud node configure command + set_fact: + _configure_cmd: >- + {{ tripleo_overcloud_node_configure_os_cloud | ternary('', "source " ~ tripleo_overcloud_node_configure_rc_file ~ "; ") }} + {{ openstack_bin }} overcloud node configure + {{ tripleo_overcloud_node_configure_node_uuids | join(' ') }} + {{ tripleo_overcloud_node_configure_all_manageable | ternary('--all-manageable', '') }} + {{ tripleo_overcloud_node_configure_deploy_kernel | ternary('--deploy-kernel ' ~ tripleo_overcloud_node_configure_deploy_kernel, '') }} + {{ tripleo_overcloud_node_configure_deploy_ramdisk | ternary('--deploy-ramdisk ' ~ tripleo_overcloud_node_configure_deploy_ramdisk, '') }} + {{ tripleo_overcloud_node_configure_instance_boot_option | ternary('--instance-boot-option ' + ~ tripleo_overcloud_node_configure_instance_boot_option, '') }} + {{ tripleo_overcloud_node_configure_root_device | ternary('--root-device ' ~ tripleo_overcloud_node_configure_root_device, '') }} + {{ tripleo_overcloud_node_configure_root_device_minimum_size | ternary('--root-device-minimum-size ' + ~ tripleo_overcloud_node_configure_root_device_minimum_size, '') }} + {{ tripleo_overcloud_node_configure_overwrite_root_device_hints | ternary('--overwrite-root-device-hints', '') }} + + +- name: Show the node configure command + debug: + var: _configure_cmd + when: tripleo_overcloud_node_configure_debug|bool + +- name: Configure node + shell: "{{ _configure_cmd }}" # noqa 305 + register: tripleo_overcloud_node_configure_result + changed_when: true + +- name: Set output fact + set_fact: + tripleo_overcloud_node_configure_output: "{{ tripleo_overcloud_node_configure_result.stdout }}" diff --git a/roles/tripleo_overcloud_node_configure/tests/inventory b/roles/tripleo_overcloud_node_configure/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/roles/tripleo_overcloud_node_configure/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/roles/tripleo_overcloud_node_configure/tests/test.yml b/roles/tripleo_overcloud_node_configure/tests/test.yml new file mode 100644 index 0000000..1ce58e7 --- /dev/null +++ b/roles/tripleo_overcloud_node_configure/tests/test.yml @@ -0,0 +1,4 @@ +--- +- hosts: localhost + roles: + - tripleo_overcloud_node_configure diff --git a/zuul.d/molecule.yaml b/zuul.d/molecule.yaml index d813d63..a72569c 100644 --- a/zuul.d/molecule.yaml +++ b/zuul.d/molecule.yaml @@ -3,10 +3,12 @@ check: jobs: - tripleo-operator-molecule-tripleo_overcloud_node_introspect + - tripleo-operator-molecule-tripleo_overcloud_node_configure gate: jobs: - tripleo-operator-molecule-tripleo_overcloud_node_introspect + - tripleo-operator-molecule-tripleo_overcloud_node_configure - job: name: tripleo-operator-molecule-base @@ -22,3 +24,11 @@ parent: tripleo-operator-molecule-base vars: tox_extra_args: tripleo_overcloud_node_introspect + +- job: + files: + - ^roles/tripleo_overcloud_node_configure/.* + name: tripleo-operator-molecule-tripleo_overcloud_node_configure + parent: tripleo-operator-molecule-base + vars: + tox_extra_args: tripleo_overcloud_node_configure