diff --git a/roles/tripleo_overcloud_node_provide/README.md b/roles/tripleo_overcloud_node_provide/README.md new file mode 100644 index 0000000..eb4dd54 --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/README.md @@ -0,0 +1,57 @@ +tripleo_overcloud_node_provide +============================== + +A role to set nodes in a manageable state to available. + +Requirements +------------ + +Requires the username and password found in the ~/stackrc file on the undercloud. + +Role Variables +-------------- + +* `tripleo_overcloud_node_provide_all_manageable`: (Boolean) Provide all nodes in manageable state. REQUIRED if UUIDs are not passed. Default: False +* `tripleo_overcloud_node_provide_debug`: (Boolean) Flag to print out the delete command. Default: False +* `tripleo_overcloud_node_provide_home_dir`: (String) Home directory to where the command is run from. Default: "{{ ansible_env.HOME }}" +* `tripleo_overcloud_node_provide_log_combine`: (Boolean) Flag to enable captching stderr with stdout. Default: true +* `tripleo_overcloud_node_provide_log_output`: (Boolean) Flag to enable logging to a file. Since the output of this command can be large, it is not recommended to disable this. Default: true +* `tripleo_overcloud_node_provide_log`: (String) Path to a log file for the command output. Default: "{{ tripleo_overcloud_node_provide_home_dir }}/overcloud_node_provide.log" +* `tripleo_overcloud_node_provide_node_uuids`: (List) List of UUIDs to provide. REQUIRED if '--all-manageable' is not passed. Default [] +* `tripleo_overcloud_node_provide_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_provide_rc_file`. +* `tripleo_overcloud_node_provide_poll`: (Integer) Number of seconds to wait between each checks to see if the command has completed. Default: 10 +* `tripleo_overcloud_node_provide_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" +* `tripleo_overcloud_node_provide_timeout`: (Integer) Number in seconds to wait for the ansible execution of the command to finish. Default: 3600 + +Output Variables +---------------- + +* `tripleo_overcloud_node_provide_output`: (String) The command standard output. +* `tripleo_overcloud_node_provide_result`: Ansible shell execution results + +Dependencies +------------ + +None. + +Example Playbook +---------------- + +Example overcloud node provide playbook + +```yaml +- hosts: undercloud + gather_facts: true + tasks: + - name: Set overcloud nodes to available (provide nodes) + import_role: + name: tripleo_overcloud_node_provide + vars: + tripleo_overcloud_node_provide_node_uuids: + - 4ca0448a-3892-4fc8-aea1-1834ac3c0caa +``` + +License +------- + +Apache-2.0 diff --git a/roles/tripleo_overcloud_node_provide/defaults/main.yml b/roles/tripleo_overcloud_node_provide/defaults/main.yml new file mode 100644 index 0000000..2c9d38d --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/defaults/main.yml @@ -0,0 +1,14 @@ +--- +# defaults file for tripleo_overcloud_node_provide +openstack_bin: openstack +tripleo_overcloud_node_provide_all_manageable: false +tripleo_overcloud_node_provide_debug: false +tripleo_overcloud_node_provide_home_dir: "{{ ansible_env.HOME }}" +tripleo_overcloud_node_provide_log: "{{ tripleo_overcloud_node_provide_home_dir }}/overcloud_node_provide.log" +tripleo_overcloud_node_provide_log_combine: true +tripleo_overcloud_node_provide_log_output: true +tripleo_overcloud_node_provide_node_uuids: [] +tripleo_overcloud_node_provide_os_cloud: "{{ tripleo_os_cloud | default('') }}" +tripleo_overcloud_node_provide_poll: 1 +tripleo_overcloud_node_provide_rc_file: "{{ tripleo_rc_file | default(ansible_env.HOME ~ '/stackrc') }}" +tripleo_overcloud_node_provide_timeout: 600 diff --git a/roles/tripleo_overcloud_node_provide/meta/main.yml b/roles/tripleo_overcloud_node_provide/meta/main.yml new file mode 100644 index 0000000..951ade1 --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/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_provide + 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_provide/molecule/default/converge.yml b/roles/tripleo_overcloud_node_provide/molecule/default/converge.yml new file mode 100644 index 0000000..d078280 --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/molecule/default/converge.yml @@ -0,0 +1,50 @@ +--- +- name: Converge + hosts: all + collections: + - tripleo.operator + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_provide_log_output: false + tripleo_overcloud_node_provide_poll: 1 + tripleo_overcloud_node_provide_debug: true + tasks: + + - name: "Include tripleo_overcloud_node_provide" + include_role: + name: "tripleo_overcloud_node_provide" + vars: + tripleo_overcloud_node_provide_all_manageable: true + + - name: Check role + assert: + that: + - tripleo_overcloud_node_provide_output == "overcloud node provide --all-manageable" + + - name: Assert "tripleo_overcloud_node_provide_node_uuids" + include_role: + name: "tripleo_overcloud_node_provide" + vars: + tripleo_overcloud_node_provide_node_uuids: + - a + - b + + - name: Validate tripleo_overcloud_node_provide_node_uuids + assert: + that: + - tripleo_overcloud_node_provide_output == "overcloud node provide a b" + + - name: Check validation + block: + - name: Include tripleo_overcloud_node_provide with no options + include_role: + name: "tripleo_overcloud_node_provide" + - name: Fail if it worked + fail: + msg: No provided vars succeeded (validation failed) + rescue: + - name: Validate tripleo_overcloud_node_provide validation worked + assert: + that: + - true diff --git a/roles/tripleo_overcloud_node_provide/molecule/default/molecule.yml b/roles/tripleo_overcloud_node_provide/molecule/default/molecule.yml new file mode 100644 index 0000000..2841806 --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/molecule/default/molecule.yml @@ -0,0 +1,19 @@ +--- +driver: + name: delegated + options: + managed: false + ansible_connection_options: + ansible_connection: local +log: true +platforms: + - name: instance +provisioner: + name: ansible +scenario: + name: default + test_sequence: + - prepare + - syntax + - converge + - verify diff --git a/roles/tripleo_overcloud_node_provide/molecule/default/prepare.yml b/roles/tripleo_overcloud_node_provide/molecule/default/prepare.yml new file mode 100644 index 0000000..63bb6ab --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/molecule/default/prepare.yml @@ -0,0 +1,8 @@ +--- +- name: Prepare + hosts: all + tasks: + + - name: Include molecule prep + include_role: + name: test_molecule_prep diff --git a/roles/tripleo_overcloud_node_provide/tasks/main.yml b/roles/tripleo_overcloud_node_provide/tasks/main.yml new file mode 100644 index 0000000..792f3e8 --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/tasks/main.yml @@ -0,0 +1,55 @@ +--- +# tasks file for tripleo_overcloud_node_provide +- name: Check that at least one input variable is not empty + fail: + msg: "At least one non-empty variable must be passed." + when: > + (not tripleo_overcloud_node_provide_all_manageable|bool and + tripleo_overcloud_node_provide_node_uuids|length < 1) + +- name: Check that both input variables are not passed together + fail: + msg: "Do not pass both '--all-manageable' and a node UUID list." + when: + - tripleo_overcloud_node_provide_all_manageable|bool + - tripleo_overcloud_node_provide_node_uuids|length > 0 + +- name: Setup overcloud node provide facts + set_fact: + _provide_cmd: >- + {{ tripleo_overcloud_node_provide_os_cloud | ternary('', "source " ~ tripleo_overcloud_node_provide_rc_file ~ "; ") }} + {{ openstack_bin }} overcloud node provide + {{ tripleo_overcloud_node_provide_all_manageable | ternary('--all-manageable', '') }} + {{ tripleo_overcloud_node_provide_node_uuids | tripleo.operator.shell_arg_list() }} + {{ tripleo_overcloud_node_provide_log_output | ternary((">" ~ tripleo_overcloud_node_provide_log), '') }} + {{ tripleo_overcloud_node_provide_log_combine | ternary("2>&1", '') }} + _provide_env: + OS_CLOUD: "{{ tripleo_overcloud_node_provide_os_cloud }}" + +- name: Show debug information + when: tripleo_overcloud_node_provide_debug|bool + block: + - name: Show the command + debug: + var: _provide_cmd + + - name: Show the environment + debug: + var: _provide_env + +- name: Run overcloud node provide + shell: "{{ _provide_cmd }}" # noqa 305 + environment: "{{ _provide_env }}" + args: + executable: /bin/bash + chdir: "{{ tripleo_overcloud_node_provide_home_dir }}" + warn: false + register: tripleo_overcloud_node_provide_result + async: "{{ tripleo_overcloud_node_provide_timeout }}" + poll: "{{ tripleo_overcloud_node_provide_poll }}" + changed_when: false + when: not ansible_check_mode|bool + +- name: Set output fact + set_fact: + tripleo_overcloud_node_provide_output: "{{ tripleo_overcloud_node_provide_result.stdout }}" diff --git a/roles/tripleo_overcloud_node_provide/tests/inventory b/roles/tripleo_overcloud_node_provide/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/roles/tripleo_overcloud_node_provide/tests/test.yml b/roles/tripleo_overcloud_node_provide/tests/test.yml new file mode 100644 index 0000000..b2b5c51 --- /dev/null +++ b/roles/tripleo_overcloud_node_provide/tests/test.yml @@ -0,0 +1,7 @@ +--- +- hosts: localhost + remote_user: root + roles: + - tripleo_overcloud_node_provide + vars: + - tripleo_overcloud_node_provide_all_manageable: --all-manageable diff --git a/zuul.d/molecule.yaml b/zuul.d/molecule.yaml index 6abb3db..a8fbd9d 100644 --- a/zuul.d/molecule.yaml +++ b/zuul.d/molecule.yaml @@ -26,6 +26,7 @@ - tripleo-operator-molecule-tripleo_overcloud_node_discover - tripleo-operator-molecule-tripleo_overcloud_node_introspect - tripleo-operator-molecule-tripleo_overcloud_node_import + - tripleo-operator-molecule-tripleo_overcloud_node_provide - tripleo-operator-molecule-tripleo_overcloud_update_converge - tripleo-operator-molecule-tripleo_overcloud_update_prepare - tripleo-operator-molecule-tripleo_overcloud_update_run @@ -63,6 +64,7 @@ - tripleo-operator-molecule-tripleo_overcloud_node_discover - tripleo-operator-molecule-tripleo_overcloud_node_introspect - tripleo-operator-molecule-tripleo_overcloud_node_import + - tripleo-operator-molecule-tripleo_overcloud_node_provide - tripleo-operator-molecule-tripleo_overcloud_update_converge - tripleo-operator-molecule-tripleo_overcloud_update_prepare - tripleo-operator-molecule-tripleo_overcloud_update_run @@ -317,6 +319,20 @@ vars: tox_extra_args: tripleo_overcloud_node_import +- job: + files: + - ^roles/tripleo_overcloud_node_provide/.* + - ^bindep.txt + - ^galaxy.yml + - ^requirements.txt + - ^setup.cfg + - ^test-requirements.txt + - ^tox.ini + name: tripleo-operator-molecule-tripleo_overcloud_node_provide + parent: tripleo-operator-molecule-base + vars: + tox_extra_args: tripleo_overcloud_node_provide + - job: files: - ^roles/tripleo_overcloud_node_configure/.*