Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VMware: vmware_guest_facts: add the ability to get guest facts and specific properties using the vSphere schema #47446

Merged
merged 1 commit into from
Feb 25, 2019

Conversation

jeking3
Copy link
Contributor

@jeking3 jeking3 commented Oct 22, 2018

SUMMARY

The module vmware_guest_facts mutates the vSphere results into a form that appears to align with the result from the libvirt guest facts. This output is a subset of the total information available about the guest, and the output format is not documented (see results -> instance).

This pull request adds the ability to optionally specify the output format of the fact gathering to be in one of the following two formats:

  • summary is the existing format in the module, and the default
  • vsphere is the vSphere API documented format, in JSON form

The properties are an optional list of dotted property names, identical to the format the property collector would normally take. When a property list is given, those properties are extracted from the vim object that results from the standard get_vm lookup that was already there. (The property list is not passed into the property collector - that would have required modifying the vm lookup code paths which are already complex).

An example configuration file for the module is:

{
  "ANSIBLE_MODULE_ARGS": {
    "hostname": "0.0.0.0",
    "username": "myuser",
    "password": "mypass",
    "validate_certs": false,
    "datacenter": "MyDatacenter",
    "name": "MyVM",
    "format": "vsphere",
    "properties": [
      "config.hardware.memoryMB",
      "config.hardware.numCPU",
      "overallStatus",
      "name",
      "guest.disk"
    ]
  }
}

Example result:

{
  "instance": {
    "config": {
      "hardware": {
        "memoryMB": 4096,
        "numCPU": 2
      }
    },
    "overallStatus": "green",
    "name": "MyVM",
    "guest": {
      "disk": [
        {
          "freeSpace": 7178031104,
          "diskPath": "C:\\",
          "capacity": 20880289792
        }
      ]
    }
  }
}

Advantages of vSphere API access are:

  1. The structure of the results is well-documented.
  2. All of the properties are available.
  3. One can select any proper subset of properties (including all of them).
ISSUE TYPE
  • Feature Pull Request
COMPONENT NAME

vmware_guest_facts

ANSIBLE VERSION
ansible 2.8.0.dev0 (enhanced-vm-facts d2f18f3011) last updated 2018/10/22 19:12:45 (GMT +000)
  config file = None
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /ansible/lib/ansible
  executable location = /ansible/bin/ansible
  python version = 2.7.15 (default, Sep 12 2018, 02:38:23) [GCC 6.4.0]
ADDITIONAL INFORMATION

@ansibot
Copy link
Contributor

ansibot commented Oct 23, 2018

Hi @jeking3, thank you for submitting this pull-request!

click here for bot help

@ansibot
Copy link
Contributor

ansibot commented Oct 23, 2018

The test ansible-test sanity --test pylint [explain] failed with 1 error:

lib/ansible/module_utils/vmware.py:1286:25: ansible-bad-import-from Import Mapping from ansible.module_utils.common._collections_compat instead of collections

The test ansible-test sanity --test ansible-doc --python 2.6 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test ansible-doc --python 2.7 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test ansible-doc --python 3.5 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test ansible-doc --python 3.6 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test ansible-doc --python 3.7 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test docs-build [explain] failed with the error:

