diff --git a/.ansible-lint b/.ansible-lint index a37c3f4f..3da10db0 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -7,4 +7,4 @@ skip_list: exclude_paths: - tests/integration - - changelogs/fragments + - changelogs/** diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 297a0407..eab8e6b8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,5 +1,46 @@ -Will be updated by antsibull-changelog. Do not edit this manually! +=============================== +Cloud.VMware\_Ops Release Notes +=============================== -See https://github.com/ansible-community/antsibull-changelog/blob/main/docs/changelogs.rst for information on how to use antsibull-changelog. +.. contents:: Topics -Check out ``changelogs/config.yaml`` for its configuration. You need to change at least the ``title`` field in there. +v1.2.0 +====== + +Minor Changes +------------- + +- Fix the README file of snapshot_management role to be more clear about the parameters `snapshot_management_folder` and `snapshot_management_vm_name` +- add_esxi_host_to_vcenter - Added new playbook to add an ESXi host to a vCenter +- cluster_settings - Added new playbook to modify cluster settings +- cluster_settings - Added new role for managing different cluster settings including DRM, DRS, vCLS, HA, and vSAN. Added integration tests for role +- disable_high_availability - Added playbook to disable high availbility in a vcenter cluster +- disable_maintenance_mode - Added new playbook to disable maintenance mode on an ESXi host +- enable_high_availability - Added playbook to enable and configure high availbility in a vcenter cluster +- enable_maintenance_mode - Added new playbook to enable maintenance mode on an ESXi host +- esxi_maintenance_mode - Added new role for setting an ESXi host's maintenance mode status. Added integration tests for role +- info - Fix creation of temporary files +- info - Fix the incorrect documentation +- manage_all_settings - Renamed and moved ``cluster_settings.yml`` playbook to ``cluster_settings\manage_all_settings.yml``. New location is with other cluster settings related plays +- provision_vcenter - Only use hdiutil to mount ISO on mac instead of hdiutil + mount. The new approach provides more consistent results when reading the ISO content as a file system +- provision_vcenter - Use OS specific binary when deploying the VCSA appliance (mac vs generic linux) instead of always using linux +- provision_vcenter - When running the playbook on MacOS, the `iso9660` file system is not supported. Instead, Macs need to mount the ISO as a block device and then mount it as `cd9660`. Added new tasks to perform these actions when the os family is darwin +- provision_virtual_esxi - Added new role for provisioning a VM and installing ESXi on it. Added integration tests for role +- reconnect_esxi_host_in_vcenter - Added new playbook to reconnect an ESXi host in a vCenter +- remove_esxi_host_from_vcenter - Added new playbook to remove an ESXi host from a vCenter +- snapshot_management - Add a new role and playbooks to manages virtual machines snapshots in vCenter. (https://github.com/redhat-cop/cloud.vmware_ops/pull/24) +- vcenter_host_connection - Added role to manage the connection status of an ESXI host to a vcenter. Included integration tests for the role + +Bugfixes +-------- + +- esxi_maintenance_mode - Fixed typo in the vmware_maintenancemode module's `evacuate`` attribute +- provision_vcenter - Added dedicated complexity check for VM password at beginning of role. Complexity requirements are normally validated by the VCSA installer but the error thrown can be confusing. Update integration test to use proper password +- provision_vcenter - Changed default ISO mount point from /mnt to /tmp, since /tmp is more likely to be writable +- provision_vcenter - Install libnsl if running on rhel flavored OS, since it is not included in OS version 8+ but needed for the vmware ovftool +- provision_vcenter - Remove leading slashes when a user provides a datacenter/target host path to the installer. These values are supposed to be vcenter folder paths (e.g. /cluster01/host01) but a leading slash would break the VCSA installer config +- provision_vcenter - missing parameters in the validate_inputs tasks. Added them so the user will be alerted sooner if required parameters are missing +- provision_vcenter - the vcsa deploy config was invalid json if dhcp was used. Re-ordered the network section of the config template to fix +- provision_vcenter - vcenter vm names containing a string marked for no_log no longer trigger an unexpected error when checking if the vm already exists +- provision_virtual_esxi - Added missing variable documentation +- provision_virtual_esxi - Role had redundant variable `provision_virtual_esxi_iso_path` that was left from a name refactor. It was updated to match the new name. The new variable name `provision_virtual_esxi_datastore_iso_path` is already mandatory diff --git a/changelogs/changelog.yaml b/changelogs/changelog.yaml index 2abdaca5..0ecc5a18 100644 --- a/changelogs/changelog.yaml +++ b/changelogs/changelog.yaml @@ -1 +1,90 @@ -releases: {} +ancestor: null +releases: + 1.2.0: + changes: + bugfixes: + - esxi_maintenance_mode - Fixed typo in the vmware_maintenancemode module's + `evacuate`` attribute + - provision_vcenter - Added dedicated complexity check for VM password at beginning + of role. Complexity requirements are normally validated by the VCSA installer + but the error thrown can be confusing. Update integration test to use proper + password + - provision_vcenter - Changed default ISO mount point from /mnt to /tmp, since + /tmp is more likely to be writable + - provision_vcenter - Install libnsl if running on rhel flavored OS, since it + is not included in OS version 8+ but needed for the vmware ovftool + - provision_vcenter - Remove leading slashes when a user provides a datacenter/target + host path to the installer. These values are supposed to be vcenter folder + paths (e.g. /cluster01/host01) but a leading slash would break the VCSA installer + config + - provision_vcenter - missing parameters in the validate_inputs tasks. Added + them so the user will be alerted sooner if required parameters are missing + - provision_vcenter - the vcsa deploy config was invalid json if dhcp was used. + Re-ordered the network section of the config template to fix + - provision_vcenter - vcenter vm names containing a string marked for no_log + no longer trigger an unexpected error when checking if the vm already exists + - provision_virtual_esxi - Added missing variable documentation + - provision_virtual_esxi - Role had redundant variable `provision_virtual_esxi_iso_path` + that was left from a name refactor. It was updated to match the new name. + The new variable name `provision_virtual_esxi_datastore_iso_path` is already + mandatory + minor_changes: + - Fix the README file of snapshot_management role to be more clear about the + parameters `snapshot_management_folder` and `snapshot_management_vm_name` + - add_esxi_host_to_vcenter - Added new playbook to add an ESXi host to a vCenter + - cluster_settings - Added new playbook to modify cluster settings + - cluster_settings - Added new role for managing different cluster settings + including DRM, DRS, vCLS, HA, and vSAN. Added integration tests for role + - disable_high_availability - Added playbook to disable high availbility in a + vcenter cluster + - disable_maintenance_mode - Added new playbook to disable maintenance mode + on an ESXi host + - enable_high_availability - Added playbook to enable and configure high availbility + in a vcenter cluster + - enable_maintenance_mode - Added new playbook to enable maintenance mode on + an ESXi host + - esxi_maintenance_mode - Added new role for setting an ESXi host's maintenance + mode status. Added integration tests for role + - info - Fix creation of temporary files + - info - Fix the incorrect documentation + - manage_all_settings - Renamed and moved ``cluster_settings.yml`` playbook + to ``cluster_settings\manage_all_settings.yml``. New location is with other + cluster settings related plays + - provision_vcenter - Only use hdiutil to mount ISO on mac instead of hdiutil + + mount. The new approach provides more consistent results when reading the + ISO content as a file system + - provision_vcenter - Use OS specific binary when deploying the VCSA appliance + (mac vs generic linux) instead of always using linux + - provision_vcenter - When running the playbook on MacOS, the `iso9660` file + system is not supported. Instead, Macs need to mount the ISO as a block device + and then mount it as `cd9660`. Added new tasks to perform these actions when + the os family is darwin + - provision_virtual_esxi - Added new role for provisioning a VM and installing + ESXi on it. Added integration tests for role + - reconnect_esxi_host_in_vcenter - Added new playbook to reconnect an ESXi host + in a vCenter + - remove_esxi_host_from_vcenter - Added new playbook to remove an ESXi host + from a vCenter + - snapshot_management - Add a new role and playbooks to manages virtual machines + snapshots in vCenter. (https://github.com/redhat-cop/cloud.vmware_ops/pull/24) + - vcenter_host_connection - Added role to manage the connection status of an + ESXI host to a vcenter. Included integration tests for the role + fragments: + - 20__mm-feature__add-provision-virtual-esxi.yml + - 21__mm-feature__add-vcenter-host-connection.yml + - 23__e2e-manage-vm-tests.yml + - 24-snapshot_management.yml + - 27__mm-feature__add-esxi-maintenance-mode.yml + - 28-fix-temp-file-creation.yml + - 28__mm-bugfix__provision-vcenter.yml + - 30__mm-bugfix__provision-vcenter-mac-support.yml + - 32__mm-bugfix__provision_virtual_esxi.yml + - 33__mm-bugfix__esxi-maintenance-mode.yml + - 34__info_fix_doc.yml + - 38__mm-bugfix__provision-vcenter-use-mac-bin-to-deploy.yml + - 39__mm-feature__cluster-settings.yml + - 40__mm-bugfix__provision-vcenter-missing-rhel-lib.yml + - 41-fix-readme-of-snapshot-management-role.yml + - 43-mm-feature__add-ha-playbooks.yml + - mm-feature__provision_vcenter_tests.yml + release_date: '2024-06-02' diff --git a/changelogs/fragments/20__mm-feature__add-provision-virtual-esxi.yml b/changelogs/fragments/20__mm-feature__add-provision-virtual-esxi.yml deleted file mode 100644 index 9b09b304..00000000 --- a/changelogs/fragments/20__mm-feature__add-provision-virtual-esxi.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -minor_changes: - - provision_virtual_esxi - Added new role for provisioning a VM and installing ESXi on it. Added integration tests for role diff --git a/changelogs/fragments/21__mm-feature__add-vcenter-host-connection.yml b/changelogs/fragments/21__mm-feature__add-vcenter-host-connection.yml deleted file mode 100644 index 954f5e49..00000000 --- a/changelogs/fragments/21__mm-feature__add-vcenter-host-connection.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -minor_changes: - - vcenter_host_connection - Added role to manage the connection status of an ESXI host to a vcenter. Included integration tests for the role diff --git a/changelogs/fragments/23__e2e-manage-vm-tests.yml b/changelogs/fragments/23__e2e-manage-vm-tests.yml deleted file mode 100644 index eedb2f48..00000000 --- a/changelogs/fragments/23__e2e-manage-vm-tests.yml +++ /dev/null @@ -1,3 +0,0 @@ -trivial: - - manage_vm - adding manage vm e2e tests using molecule testing framework. - this includes tests for update, delete and adding a vm to the vcenter and validates the outcome of the changes. diff --git a/changelogs/fragments/24-snapshot_management.yml b/changelogs/fragments/24-snapshot_management.yml deleted file mode 100644 index 05014b80..00000000 --- a/changelogs/fragments/24-snapshot_management.yml +++ /dev/null @@ -1,3 +0,0 @@ -minor_changes: - - snapshot_management - Add a new role and playbooks to manages virtual machines snapshots in vCenter. - (https://github.com/redhat-cop/cloud.vmware_ops/pull/24) diff --git a/changelogs/fragments/27__mm-feature__add-esxi-maintenance-mode.yml b/changelogs/fragments/27__mm-feature__add-esxi-maintenance-mode.yml deleted file mode 100644 index 0d852aa1..00000000 --- a/changelogs/fragments/27__mm-feature__add-esxi-maintenance-mode.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -minor_changes: - - esxi_maintenance_mode - Added new role for setting an ESXi host's maintenance mode status. Added integration tests for role - - add_esxi_host_to_vcenter - Added new playbook to add an ESXi host to a vCenter - - disable_maintenance_mode - Added new playbook to disable maintenance mode on an ESXi host - - enable_maintenance_mode - Added new playbook to enable maintenance mode on an ESXi host - - reconnect_esxi_host_in_vcenter - Added new playbook to reconnect an ESXi host in a vCenter - - remove_esxi_host_from_vcenter - Added new playbook to remove an ESXi host from a vCenter diff --git a/changelogs/fragments/28-fix-temp-file-creation.yml b/changelogs/fragments/28-fix-temp-file-creation.yml deleted file mode 100644 index 27576265..00000000 --- a/changelogs/fragments/28-fix-temp-file-creation.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -minor_changes: - - info - Fix creation of temporary files diff --git a/changelogs/fragments/28__mm-bugfix__provision-vcenter.yml b/changelogs/fragments/28__mm-bugfix__provision-vcenter.yml deleted file mode 100644 index deb3a1a0..00000000 --- a/changelogs/fragments/28__mm-bugfix__provision-vcenter.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -bugfixes: - - provision_vcenter - Changed default ISO mount point from /mnt to /tmp, since /tmp is more likely to be writable - - >- - provision_vcenter - Added dedicated complexity check for VM password at beginning of role. Complexity requirements - are normally validated by the VCSA installer but the error thrown can be confusing. Update integration test to use - proper password - - >- - provision_vcenter - Remove leading slashes when a user provides a datacenter/target host path to the installer. - These values are supposed to be vcenter folder paths (e.g. /cluster01/host01) but a leading slash would break the - VCSA installer config diff --git a/changelogs/fragments/30__mm-bugfix__provision-vcenter-mac-support.yml b/changelogs/fragments/30__mm-bugfix__provision-vcenter-mac-support.yml deleted file mode 100644 index f9ebc316..00000000 --- a/changelogs/fragments/30__mm-bugfix__provision-vcenter-mac-support.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -minor_changes: - - >- - provision_vcenter - When running the playbook on MacOS, the `iso9660` file system is not supported. Instead, Macs - need to mount the ISO as a block device and then mount it as `cd9660`. Added new tasks to perform these actions - when the os family is darwin diff --git a/changelogs/fragments/32__mm-bugfix__provision_virtual_esxi.yml b/changelogs/fragments/32__mm-bugfix__provision_virtual_esxi.yml deleted file mode 100644 index 49bd0e5b..00000000 --- a/changelogs/fragments/32__mm-bugfix__provision_virtual_esxi.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -bugfixes: - - provision_virtual_esxi - Added missing variable documentation - - >- - provision_virtual_esxi - Role had redundant variable `provision_virtual_esxi_iso_path` that was left from a name refactor. - It was updated to match the new name. The new variable name `provision_virtual_esxi_datastore_iso_path` is already mandatory diff --git a/changelogs/fragments/33__mm-bugfix__esxi-maintenance-mode.yml b/changelogs/fragments/33__mm-bugfix__esxi-maintenance-mode.yml deleted file mode 100644 index 9ea5e1a4..00000000 --- a/changelogs/fragments/33__mm-bugfix__esxi-maintenance-mode.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -bugfixes: - - esxi_maintenance_mode - Fixed typo in the vmware_maintenancemode module's `evacuate`` attribute diff --git a/changelogs/fragments/34__info_fix_doc.yml b/changelogs/fragments/34__info_fix_doc.yml deleted file mode 100644 index a37474df..00000000 --- a/changelogs/fragments/34__info_fix_doc.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -minor_changes: - - info - Fix the incorrect documentation diff --git a/changelogs/fragments/38__mm-bugfix__provision-vcenter-use-mac-bin-to-deploy.yml b/changelogs/fragments/38__mm-bugfix__provision-vcenter-use-mac-bin-to-deploy.yml deleted file mode 100644 index b321853e..00000000 --- a/changelogs/fragments/38__mm-bugfix__provision-vcenter-use-mac-bin-to-deploy.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -minor_changes: - - provision_vcenter - Use OS specific binary when deploying the VCSA appliance (mac vs generic linux) instead of always using linux - - >- - provision_vcenter - Only use hdiutil to mount ISO on mac instead of hdiutil + mount. The new approach provides more consistent results - when reading the ISO content as a file system diff --git a/changelogs/fragments/39__mm-feature__cluster-settings.yml b/changelogs/fragments/39__mm-feature__cluster-settings.yml deleted file mode 100644 index 6f3a1d6b..00000000 --- a/changelogs/fragments/39__mm-feature__cluster-settings.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -minor_changes: - - cluster_settings - Added new role for managing different cluster settings including DRM, DRS, vCLS, HA, and vSAN. Added integration tests for role - - cluster_settings - Added new playbook to modify cluster settings diff --git a/changelogs/fragments/40__mm-bugfix__provision-vcenter-missing-rhel-lib.yml b/changelogs/fragments/40__mm-bugfix__provision-vcenter-missing-rhel-lib.yml deleted file mode 100644 index 0b8ccf6a..00000000 --- a/changelogs/fragments/40__mm-bugfix__provision-vcenter-missing-rhel-lib.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -bugfixes: - - provision_vcenter - Install libnsl if running on rhel flavored OS, since it is not included in OS version 8+ but needed for the vmware ovftool diff --git a/changelogs/fragments/41-fix-readme-of-snapshot-management-role.yml b/changelogs/fragments/41-fix-readme-of-snapshot-management-role.yml deleted file mode 100644 index 50a8e104..00000000 --- a/changelogs/fragments/41-fix-readme-of-snapshot-management-role.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -minor_changes: - - Fix the README file of snapshot_management role to be more clear about the parameters `snapshot_management_folder` - and `snapshot_management_vm_name` diff --git a/changelogs/fragments/43-mm-feature__add-ha-playbooks.yml b/changelogs/fragments/43-mm-feature__add-ha-playbooks.yml deleted file mode 100644 index 7fd29a2a..00000000 --- a/changelogs/fragments/43-mm-feature__add-ha-playbooks.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -minor_changes: - - disable_high_availability - Added playbook to disable high availbility in a vcenter cluster - - enable_high_availability - Added playbook to enable and configure high availbility in a vcenter cluster - - >- - manage_all_settings - Renamed and moved ``cluster_settings.yml`` playbook to ``cluster_settings\manage_all_settings.yml``. - New location is with other cluster settings related plays diff --git a/changelogs/fragments/mm-feature__provision_vcenter_tests.yml b/changelogs/fragments/mm-feature__provision_vcenter_tests.yml deleted file mode 100644 index 463f27a3..00000000 --- a/changelogs/fragments/mm-feature__provision_vcenter_tests.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -bugfixes: - - provision_vcenter - vcenter vm names containing a string marked for no_log no longer trigger an unexpected error when checking if the vm already exists - - provision_vcenter - the vcsa deploy config was invalid json if dhcp was used. Re-ordered the network section of the config template to fix - - provision_vcenter - missing parameters in the validate_inputs tasks. Added them so the user will be alerted sooner if required parameters are missing - -trivial: - - added integration tests for role provision_vcenter diff --git a/galaxy.yml b/galaxy.yml index d80924bb..87a903a5 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,6 +1,6 @@ namespace: cloud name: vmware_ops -version: 1.0.0 +version: 1.2.0 readme: README.md authors: - Ansible Cloud Content Team (@redhat-cop) diff --git a/roles/manage_folder/README.md b/roles/manage_folder/README.md new file mode 100644 index 00000000..2e8d6678 --- /dev/null +++ b/roles/manage_folder/README.md @@ -0,0 +1,138 @@ +# Cluster settings role + +A role to define cluster settings in vCenter. + +## Requirements + +pyvmomi < 7.0.3 + +In some cases, the vCLS cluster settings will fail to apply when using pyvmomi version 7.0.3 or greater. If this feature is required, using an earlier version will work. +Support for version 7.0.3 and higher is planned for the next release of community.vmware (>4.4.0), at which point this restriction will be removed. + +## Role Variables +### Auth +- **manage_folder_username**: + - The vSphere vCenter username. + +- **manage_folder_password**: + - The vSphere vCenter password. + +- **manage_folder_hostname**: + - The hostname or IP address of the vSphere vCenter. + +- **manage_folder_validate_certs** + - Allows connection when SSL certificates are not valid. Set to false when certificates are not trusted. + +- **manage_folder_datacenter_name**: + - The name of the datacenter in vSphere vCenter which contains the cluster to configure. + +- **manage_folder_port**: + - str or int, The port to use to authenticate to the vSphere vCenter which contains the cluster to configure. + +### Cluster settings + + +### Placement +- **manage_folder_datacenter_name**: + - enter your description here + +### Other +- **manage_folder_folder_name**: + - str, required, The name of folder to manage. It can be a single name like `foo` or a path like `foo/bar/buzz`. + +- **manage_folder_parse_name_as_path**: + - bool, If true then `manage_folder_folder_name` is treated as a path. All folders along the path will be managed. + If false, the name is treated as a literal string. Default is true. + +- **manage_folder_folder_type**: + - str, The type of folder to manage. Can be `datacenter`, `host`, `vm`, or `network`. The default is `vm`. + +- **manage_folder_parent_folder**: + - >- + str, Set the folder path where the new folder(s) should be managed. This path must already exist. + For example, for the folder `foo/bizz/buzz` the parent is `foo/bizz/buzz` + +- **manage_folder_state**: + - str, optional, Choose if the folder should be 'present' or 'absent'. Default value is 'present' + +### Other +- **manage_folder_proxy_host**: + - str, The hostname of a proxy host that should be used for all HTTPs communication by the role. Optional + +- **manage_folder_proxy_port**: + - str, The port of a proxy host that should be used for all HTTPs communication by the role. Optional + +## Dependencies + +- community.vmware + +## Example Playbook +```yaml +--- +- name: Manage VMWare Folders + hosts: all + gather_facts: false + vars: + manage_folder_username: <> + manage_folder_password: <> + manage_folder_hostname: <> + manage_folder_datacenter: DC01 + manage_folder_type: host + + roles: + - role: cloud.vmware_ops.manage_folder + manage_folder_folder_name: my/folder + manage_folder_state: present + + - role: cloud.vmware_ops.manage_folder + manage_folder_folder_name: my/folder + manage_folder_state: absent + + tasks: + - name: Create Folder Trees + ansible.builtin.include_role: + name: manage_folder + vars: + manage_folder_state: present + manage_folder_folder_name: "{{ item }}" + loop: + - production/foo/web + - uat/foo/web + - development/foo/web + + - name: Create Folders Without Managing Full Tree + ansible.builtin.include_role: + name: manage_folder + vars: + manage_folder_state: present + manage_folder_folder_name: "{{ item }}" + manage_folder_parent_folder: production/foo + loop: + - backend + - db + + - name: Create A Folder With A Slash In It + ansible.builtin.include_role: + name: manage_folder + vars: + manage_folder_state: present + manage_folder_folder_name: security/syseng + manage_folder_parent_folder: production/foo + manage_folder_parse_name_as_path: false + + - name: Delete The Whole Tree + ansible.builtin.include_role: + name: manage_folder + vars: + manage_folder_state: absent + manage_folder_folder_name: production +``` +## License + +GNU General Public License v3.0 or later + +See [LICENCE](https://github.com/ansible-collections/cloud.aws_troubleshooting/blob/main/LICENSE) to see the full text. + +## Author Information + +- Ansible Cloud Content Team diff --git a/roles/manage_folder/defaults/main.yml b/roles/manage_folder/defaults/main.yml new file mode 100644 index 00000000..f354f91a --- /dev/null +++ b/roles/manage_folder/defaults/main.yml @@ -0,0 +1,4 @@ +--- +manage_folder_state: present +manage_folder_parent_folder: "" +manage_folder_parse_name_as_path: true diff --git a/roles/manage_folder/tasks/main.yml b/roles/manage_folder/tasks/main.yml new file mode 100644 index 00000000..df75320b --- /dev/null +++ b/roles/manage_folder/tasks/main.yml @@ -0,0 +1,43 @@ +--- +- name: Check Mandatory Variables Are Defined + ansible.builtin.assert: + that: + - manage_folder_datacenter_name is defined + - manage_folder_folder_name is defined and ((manage_folder_folder_name | length) > 0) + - manage_folder_hostname is defined + - manage_folder_username is defined + - manage_folder_password is defined + quiet: true + fail_msg: Variable must be set when using this role. + +- name: Fail If Folder Path Is Absolute + ansible.builtin.fail: + msg: Folder name should not be absolute. It should be relative to // + when: manage_folder_folder_name[0] == '/' + +- name: Manage Full Folder Path + when: manage_folder_parse_name_as_path + block: + - name: Split Folder Into Parts + ansible.builtin.set_fact: + _folder_parts: "{{ manage_folder_folder_name | split('/') }}" + _folder_path_task_output: false + - name: Manage Folder Path Part + ansible.builtin.include_tasks: manage_path_part.yml + when: manage_folder_state == 'present' or not _folder_path_task_output + loop: "{{ _folder_parts }}" + loop_control: + loop_var: _folder_part + index_var: _part_index + vars: + _child: "{{ _folder_parts[_part_index : _part_index + 1] | first }}" + _parent: >- + {{ (manage_folder_parent_folder + '/' + (_folder_parts[:_part_index] | join('/'))) | + regex_replace('^\/?(.*)\/?$', '\1') }} + +- name: Manage Folder Endpoint Only + ansible.builtin.include_tasks: manage_path_part.yml + when: not manage_folder_parse_name_as_path + vars: + _child: "{{ manage_folder_folder_name }}" + _parent: "{{ manage_folder_parent_folder }}" diff --git a/roles/manage_folder/tasks/manage_path_part.yml b/roles/manage_folder/tasks/manage_path_part.yml new file mode 100644 index 00000000..c89e5bbc --- /dev/null +++ b/roles/manage_folder/tasks/manage_path_part.yml @@ -0,0 +1,16 @@ +--- +- name: Manage VCenter Folder - {{ (_parent | ternary(_parent + '/', '')) + _child }} + community.vmware.vcenter_folder: + hostname: "{{ manage_folder_hostname }}" + username: "{{ manage_folder_username }}" + password: "{{ manage_folder_password }}" + validate_certs: "{{ manage_folder_validate_certs | default(omit) }}" + port: "{{ manage_folder_port | default(omit) }}" + proxy_host: "{{ manage_folder_proxy_host | default(omit) }}" + proxy_port: "{{ manage_folder_proxy_port | default(omit) }}" + datacenter_name: "{{ manage_folder_datacenter_name }}" + folder_type: "{{ manage_folder_folder_type | default(omit) }}" + folder_name: "{{ _child }}" + parent_folder: "{{ _parent or omit }}" + state: "{{ manage_folder_state }}" + register: _folder_path_task_output diff --git a/tests/integration/targets/manage_folder_test/run.yml b/tests/integration/targets/manage_folder_test/run.yml new file mode 100644 index 00000000..8dbd1c52 --- /dev/null +++ b/tests/integration/targets/manage_folder_test/run.yml @@ -0,0 +1,13 @@ +- hosts: localhost + gather_facts: no + collections: + - community.general + + tasks: + - name: Vcsim + ansible.builtin.import_role: + name: prepare_soap + + - name: Import manage folder test + ansible.builtin.import_role: + name: manage_folder_test diff --git a/tests/integration/targets/manage_folder_test/runme.sh b/tests/integration/targets/manage_folder_test/runme.sh new file mode 100755 index 00000000..4515d2e1 --- /dev/null +++ b/tests/integration/targets/manage_folder_test/runme.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +source ../init.sh +exec ansible-playbook run.yml -vvvv diff --git a/tests/integration/targets/manage_folder_test/tasks/main.yml b/tests/integration/targets/manage_folder_test/tasks/main.yml new file mode 100644 index 00000000..0c5f9872 --- /dev/null +++ b/tests/integration/targets/manage_folder_test/tasks/main.yml @@ -0,0 +1,50 @@ +--- +- name: Create Folder Tree + ansible.builtin.include_role: + name: cloud.vmware_ops.manage_folder + vars: + manage_folder_state: present + manage_folder_folder_name: production/foo/web + +- name: Create Folder Without Managing Full Tree + ansible.builtin.include_role: + name: cloud.vmware_ops.manage_folder + vars: + manage_folder_state: present + manage_folder_folder_name: db + manage_folder_parent_folder: production/foo + +- name: Create A Folder With A Slash In It + ansible.builtin.include_role: + name: cloud.vmware_ops.manage_folder + vars: + manage_folder_state: present + manage_folder_folder_name: security/syseng + manage_folder_parent_folder: production/foo + manage_folder_parse_name_as_path: false + +- name: Get Folder Info + community.vmware.vmware_folder_info: + hostname: "{{ manage_folder_hostname }}" + username: "{{ manage_folder_username }}" + password: "{{ manage_folder_password }}" + datacenter: "{{ manage_folder_datacenter_name }}" + port: "{{ manage_folder_port }}" + validate_certs: false + delegate_to: localhost + register: _folder_info + +- name: Check Folders Were Created + ansible.builtin.assert: + that: + - _folder_info.folder_info.hostFolders.subfolders.production.subfolders.foo.subfolders['web'] is defined + - _folder_info.folder_info.hostFolders.subfolders.production.subfolders.foo.subfolders['db'] is defined + - _folder_info.folder_info.hostFolders.subfolders.production.subfolders.foo.subfolders['security%2fsyseng'] is defined + fail_msg: Folder structure does not match expected result. + +- name: Delete The Whole Tree + ansible.builtin.include_role: + name: cloud.vmware_ops.manage_folder + vars: + manage_folder_state: absent + manage_folder_folder_name: production diff --git a/tests/integration/targets/manage_folder_test/vars/main.yml b/tests/integration/targets/manage_folder_test/vars/main.yml new file mode 100644 index 00000000..96560d93 --- /dev/null +++ b/tests/integration/targets/manage_folder_test/vars/main.yml @@ -0,0 +1,8 @@ +--- +manage_folder_hostname: "127.0.0.1" +manage_folder_username: "test" +manage_folder_password: "test" +manage_folder_validate_certs: false +manage_folder_port: "8989" +manage_folder_datacenter_name: DC0 +manage_folder_folder_type: host