VMware: New Module for VMWare content Library info (#58703)

* Changes as per review comments and renamed file to vmware_content_library_info
* Removing password field from publish info dictionary
* Removed current password field from publish info
* Modified vmware_content_library_info module with review comments.
* Review comments. Moved test .yml files under tasks folder
* Moved test files under module name folder. Handled library_get call under try catch to throw proper error message
* Fixed precheck failure bare except. Catching Exception
This commit is contained in:
Pavan Bidkar 2019-07-12 15:50:30 +05:30 committed by Abhijeet Kasurde
parent 31baab85f9
commit 6bd6bf98e5
3 changed files with 188 additions and 0 deletions

View file

@ -0,0 +1,154 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright: (c) 2019, Ansible Project
# Copyright: (c) 2019, Pavan Bidkar <pbidkar@vmware.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import absolute_import, division, print_function
__metaclass__ = type
ANSIBLE_METADATA = {
'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'
}
DOCUMENTATION = r'''
---
module: vmware_content_library_info
short_description: Gather information about VMWare Content Library
description:
- Module to list the content libraries.
- Module to get information about specific content library.
- Content Library feature is introduced in vSphere 6.0 version, so this module is not supported in the earlier versions of vSphere.
- All variables and VMware object names are case sensitive.
version_added: '2.9'
author:
- Pavan Bidkar (@pgbidkar)
notes:
- Tested on vSphere 6.5, 6.7
requirements:
- python >= 2.6
- PyVmomi
- vSphere Automation SDK
options:
library_id:
description:
- content library id for which details needs to be fetched.
type: str
required: False
extends_documentation_fragment: vmware_rest_client.documentation
'''
EXAMPLES = r'''
- name: Get List of Content Libraries
vmware_content_library_info:
hostname: '{{ vcenter_hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
delegate_to: localhost
- name: Get information about content library
vmware_content_library_info:
hostname: '{{ vcenter_hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
library_id: '13b0f060-f4d3-4f84-b61f-0fe1b0c0a5a8'
validate_certs: no
delegate_to: localhost
'''
RETURN = r'''
content_lib_details:
description: list of content library metadata
returned: on success
type: list
sample: [
{
"library_creation_time": "2019-07-02T11:50:52.242000",
"library_description": "new description",
"library_id": "13b0f060-f4d3-4f84-b61f-0fe1b0c0a5a8",
"library_name": "demo-local-lib",
"library_publish_info": {
"authentication_method": "NONE",
"persist_json_enabled": false,
"publish_url": null,
"published": false,
"user_name": null
},
"library_server_guid": "0fd5813b-aac7-4b92-9fb7-f18f16565613",
"library_type": "LOCAL",
"library_version": "3"
}
]
content_libs:
description: list of content libraries
returned: on success
type: list
sample: [
"ded9c4d5-0dcd-4837-b1d8-af7398511e33",
"36b72549-14ed-4b5f-94cb-6213fecacc02"
]
'''
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.vmware_rest_client import VmwareRestClient
class VmwareContentLibFacts(VmwareRestClient):
def __init__(self, module):
"""Constructor."""
super(VmwareContentLibFacts, self).__init__(module)
self.content_service = self.api_client
self.library_facts = []
def get_all_content_libs(self):
"""Method to retrieve List of content libraries."""
self.module.exit_json(changed=False, content_libs=self.content_service.content.LocalLibrary.list())
def get_content_lib_details(self, library_id):
"""Method to retrieve Details of contentlib with library_id"""
try:
lib_details = self.content_service.content.LocalLibrary.get(library_id)
except Exception as e:
self.module.fail_json(exists=False, msg="%s" % self.get_error_message(e))
lib_publish_info = dict(
persist_json_enabled=lib_details.publish_info.persist_json_enabled,
authentication_method=lib_details.publish_info.authentication_method,
publish_url=lib_details.publish_info.publish_url,
published=lib_details.publish_info.published,
user_name=lib_details.publish_info.user_name
)
self.library_facts.append(
dict(
library_name=lib_details.name,
library_description=lib_details.description,
library_id=lib_details.id,
library_type=lib_details.type,
library_creation_time=lib_details.creation_time,
library_server_guid=lib_details.server_guid,
library_version=lib_details.version,
library_publish_info=lib_publish_info
)
)
self.module.exit_json(exists=False, changed=False, content_lib_details=self.library_facts)
def main():
argument_spec = VmwareRestClient.vmware_client_argument_spec()
argument_spec.update(
library_id=dict(type='str', required=False),
)
module = AnsibleModule(argument_spec=argument_spec,
supports_check_mode=True)
vmware_contentlib_facts = VmwareContentLibFacts(module)
if module.params.get('library_id'):
vmware_contentlib_facts.get_content_lib_details(module.params['library_id'])
else:
vmware_contentlib_facts.get_all_content_libs()
if __name__ == '__main__':
main()

View file

@ -0,0 +1,3 @@
cloud/vcenter
shippable/vcenter/group1
needs/target/prepare_vmware_tests

View file

@ -0,0 +1,31 @@
# Test code for the vmware_content_library_info.
# Copyright: (c) 2019, Pavan Bidkar <pbidkar@vmware.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- when: vcsim is not defined
block:
# Get List of Content Libraries
- name: Get List of Content Libraries
vmware_content_library_info:
hostname: '{{ vcenter_hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
validate_certs: false
register: content_library_info
- set_fact: content_library="{{ content_library_info['content_libs'][0] }}"
# Get Details of content library
- name: Get facts about Content Library
vmware_content_library_info:
hostname: '{{ vcenter_hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
library_id: '{{ content_library }}'
validate_certs: false
register: content_lib_facts
- name: Check Content Library details
assert:
that:
- '{{ content_lib_facts.content_lib_details[0].library_id == content_library }}'