Command "/usr/bin/python test/sanity/code-smell/docs-build.py" returned exit status 1.
>>> Standard Error
Command 'make singlehtmldocs' failed with status code: 2
--> Standard Output
cat _themes/srtd/static/css/theme.css | sed -e 's/^[ 	]*//g; s/[ 	]*$//g; s/\([:{;,]\) /\1/g; s/ {/{/g; s/\/\*.*\*\///g; /^$/d' | sed -e :a -e '$!N; s/\n\(.\)/\1/; ta' > _themes/srtd/static/css/theme.min.css
PYTHONPATH=../../lib ../bin/dump_config.py --template-file=../templates/config.rst.j2 --output-dir=rst/reference_appendices/ -d ../../lib/ansible/config/base.yml
mkdir -p rst/cli
PYTHONPATH=../../lib ../bin/generate_man.py --template-file=../templates/cli_rst.j2 --output-dir=rst/cli/ --output-format rst ../../lib/ansible/cli/*.py
PYTHONPATH=../../lib ../bin/dump_keywords.py --template-dir=../templates --output-dir=rst/reference_appendices/ -d ./keyword_desc.yml
PYTHONPATH=../../lib ../bin/plugin_formatter.py -t rst --template-dir=../templates --module-dir=../../lib/ansible/modules -o rst/modules/ 
Makefile:93: recipe for target 'modules' failed
--> Standard Error
Traceback (most recent call last):
  File "../bin/plugin_formatter.py", line 720, in <module>
    main()
  File "../bin/plugin_formatter.py", line 678, in main
    plugin_info, categories = get_plugin_info(options.module_dir, limit_to=options.limit_to, verbose=(options.verbosity > 0))
  File "../bin/plugin_formatter.py", line 269, in get_plugin_info
    doc, examples, returndocs, metadata = plugin_docs.get_docstring(module_path, fragment_loader, verbose=verbose)
  File "/root/ansible/lib/ansible/utils/plugin_docs.py", line 99, in get_docstring
    data = read_docstring(filename, verbose=verbose, ignore_errors=ignore_errors)
  File "/root/ansible/lib/ansible/parsing/plugin_docs.py", line 62, in read_docstring
    data[varkey] = AnsibleLoader(child.value.s, file_name=filename).get_single_data()
  File "/usr/local/lib/python3.6/dist-packages/yaml/constructor.py", line 35, in get_single_data
    node = self.get_single_node()
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 36, in get_single_node
    document = self.compose_document()
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 55, in compose_document
    node = self.compose_node(None, None)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 82, in compose_node
    node = self.compose_sequence_node(anchor)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 110, in compose_sequence_node
    while not self.check_event(SequenceEndEvent):
  File "/usr/local/lib/python3.6/dist-packages/yaml/parser.py", line 98, in check_event
    self.current_event = self.state()
  File "/usr/local/lib/python3.6/dist-packages/yaml/parser.py", line 382, in parse_block_sequence_entry
    if self.check_token(BlockEntryToken):
  File "/usr/local/lib/python3.6/dist-packages/yaml/scanner.py", line 116, in check_token
    self.fetch_more_tokens()
  File "/usr/local/lib/python3.6/dist-packages/yaml/scanner.py", line 220, in fetch_more_tokens
    return self.fetch_value()
  File "/usr/local/lib/python3.6/dist-packages/yaml/scanner.py", line 576, in fetch_value
    self.get_mark())
yaml.scanner.ScannerError: mapping values are not allowed here
  in "<unicode string>", line 64, column 32:
                  to see '{"config": {"hardware": {"memoryMB": <num ... 
                                   ^
make: *** [modules] Error 1

The test ansible-test sanity --test no-dict-iteritems [explain] failed with 1 error:

lib/ansible/module_utils/vmware.py:1285:19: use `dict.items` or `ansible.module_utils.six.iteritems` instead of `dict.iteritems`

The test ansible-test sanity --test validate-modules [explain] failed with 9 errors:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec ('/vm') for "folder" does not match the documentation (None)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec ('first') for "name_match" does not match the documentation (None)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec ('summary') for "format" does not match the documentation (None)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec (443) for "port" does not match the documentation (None)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec (True) for "validate_certs" does not match the documentation (False)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E325 argument_spec for "validate_certs" defines type="bool" but documentation does not
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E326 Value for "choices" from the argument_spec (['first', 'last']) for "name_match" does not match the documentation ([])
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E326 Value for "choices" from the argument_spec (['summary', 'vsphere']) for "format" does not match the documentation ([])
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:79:32: E302 DOCUMENTATION is not valid YAML

The test ansible-test sanity --test yamllint [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:79:32: error DOCUMENTATION: syntax error: mapping values are not allowed here

click here for bot help

@ansibot
Copy link
Contributor

ansibot commented Oct 23, 2018

@ansibot
Copy link
Contributor

ansibot commented Oct 23, 2018

@jeking3, just so you are aware we have a dedicated Working Group for vmware.
You can find other people interested in this in #ansible-vmware on Freenode IRC
For more information about communities, meetings and agendas see https://github.com/ansible/community

click here for bot help

@ansibot ansibot added affects_2.8 This issue/PR affects Ansible v2.8 cloud feature This issue/PR relates to a feature request. module This issue/PR relates to a module. needs_revision This PR fails CI tests or a maintainer has requested a review/revision of the PR. needs_triage Needs a first human triage before being processed. new_contributor This PR is the first contribution by a new community member. support:community This issue/PR relates to code supported by the Ansible community. support:core This issue/PR relates to code supported by the Ansible Engineering Team. vmware VMware community labels Oct 23, 2018
@ansibot

This comment has been minimized.

@jeking3
Copy link
Contributor Author

jeking3 commented Oct 25, 2018

This is also blocked on an upstream pyVmomi PR: vmware/pyvmomi#732

@ansibot ansibot added the needs_rebase https://docs.ansible.com/ansible/devel/dev_guide/developing_rebasing.html label Oct 25, 2018
@jborean93 jborean93 removed the needs_triage Needs a first human triage before being processed. label Oct 26, 2018
@Akasurde
Copy link
Member

@jeking3 Thanks for the PR, do you think we should add a version check for Pyvmomi as this version will land up in 6.7.* or something ? Thanks

@jeking3
Copy link
Contributor Author

jeking3 commented Oct 26, 2018

@Akasurde I'd say we need to wait for the upstream merge to determine what that will end up being. It would probably be a good idea to roll this out across all the fact gathering modules, or what I will likely eventually do is make a vmware_facts module that can extract any or all properties of any type supported by the property collector. That way one only needs a single facts module for all of vmware and it returns a well-documented schema in the vSphere API.

@Akasurde
Copy link
Member

@jeking3 make sense to me. Can you also take a look at this ?

@jeking3
Copy link
Contributor Author

jeking3 commented Oct 27, 2018

Something like serialize_spec would be likely be unnecessary with the VmomiJSONEncoder. So using managed_object_to_json which is in the pull request would be my choice... of course once pyvmomi merges and releases that is...

@jeking3
Copy link
Contributor Author

jeking3 commented Oct 27, 2018

Perhaps it would be best to leave all the individual vmware_*_facts as they are and just add vmware_facts using the same folder-based resolver that's already there, and removing the ambiguity that exists when retrieving things. (i.e. "name_match: First" is evil, should be an error on ambiguity, and remove calls the FindBy*(singular) and replace with FindAllBy* and test for at most one result.

@ansibot
Copy link
Contributor

ansibot commented Oct 29, 2018

The test ansible-test sanity --test pylint [explain] failed with 1 error:

lib/ansible/module_utils/vmware.py:1261:25: ansible-bad-import-from Import Mapping from ansible.module_utils.common._collections_compat instead of collections

The test ansible-test sanity --test ansible-doc --python 2.6 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test ansible-doc --python 2.7 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test ansible-doc --python 3.5 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test ansible-doc --python 3.6 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test ansible-doc --python 3.7 [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: has a documentation error formatting or is missing documentation.

The test ansible-test sanity --test docs-build [explain] failed with the error:

Command "/usr/bin/python test/sanity/code-smell/docs-build.py" returned exit status 1.
>>> Standard Error
Command 'make singlehtmldocs' failed with status code: 2
--> Standard Output
cat _themes/srtd/static/css/theme.css | sed -e 's/^[ 	]*//g; s/[ 	]*$//g; s/\([:{;,]\) /\1/g; s/ {/{/g; s/\/\*.*\*\///g; /^$/d' | sed -e :a -e '$!N; s/\n\(.\)/\1/; ta' > _themes/srtd/static/css/theme.min.css
PYTHONPATH=../../lib ../bin/dump_config.py --template-file=../templates/config.rst.j2 --output-dir=rst/reference_appendices/ -d ../../lib/ansible/config/base.yml
mkdir -p rst/cli
PYTHONPATH=../../lib ../bin/generate_man.py --template-file=../templates/cli_rst.j2 --output-dir=rst/cli/ --output-format rst ../../lib/ansible/cli/*.py
PYTHONPATH=../../lib ../bin/dump_keywords.py --template-dir=../templates --output-dir=rst/reference_appendices/ -d ./keyword_desc.yml
PYTHONPATH=../../lib ../bin/plugin_formatter.py -t rst --template-dir=../templates --module-dir=../../lib/ansible/modules -o rst/modules/ 
Makefile:93: recipe for target 'modules' failed
--> Standard Error
Traceback (most recent call last):
  File "../bin/plugin_formatter.py", line 720, in <module>
    main()
  File "../bin/plugin_formatter.py", line 678, in main
    plugin_info, categories = get_plugin_info(options.module_dir, limit_to=options.limit_to, verbose=(options.verbosity > 0))
  File "../bin/plugin_formatter.py", line 269, in get_plugin_info
    doc, examples, returndocs, metadata = plugin_docs.get_docstring(module_path, fragment_loader, verbose=verbose)
  File "/root/ansible/lib/ansible/utils/plugin_docs.py", line 99, in get_docstring
    data = read_docstring(filename, verbose=verbose, ignore_errors=ignore_errors)
  File "/root/ansible/lib/ansible/parsing/plugin_docs.py", line 62, in read_docstring
    data[varkey] = AnsibleLoader(child.value.s, file_name=filename).get_single_data()
  File "/usr/local/lib/python3.6/dist-packages/yaml/constructor.py", line 35, in get_single_data
    node = self.get_single_node()
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 36, in get_single_node
    document = self.compose_document()
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 55, in compose_document
    node = self.compose_node(None, None)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 133, in compose_mapping_node
    item_value = self.compose_node(node, item_key)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 82, in compose_node
    node = self.compose_sequence_node(anchor)
  File "/usr/local/lib/python3.6/dist-packages/yaml/composer.py", line 110, in compose_sequence_node
    while not self.check_event(SequenceEndEvent):
  File "/usr/local/lib/python3.6/dist-packages/yaml/parser.py", line 98, in check_event
    self.current_event = self.state()
  File "/usr/local/lib/python3.6/dist-packages/yaml/parser.py", line 403, in parse_indentless_sequence_entry
    if self.check_token(BlockEntryToken):
  File "/usr/local/lib/python3.6/dist-packages/yaml/scanner.py", line 116, in check_token
    self.fetch_more_tokens()
  File "/usr/local/lib/python3.6/dist-packages/yaml/scanner.py", line 220, in fetch_more_tokens
    return self.fetch_value()
  File "/usr/local/lib/python3.6/dist-packages/yaml/scanner.py", line 576, in fetch_value
    self.get_mark())
yaml.scanner.ScannerError: mapping values are not allowed here
  in "<unicode string>", line 74, column 25:
           to see '{"config": {"hardware": {"memoryMB": <num ... 
                            ^
make: *** [modules] Error 1

The test ansible-test sanity --test no-dict-iteritems [explain] failed with 1 error:

lib/ansible/module_utils/vmware.py:1260:19: use `dict.items` or `ansible.module_utils.six.iteritems` instead of `dict.iteritems`

The test ansible-test sanity --test validate-modules [explain] failed with 9 errors:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec ('first') for "name_match" does not match the documentation (None)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec ('summary') for "format" does not match the documentation (None)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec (443) for "port" does not match the documentation (None)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E324 Value for "default" from the argument_spec (True) for "validate_certs" does not match the documentation (False)
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E325 argument_spec for "tags" defines type="bool" but documentation does not
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E325 argument_spec for "validate_certs" defines type="bool" but documentation does not
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E326 Value for "choices" from the argument_spec (['first', 'last']) for "name_match" does not match the documentation ([])
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:0:0: E326 Value for "choices" from the argument_spec (['summary', 'vsphere']) for "format" does not match the documentation ([])
lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:91:25: E302 DOCUMENTATION is not valid YAML

The test ansible-test sanity --test yamllint [explain] failed with 1 error:

lib/ansible/modules/cloud/vmware/vmware_guest_facts.py:91:25: error DOCUMENTATION: syntax error: mapping values are not allowed here

click here for bot help

@ansibot ansibot removed the needs_rebase https://docs.ansible.com/ansible/devel/dev_guide/developing_rebasing.html label Oct 29, 2018
@ansibot
Copy link
Contributor

ansibot commented Oct 29, 2018

The test ansible-test sanity --test pylint [explain] failed with 2 errors:

lib/ansible/module_utils/vmware.py:1236:37: undefined-variable Undefined variable 'VmomiJSONEncoder'
lib/ansible/module_utils/vmware.py:1266:25: ansible-bad-import-from Import Mapping from ansible.module_utils.common._collections_compat instead of collections

click here for bot help

@ansibot ansibot added the ci_verified Changes made in this PR are causing tests to fail. label Oct 29, 2018
@mattclay
Copy link
Member

One other thought, if we're updating the constraint, is that we only run the integration tests on Python 2.7 and 3.6 currently. To make sure the code still works under Python 2.6 with an older version of pyvmomi we probably need at least a small unit test to check that. Alternatively we could enable the integration tests for Python 2.6.

@jeking3
Copy link
Contributor Author

jeking3 commented Feb 18, 2019

Perhaps I wasn't clear before, but continuing to support Python 2.6 is a waste of energy.
https://www.python.org/dev/peps/pep-0361/
Laat release October 2013, support (including security patches) no longer happening.

@ansibot ansibot removed ci_verified Changes made in this PR are causing tests to fail. needs_rebase https://docs.ansible.com/ansible/devel/dev_guide/developing_rebasing.html stale_ci This PR has been tested by CI more than one week ago. Close and re-open this PR to get it retested. labels Feb 18, 2019
@ansibot ansibot removed the support:core This issue/PR relates to code supported by the Ansible Engineering Team. label Feb 18, 2019
@jeking3
Copy link
Contributor Author

jeking3 commented Feb 18, 2019

This is now passing along with an integration test.

@mattclay
Copy link
Member

@jeking3 While Ansible has dropped official support for Python 2.6 on the controller, management of systems with Python 2.6 is still officially supported. Although the Python Software Foundation no longer supports Python 2.6, there are currently supported Linux distributions which include Python 2.6. Testing is an important part of support, which is why we're concerned about testing modules on Python 2.6.

@jeking3
Copy link
Contributor Author

jeking3 commented Feb 19, 2019

@Akasurde this is ready for final review.

@dagwieers dagwieers added the fortios Fortios community label Feb 22, 2019
@ansibot
Copy link
Contributor

ansibot commented Feb 22, 2019

@Akasurde Akasurde removed the fortios Fortios community label Feb 22, 2019
@Akasurde
Copy link
Member

@mattclay Are you OK in merging this ? or do you have any comment which are unanswered ? Thanks.

@mattclay mattclay dismissed their stale review February 22, 2019 16:54

Review out-of-date.

@ansibot ansibot added community_review In order to be merged, this PR must follow the community review workflow. and removed needs_revision This PR fails CI tests or a maintainer has requested a review/revision of the PR. labels Feb 22, 2019
@Akasurde
Copy link
Member

rebuild_merge

@ansibot ansibot added shipit This PR is ready to be merged by Core and removed community_review In order to be merged, this PR must follow the community review workflow. labels Feb 25, 2019
@ansibot ansibot merged commit f2495ef into ansible:devel Feb 25, 2019
@Akasurde
Copy link
Member

@jeking3 Thanks for the contribution. @pdellaert @mattclay Thanks for the review.

@jeking3 jeking3 deleted the enhanced-vm-facts branch February 25, 2019 20:32
@ansible ansible locked and limited conversation to collaborators Jul 25, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
affects_2.8 This issue/PR affects Ansible v2.8 cloud feature This issue/PR relates to a feature request. module This issue/PR relates to a module. shipit This PR is ready to be merged by Core support:community This issue/PR relates to code supported by the Ansible community. test This PR relates to tests. vmware VMware community
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants