diff --git a/roles/tripleo_overcloud_node_discover/README.md b/roles/tripleo_overcloud_node_discover/README.md new file mode 100644 index 0000000..3b3a60a --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/README.md @@ -0,0 +1,62 @@ +tripleo_overcloud_node_discover +======================== + +A role to run node discover. + +Requirements +------------ + +None. + +Role Variables +-------------- + +* `tripleo_overcloud_node_discover_ip`: IP address(es) to probe. +* `tripleo_overcloud_node_discover_range`: IP range to probe. +* `tripleo_overcloud_node_discover_credentials`: Key/value pairs of possible credentials. +* `tripleo_overcloud_node_discover_port`: BMC port(s) to probe. +* `tripleo_overcloud_node_discover_introspect`: (Bool) Introspect the imported nodes. +* `tripleo_overcloud_node_discover_run_validations`: (Bool) Run the pre-deployment validations. These external validations are + from the TripleO Validations project. +* `tripleo_overcloud_node_discover_provide`: (Bool) Provide (make available) the nodes. +* `tripleo_overcloud_node_discover_no_deploy_image`: (Bool) Skip setting the deploy kernel and ramdisk. +* `tripleo_overcloud_node_discover_instance_boot_option`: Whether to set instances for booting from local hard drive (local) + or network (netboot). +* `tripleo_overcloud_node_discover_concurrency`: Maximum number of nodes to introspect at once. +* `tripleo_overcloud_node_discover_os_cloud`: (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_discover_rc_file`. +* `tripleo_overcloud_node_discover_rc_file`: (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_discover_output`: (String) The command standard output. +* `tripleo_overcloud_node_discover_result`: Ansible shell execution results + +Dependencies +------------ + +None. + +Example Playbook +---------------- + +Example overcloud node discover playbook + +```yaml +- hosts: undercloud + gather_facts: true + tasks: + - name: Discover node + import_role: + name: tripleo_overcloud_node_discover +``` + +License +------- + +Apache-2.0 diff --git a/roles/tripleo_overcloud_node_discover/defaults/main.yml b/roles/tripleo_overcloud_node_discover/defaults/main.yml new file mode 100644 index 0000000..30529da --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/defaults/main.yml @@ -0,0 +1,16 @@ +--- +# defaults file for tripleo_overcloud_node_discover +openstack_bin: openstack +tripleo_overcloud_node_discover_debug: false +tripleo_overcloud_node_discover_ip: +tripleo_overcloud_node_discover_range: +tripleo_overcloud_node_discover_credentials: +tripleo_overcloud_node_discover_port: +tripleo_overcloud_node_discover_introspect: false +tripleo_overcloud_node_discover_run_validations: false +tripleo_overcloud_node_discover_provide: false +tripleo_overcloud_node_discover_no_deploy_image: false +tripleo_overcloud_node_discover_instance_boot_option: +tripleo_overcloud_node_discover_concurrency: +tripleo_overcloud_node_discover_os_cloud: "{{ tripleo_os_cloud | default('') }}" +tripleo_overcloud_node_discover_rc_file: "{{ tripleo_rc_file | default(ansible_env.HOME ~ '/stackrc') }}" diff --git a/roles/tripleo_overcloud_node_discover/meta/main.yml b/roles/tripleo_overcloud_node_discover/meta/main.yml new file mode 100644 index 0000000..748d6e9 --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/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_discover + 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_discover/molecule/default/converge.yml b/roles/tripleo_overcloud_node_discover/molecule/default/converge.yml new file mode 100644 index 0000000..5dddcf6 --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/molecule/default/converge.yml @@ -0,0 +1,183 @@ +--- +- name: Converge + hosts: all + tasks: + + - name: "Include tripleo_overcloud_node_discover" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_overcloud_node_discover_debug: true + tripleo_os_cloud: undercloud + + - name: Check role + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover" + + - name: Check parameter "tripleo_overcloud_node_discover_ip" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_ip: value + + - name: Assert "tripleo_overcloud_node_discover_ip" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --ip value" + + - name: Check parameter "tripleo_overcloud_node_discover_range" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_range: value + + - name: Assert "tripleo_overcloud_node_discover_range" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --range value" + + - name: Check parameter "tripleo_overcloud_node_discover_credentials" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_credentials: value + + - name: Assert "tripleo_overcloud_node_discover_credentials" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --credentials value" + + - name: Check parameter "tripleo_overcloud_node_discover_port" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_port: value + + - name: Assert "tripleo_overcloud_node_discover_port" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --port value" + + - name: Check parameter "tripleo_overcloud_node_discover_introspect" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_introspect: true + + - name: Assert "tripleo_overcloud_node_discover_introspect" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --introspect" + + - name: Check parameter "tripleo_overcloud_node_discover_run_validations" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_run_validations: true + + - name: Assert "tripleo_overcloud_node_discover_run_validations" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --run-validations" + + - name: Check parameter "tripleo_overcloud_node_discover_provide" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_provide: true + + - name: Assert "tripleo_overcloud_node_discover_provide" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --provide" + + - name: Check parameter "tripleo_overcloud_node_discover_no_deploy_image" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_no_deploy_image: true + + - name: Assert "tripleo_overcloud_node_discover_no_deploy_image" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --no-deploy-image" + + - name: Check parameter "tripleo_overcloud_node_discover_instance_boot_option" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_instance_boot_option: value + + - name: Assert "tripleo_overcloud_node_discover_instance_boot_option" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --instance-boot-option value" + + - name: Check parameter "tripleo_overcloud_node_discover_concurrency" + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_concurrency: value + + - name: Assert "tripleo_overcloud_node_discover_concurrency" + assert: + that: + - tripleo_overcloud_node_discover_output == "overcloud node discover --concurrency value" + + + - name: Check all parameters for role tripleo_overcloud_node_discover + include_role: + name: "tripleo_overcloud_node_discover" + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_node_discover_debug: true + tripleo_overcloud_node_discover_ip: value + tripleo_overcloud_node_discover_range: value + tripleo_overcloud_node_discover_credentials: value + tripleo_overcloud_node_discover_port: value + tripleo_overcloud_node_discover_introspect: true + tripleo_overcloud_node_discover_run_validations: true + tripleo_overcloud_node_discover_provide: true + tripleo_overcloud_node_discover_no_deploy_image: true + tripleo_overcloud_node_discover_instance_boot_option: value + tripleo_overcloud_node_discover_concurrency: value + + - name: Assert all parameters for role tripleo_overcloud_node_discover + assert: + that: + - tripleo_overcloud_node_discover_output == + "overcloud node discover --ip value --range value --credentials value --port value --introspect + --run-validations --provide --no-deploy-image --instance-boot-option value --concurrency value" diff --git a/roles/tripleo_overcloud_node_discover/molecule/default/molecule.yml b/roles/tripleo_overcloud_node_discover/molecule/default/molecule.yml new file mode 100644 index 0000000..2841806 --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/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_discover/molecule/default/prepare.yml b/roles/tripleo_overcloud_node_discover/molecule/default/prepare.yml new file mode 100644 index 0000000..63bb6ab --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/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_discover/tasks/main.yml b/roles/tripleo_overcloud_node_discover/tasks/main.yml new file mode 100644 index 0000000..b3f534b --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/tasks/main.yml @@ -0,0 +1,42 @@ +--- +# tasks file for tripleo_overcloud_node_discover +- name: Setup overcloud node discover command + set_fact: + _discover_cmd: >- + {{ tripleo_overcloud_node_discover_os_cloud | ternary('', "source " ~ tripleo_overcloud_node_discover_rc_file ~ "; ") }} + {{ openstack_bin }} overcloud node discover + {{ tripleo_overcloud_node_discover_ip | tripleo.operator.shell_arg_list('--ip') }} + {{ tripleo_overcloud_node_discover_range | ternary('--range ' ~ tripleo_overcloud_node_discover_range, '') }} + {{ tripleo_overcloud_node_discover_credentials | tripleo.operator.shell_arg_list('--credentials') }} + {{ tripleo_overcloud_node_discover_port | tripleo.operator.shell_arg_list('--port') }} + {{ tripleo_overcloud_node_discover_introspect | ternary('--introspect', '') }} + {{ tripleo_overcloud_node_discover_run_validations | ternary('--run-validations', '') }} + {{ tripleo_overcloud_node_discover_provide | ternary('--provide', '') }} + {{ tripleo_overcloud_node_discover_no_deploy_image | ternary('--no-deploy-image', '') }} + {{ tripleo_overcloud_node_discover_instance_boot_option | ternary('--instance-boot-option ' + ~ tripleo_overcloud_node_discover_instance_boot_option, '') }} + {{ tripleo_overcloud_node_discover_concurrency | ternary('--concurrency ' ~ tripleo_overcloud_node_discover_concurrency, '') }} + + _discover_env: + OS_CLOUD: "{{ tripleo_overcloud_node_discover_os_cloud }}" + +- name: Show debug information + when: tripleo_overcloud_node_discover_debug|bool + block: + - name: Show the node discover command + debug: + var: _discover_cmd + + - name: Show the node discover environment + debug: + var: _discover_env + +- name: Discover node + shell: "{{ _discover_cmd }}" # noqa 305 + environment: "{{ _discover_env }}" + register: tripleo_overcloud_node_discover_result + changed_when: true + +- name: Set output fact + set_fact: + tripleo_overcloud_node_discover_output: "{{ tripleo_overcloud_node_discover_result.stdout }}" diff --git a/roles/tripleo_overcloud_node_discover/tests/inventory b/roles/tripleo_overcloud_node_discover/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/roles/tripleo_overcloud_node_discover/tests/test.yml b/roles/tripleo_overcloud_node_discover/tests/test.yml new file mode 100644 index 0000000..7942787 --- /dev/null +++ b/roles/tripleo_overcloud_node_discover/tests/test.yml @@ -0,0 +1,4 @@ +--- +- hosts: localhost + roles: + - tripleo_overcloud_node_discover diff --git a/zuul.d/molecule.yaml b/zuul.d/molecule.yaml index c926c34..336cb1f 100644 --- a/zuul.d/molecule.yaml +++ b/zuul.d/molecule.yaml @@ -21,6 +21,7 @@ - tripleo-operator-molecule-tripleo_overcloud_node_clean - tripleo-operator-molecule-tripleo_overcloud_node_configure - tripleo-operator-molecule-tripleo_overcloud_node_delete + - 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_undercloud_backup @@ -50,6 +51,7 @@ - tripleo-operator-molecule-tripleo_overcloud_node_clean - tripleo-operator-molecule-tripleo_overcloud_node_configure - tripleo-operator-molecule-tripleo_overcloud_node_delete + - 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_undercloud_backup @@ -309,6 +311,14 @@ vars: tox_extra_args: tripleo_overcloud_node_delete +- job: + files: + - ^roles/tripleo_overcloud_node_discover/.* + name: tripleo-operator-molecule-tripleo_overcloud_node_discover + parent: tripleo-operator-molecule-base + vars: + tox_extra_args: tripleo_overcloud_node_discover + - job: files: - ^roles/tripleo_container_image_prepare/.*