Chapter 5. Ansible-based overcloud registration The director uses Ansible-based methods to register overcloud nodes to the Red Hat Customer Portal or a Red Hat Satellite 6 server. 5.1. Red Hat Subscription Manager (RHSM) composable service The rhsm composable service provides a method to register overcloud nodes through Ansible. Each role in the default roles_data file contains a OS::TripleO::Services::Rhsm resource, which is disabled by default. To enable the service, register the resource to the rhsm composable service file: The rhsm composable service accepts a RhsmVars parameter, which allows you to define multiple sub-parameters relevant to your registration. For example: You can also use the RhsmVars parameter in combination with role-specific parameters (e.g. ControllerParameters ) to provide flexibility when enabling specific repositories for different nodes types. The section is a list of sub-parameters available to use with the RhsmVars parameter for use with the rhsm composable service. 5.2. RhsmVars sub-parameters See the role documentation to learn about all Ansible parameters. rhsm Description rhsm_method Choose the registration method. Either portal , satellite , or disable . rhsm_org_id The organization to use for registration. To locate this ID, run sudo subscription-manager orgs from the undercloud node. Enter your Red Hat credentials when prompted, and use the resulting Key value. rhsm_pool_ids The subscription pool ID to use. Use this if not auto-attaching subscriptions. To locate this ID, run sudo subscription-manager list --available --all --matches="*OpenStack*" from the undercloud node, and use the resulting Pool ID value. rhsm_activation_key The activation key to use for registration. Does not work when rhsm_repos is configured. rhsm_autosubscribe Automatically attach compatible subscriptions to this system. Set to true to enable. rhsm_baseurl The base URL for obtaining content. The default is the Red Hat Content Delivery Network URL. If using a Satellite server, change this value to the base URL of your Satellite server content repositories. rhsm_server_hostname The hostname of the subscription management service for registration. The default is the Red Hat Subscription Management hostname. If using a Satellite server, change this value to your Satellite server hostname. rhsm_repos A list of repositories to enable. Does not work when rhsm_activation_key is configured. rhsm_username The username for registration. If possible, use activation keys for registration. rhsm_password The password for registration. If possible, use activation keys for registration. rhsm_rhsm_proxy_hostname The hostname for the HTTP proxy. For example: proxy.example.com . rhsm_rhsm_proxy_port The port for HTTP proxy communication. For example: 8080 . rhsm_rhsm_proxy_user The username to access the HTTP proxy. rhsm_rhsm_proxy_password The password to access the HTTP proxy. Now that you have an understanding of how the rhsm composable service works and how to configure it, you can use the following procedures to configure your own registration details. 5.3. Registering the overcloud with the rhsm composable service Use the following procedure to create an environment file that enables and configures the rhsm composable service. The director uses this environment file to register and subscribe your nodes. Procedure Create an environment file ( templates/rhsm.yml ) to store the configuration. Include your configuration in the environment file. For example: The resource_registry associates the rhsm composable service with the OS::TripleO::Services::Rhsm resource, which is available on each role. The RhsmVars variable passes parameters to Ansible for configuring your Red Hat registration. Save the environment file. You can also provide registration details to specific overcloud roles. The section provides an example of this. 5.4. Applying the rhsm composable service to different roles You can apply the rhsm composable service on a per-role basis. For example, you can apply different sets of configurations to Controller nodes, Compute nodes, and Ceph Storage nodes. Procedure Create an environment file ( templates/rhsm.yml ) to store the configuration. Include your configuration in the environment file. For example: The resource_registry associates the rhsm composable service with the OS::TripleO::Services::Rhsm resource, which is available on each role. The ControllerParameters , ComputeParameters , and CephStorageParameters use their own RhsmVars parameter to pass subscription details to their respective roles. Note Set the RhsmVars parameter within the CephStorageParameters parameter to use a Red Hat Ceph Storage subscription and repositories specific to Ceph Storage. Ensure the rhsm_repos parameter contains the standard Red Hat Enterprise Linux repositories instead of the Extended Update Support (EUS) repositories that Controller and Compute nodes require. Save the environment file. 5.5. Registering the overcloud to Red Hat Satellite Use the following procedure to create an environment file that enables and configures the rhsm composable service to register nodes to Red Hat Satellite instead of the Red Hat Customer Portal. Procedure Create an environment file ( templates/rhsm.yml ) to store the configuration. Include your configuration in the environment file. For example: The resource_registry associates the rhsm composable service with the OS::TripleO::Services::Rhsm resource, which is available on each role. The RhsmVars variable passes parameters to Ansible for configuring your Red Hat registration. Save the environment file. These procedures enable and configure rhsm on the overcloud. However, if you used the rhel-registration method from Red Hat OpenStack Platform version, you must disable it and switch to the Ansible-based method. Use the following procedure to switch from the old rhel-registration method to the Ansible-based method. 5.6. Switching to the rhsm composable service The rhel-registration method runs a bash script to handle the overcloud registration. The scripts and environment files for this method are located in the core Heat template collection at /usr/share/openstack-tripleo-heat-templates/extraconfig/pre_deploy/rhel-registration/ . Complete the following steps to switch from the rhel-registration method to the rhsm composable service. Procedure Exclude the rhel-registration environment files from future deployments operations. In most cases, exclude the following files: rhel-registration/environment-rhel-registration.yaml rhel-registration/rhel-registration-resource-registry.yaml If you use a custom roles_data file, ensure that each role in your roles_data file contains the OS::TripleO::Services::Rhsm composable service. For example: Add the environment file for rhsm composable service parameters to future deployment operations. This method replaces the rhel-registration parameters with the rhsm service parameters and changes the Heat resource that enables the service from: To: You can also include the /usr/share/openstack-tripleo-heat-templates/environments/rhsm.yaml environment file with your deployment to enable the service. To help transition your details from the rhel-registration method to the rhsm method, use the following table to map the your parameters and their values. 5.7. rhel-registration to rhsm mappings rhel-registration rhsm / RhsmVars rhel_reg_method rhsm_method rhel_reg_org rhsm_org_id rhel_reg_pool_id rhsm_pool_ids rhel_reg_activation_key rhsm_activation_key rhel_reg_auto_attach rhsm_autosubscribe rhel_reg_sat_url rhsm_satellite_url rhel_reg_repos rhsm_repos rhel_reg_user rhsm_username rhel_reg_password rhsm_password rhel_reg_http_proxy_host rhsm_rhsm_proxy_hostname rhel_reg_http_proxy_port rhsm_rhsm_proxy_port rhel_reg_http_proxy_username rhsm_rhsm_proxy_user rhel_reg_http_proxy_password rhsm_rhsm_proxy_password Now that you have configured the environment file for the rhsm service, you can include it with your overcloud deployment operation. 5.8. Deploying the overcloud with the rhsm composable service This section shows how to apply your rhsm configuration to the overcloud. Procedure Include rhsm.yml environment file with the openstack overcloud deploy : This enables the Ansible configuration of the overcloud and the Ansible-based registration. Wait until the overcloud deployment completes. Check the subscription details on your overcloud nodes. For example, log into a Controller node and run the following commands: In addition to the director-based registration method, you can also manually register after deployment. 5.9. Running Ansible-based registration manually You can perform manual Ansible-based registration on a deployed overcloud. You accomplish this using the director's dynamic inventory script to define node roles as host groups and then run a playbook against them using ansible-playbook . The following example shows how to manually register Controller nodes using a playbook. Procedure Create a playbook with that using the redhat_subscription modules to register your nodes. For example, the following playbook applies to Controller nodes: This play contains three tasks: Register the node using an activation key. Disable any auto-enabled repositories. Enable only the repositories relevant to the Controller node. The repositories are listed with the repos variable. After deploying the overcloud, you can run the following command so that Ansible executes the playbook ( ansible-osp-registration.yml ) against your overcloud: This command does the following: Runs the dynamic inventory script to get a list of host and their groups. Applies the playbook tasks to the nodes in the group defined in the playbook's hosts parameter, which in this case is the Controller group. 5.10. Locking the environment to a Red Hat Enterprise Linux release Red Hat OpenStack Platform 16.0 is supported on Red Hat Enterprise Linux 8.1. After deploying your overcloud, lock the overcloud repositories to the Red Hat Enterprise Linux 8.1 release. Prerequisites You have deployed an overcloud with all nodes registered with the Red Hat Subscription Manager (RHSM) composable service. Procedure Log into the undercloud as the stack user. Source the stackrc file: Create a static inventory file of your overcloud: If you use an overcloud name different to the default overcloud name of overcloud , set the name of your overcloud with the --plan option. Create a playbook that contains a task to lock the operating system version to Red Hat Enterprise Linux 8.1 on all nodes: Run the set_release.yaml playbook: Note To manually lock a node to a version, log in to the node and run the subscription-manager release command:

