From 7ab3a171d84fe76b9295c3eb28c5f5166c0eaa85 Mon Sep 17 00:00:00 2001 From: Julia Kreger Date: Sat, 26 Sep 2015 08:19:26 -0400 Subject: [PATCH] Initial support to collect node facts like UUID In order to correctly support a fully name driven inventory, one where UUIDs have not been supplied and only names have been provided, we must query ironic after the enrollment of a node to collect the UUID. Change-Id: I8f05f8d8aabca4576b81cd73fa0e62c5f5a6f7ea Depends-On: I23e902c8637e142fba23d71467225d48ee265253 Partial-Bug: #1499057 --- playbooks/library/os_ironic_facts.py | 10 +++++-- .../tasks/update_facts_from_ironic.yaml | 26 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 playbooks/roles/bifrost-configdrives-dynamic/tasks/update_facts_from_ironic.yaml diff --git a/playbooks/library/os_ironic_facts.py b/playbooks/library/os_ironic_facts.py index d60bf0d4f..fc2c74e49 100644 --- a/playbooks/library/os_ironic_facts.py +++ b/playbooks/library/os_ironic_facts.py @@ -82,6 +82,7 @@ def main(): name=dict(required=False), mac=dict(required=False), ironic_url=dict(required=False), + skip_items=dict(required=False, type='list'), ) module_kwargs = openstack_module_kwargs() module = AnsibleModule(argument_spec, **module_kwargs) @@ -114,13 +115,18 @@ def main(): if server: facts = dict(server) new_driver_info = dict() - # Rebuild driver_info to remove any password - # fields as they can be masked. + # Rebuild driver_info to remove any password values + # as they will be masked. for key, value in six.iteritems(facts['driver_info']): if 'password' not in key: new_driver_info[key] = value if new_driver_info: facts['driver_info'] = new_driver_info + + for item in module.params['skip_items']: + if item in facts: + del facts[item] + module.exit_json(changed=False, ansible_facts=facts) else: diff --git a/playbooks/roles/bifrost-configdrives-dynamic/tasks/update_facts_from_ironic.yaml b/playbooks/roles/bifrost-configdrives-dynamic/tasks/update_facts_from_ironic.yaml new file mode 100644 index 000000000..4a650355c --- /dev/null +++ b/playbooks/roles/bifrost-configdrives-dynamic/tasks/update_facts_from_ironic.yaml @@ -0,0 +1,26 @@ +# Copyright (c) 2015 Hewlett-Packard Development Company, L.P. +# +# 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. +--- +# Note(TheJulia): This step allows us to collect things that +# ironic knows, that we do not know potentially, such as an UUID +# should a node have been created without one. +- name: "Collecting node facts" + os_ironic_facts: + auth_type: None + auth: None + ironic_url: "{{ ironic_url }}" + uuid: "{{ uuid | default() }}" + name: "{{ name | default() }}" + skip_items: + - instance_info