Lance Bragstad a3d1af2413 Add a custom filter for parsing instance metadata
TripleO's TLS implementation using nova in the undercloud relies on
instance metadata that contains the services a particular instance is
going to host. For example, metadata for a controller (e.g.,
controller-0) will contain JSON that describes the services and
interfaces that are supposed to be hosted on controller (e.g.,
haproxy/controller-0.ctlplane.example.test).

For TLS, we need to generate certificates for those services
automatically. This requires us to parse the metadata for the instance,
determine the services that are supposed to the hosted by that
instance, and then curate unique principals that we add to FreeIPA.
Once the appropriate hosts (e.g., controller-0.example.test), sub-hosts
(e.g., controller-0.ctlplane.example.test), and principals (e.g.,
haproxy/controller-0.ctlplane.example.test) have been added to FreeIPA,
we can generate certificates for that service and configure it to use
TLS.

The commit attempts to introduce a filter that parses metadata from the
instance and returns a list of tuples to the caller. Each tuple is
unique to each service being hosted on an instance and we use them to
generate the requisite entities in FreeIPA for TLS certificates using
ansible-freeipa later.

The functionality was formally a part of novajoin, which is a nova
metadata service.

This patch adds unit tests and relevant env configuration.

Change-Id: Ibbac29a9d2570280cad0f426ad0b0367587bfee7
2020-03-23 13:18:55 +01:00
..
2020-03-18 14:27:53 +00:00
2020-03-18 00:41:55 +00:00
2020-03-18 00:41:55 +00:00
2020-03-18 00:41:55 +00:00
2020-03-18 00:41:55 +00:00

Role Name

A brief description of the role goes here.

Requirements

Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.

Role Variables

A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.

Dependencies

A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles.

Example Playbook

Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:

- hosts: servers
  roles:
     - { role: username.rolename, x: 42 }

License

Apache 2.0

Author Information

An optional section for the role authors to include contact information, or a website (HTML is not allowed).