Commands:
resource_registry: OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml
parameter_defaults: RhsmVars: rhsm_repos: - rhel-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.8-for-rhel-8-x86_64-rpms - advanced-virt-for-rhel-8-x86_64-rpms - openstack-16-for-rhel-8-x86_64-rpms - rhceph-4-osd-for-rhel-8-x86_64-rpms - rhceph-4-mon-for-rhel-8-x86_64-rpms - rhceph-4-tools-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms rhsm_username: "myusername" rhsm_password: "p@55w0rd!" rhsm_org_id: "1234567"
resource_registry: OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml parameter_defaults: RhsmVars: rhsm_repos: - rhel-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.8-for-rhel-8-x86_64-rpms - advanced-virt-for-rhel-8-x86_64-rpms - openstack-16-for-rhel-8-x86_64-rpms - rhceph-4-osd-for-rhel-8-x86_64-rpms - rhceph-4-mon-for-rhel-8-x86_64-rpms - rhceph-4-tools-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms rhsm_username: "myusername" rhsm_password: "p@55w0rd!" rhsm_org_id: "1234567" rhsm_pool_ids: "1a85f9223e3d5e43013e3d6e8ff506fd" rhsm_method: "portal"
resource_registry: OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml parameter_defaults: ControllerParameters: RhsmVars: rhsm_repos: - rhel-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.8-for-rhel-8-x86_64-rpms - advanced-virt-for-rhel-8-x86_64-rpms - openstack-16-for-rhel-8-x86_64-rpms - rhceph-4-mon-for-rhel-8-x86_64-rpms - rhceph-4-tools-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms rhsm_username: "myusername" rhsm_password: "p@55w0rd!" rhsm_org_id: "1234567" rhsm_pool_ids: "55d251f1490556f3e75aa37e89e10ce5" rhsm_method: "portal" ComputeParameters: RhsmVars: rhsm_repos: - rhel-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.8-for-rhel-8-x86_64-rpms - advanced-virt-for-rhel-8-x86_64-rpms - openstack-16-for-rhel-8-x86_64-rpms - rhceph-4-tools-for-rhel-8-x86_64-rpms rhsm_username: "myusername" rhsm_password: "p@55w0rd!" rhsm_org_id: "1234567" rhsm_pool_ids: "55d251f1490556f3e75aa37e89e10ce5" rhsm_method: "portal" CephStorageParameters: RhsmVars: rhsm_repos: - rhel-8-for-x86_64-baseos-rpms - rhel-8-for-x86_64-appstream-rpms - rhel-8-for-x86_64-highavailability-rpms - ansible-2.9-for-rhel-8-x86_64-rpms - openstack-16-deployment-tools-for-rhel-8-x86_64-rpms - rhceph-4-osd-for-rhel-8-x86_64-rpms rhsm_username: "myusername" rhsm_password: "p@55w0rd!" rhsm_org_id: "1234567" rhsm_pool_ids: "68790a7aa2dc9dc50a9bc39fabc55e0d" rhsm_method: "portal"
resource_registry: OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml parameter_defaults: RhsmVars: rhsm_activation_key: "myactivationkey" rhsm_method: "satellite" rhsm_org_id: "ACME" rhsm_server_hostname: satellite.example.com" rhsm_baseurl: "https://satellite.example.com/pulp/repos"
- name: Controller description: | Controller role that has all the controller services loaded and handles Database, Messaging and Network functions. CountDefault: 1 ServicesDefault: - OS::TripleO::Services::Rhsm
resource_registry: OS::TripleO::NodeExtraConfig: rhel-registration.yaml
resource_registry: OS::TripleO::Services::Rhsm: /usr/share/openstack-tripleo-heat-templates/deployment/rhsm/rhsm-baremetal-ansible.yaml
openstack overcloud deploy <other cli args> -e ~/templates/rhsm.yaml
sudo subscription-manager status sudo subscription-manager list --consumed
--- - name: Register Controller nodes hosts: Controller become: yes vars: repos: - rhel-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.8-for-rhel-8-x86_64-rpms - advanced-virt-for-rhel-8-x86_64-rpms - openstack-16-for-rhel-8-x86_64-rpms - rhceph-4-mon-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms tasks: - name: Register system redhat_subscription: username: myusername password: p@55w0rd! org_id: 1234567 pool_ids: 1a85f9223e3d5e43013e3d6e8ff506fd - name: Disable all repos command: "subscription-manager repos --disable *" - name: Enable Controller node repos command: "subscription-manager repos --enable {{ item }}" with_items: "{{ repos }}"
ansible-playbook -i /usr/bin/tripleo-ansible-inventory ansible-osp-registration.yml
source ~/stackrc
tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
cat > ~/set_release.yaml <<'EOF' - hosts: overcloud gather_facts: false tasks: - name: set release to 8.1 command: subscription-manager release --set=8.1 become: true EOF
ansible-playbook -i ~/inventory.yaml -f 25 ~/set_release.yaml
sudo subscription-manager release --set=8.1