From e72e82eb0336167bbf2571fa309018a2e2e79bdf Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Sun, 30 Apr 2023 14:33:47 -0400 Subject: [PATCH 001/149] update --- CONTRIBUTING.md | 3 +- README.md | 57 +++++++++++- group_vars/all.yml | 2 +- group_vars/hosts.template | 26 ++++++ roles/satellite-manage-nodes/.travis.yml | 29 +++++++ roles/satellite-manage-nodes/README.md | 38 ++++++++ .../satellite-manage-nodes/defaults/main.yml | 2 + .../satellite-manage-nodes/handlers/main.yml | 2 + roles/satellite-manage-nodes/meta/main.yml | 53 ++++++++++++ .../tasks/get_activation_key.yml | 19 ++++ .../tasks/get_repo_list.yml | 17 ++++ roles/satellite-manage-nodes/tasks/main.yml | 2 + .../tasks/subscribe_client.yml | 17 ++++ roles/satellite-manage-nodes/tests/inventory | 2 + roles/satellite-manage-nodes/tests/test.yml | 5 ++ roles/satellite-manage-nodes/vars/main.yml | 2 + rsync.yml | 20 +++++ satellite_re_subscribe.yml | 86 +++++++++++++++++++ 18 files changed, 376 insertions(+), 6 deletions(-) create mode 100644 group_vars/hosts.template create mode 100644 roles/satellite-manage-nodes/.travis.yml create mode 100644 roles/satellite-manage-nodes/README.md create mode 100644 roles/satellite-manage-nodes/defaults/main.yml create mode 100644 roles/satellite-manage-nodes/handlers/main.yml create mode 100644 roles/satellite-manage-nodes/meta/main.yml create mode 100644 roles/satellite-manage-nodes/tasks/get_activation_key.yml create mode 100644 roles/satellite-manage-nodes/tasks/get_repo_list.yml create mode 100644 roles/satellite-manage-nodes/tasks/main.yml create mode 100644 roles/satellite-manage-nodes/tasks/subscribe_client.yml create mode 100644 roles/satellite-manage-nodes/tests/inventory create mode 100644 roles/satellite-manage-nodes/tests/test.yml create mode 100644 roles/satellite-manage-nodes/vars/main.yml create mode 100644 rsync.yml create mode 100644 satellite_re_subscribe.yml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9aab41f..a744dbf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing to ansible-satellite -Feel free to contribute to the source code. This set of Ansible plays was contibuted by **Stephen Clayton** _[stephenpc@gmail.com](mailto:stephenpc@gmail.com)_. +Feel free to contribute to the source code. Contributors --- @@ -8,3 +8,4 @@ Contributors - [stephenpc](https://github.com/stephenpc) - [defionscode](https://github.com/defionscode) - [stenwt](https://github.com/stenwt) +- [psehgaft](https://github.com/psehgaft) diff --git a/README.md b/README.md index 62deb4a..cdcf7ff 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# ansible-satellite | Satellite 6.1.x Orchestration +# ansible-satellite | Satellite 6.12.x Orchestration -### Install and configure Satellite 6.1.x on Red Hat Enterprise Linux 6.x and 7.x. This collection can also be used to set up Satellite on AWS. +### Install and configure Satellite 6.12.x on Red Hat Enterprise Linux 6.x and 7.x. This collection can also be used to set up Satellite on AWS. -Fundamental steps are based on the process outlined at the [Satellite 6.1 Installation Guide on the Red Hat Customer Portal](https://access.redhat.com/documentation/en-US/Red_Hat_Satellite/6.1/html/Installation_Guide/index.html). +Fundamental steps are based on the process outlined at the [Satellite 6.1 Installation Guide on the Red Hat Customer Portal](https://access.redhat.com/documentation/en-us/red_hat_satellite/6.12/html-single/installing_satellite_server_in_a_connected_network_environment/index). -At the last revision of this document, the current stable version of Satellite is 6.1.8. +At the last revision of this document, the current stable version of Satellite is 6.7 Reference [standup.yml](standup.yml), which is the installation playbook, to see an example of how the playbooks may be structured, or take a look at any of the listed playbooks below. @@ -63,6 +63,55 @@ Invoke the role in the following way. Please note the configuration values speci # ldap_refresh: yes ``` +# Ansible Satellite Transition +This playbook will move nodes registered in one Satellite host to another. *It will not install satellite/katello server for you.* Use this after you have set up a new Satellite server and want to move all your existing nodes from one server to another. + +# Configure Playbook +Copy the hosts.template file and fill it out with information for your infrastructure. Add systems to [nodes] for hosts you want tasks to run on. + +```[satellite] +satellite.example.com + +[old_satellite] +satellite.example.com + +[puppet_master] +satellite.example.com + +[puppet_ca] +satellite.example.com + +[nodes] +node1.example.com +node2.example.com + +[6RedHatEnterpriseServer:vars] +activationkey='server,6epel' + +[7RedHatEnterpriseServec:vars] +activationkey='workstation,6epel' +``` +Use activation keys to register the hosts so make sure your activation keys are set up in satellite before running. + +#Running + +Enable the satellite settings create_new_host_when_facts_are_uploaded and create_new_host_when_report_is_uploaded to have hosts automatically created after puppet runs. You should also enable a default_location and default_organization in satellite. These settings are all under the puppet tab. + +To run on all of your nodes (defined in hosts) make sure you update the activationkey variables (in hosts) and then use. + +`ansible-playbook -i hosts satellite-playbook.yaml` + +Add `-k` (ssh) or `-K` (sudo) if you need password prompts. + +You can also run just the puppet registration tasks with + +`ansible-playbook -i hosts satellite-playbook.yaml --tags puppet` + +After the tasks complete you should have new unmanaged hosts in satellite. Edit the host and add any configuration you need (host groups, network, puppet). Unfortunately, I could not find a way to automate those steps yet. Your best bet is probably [hammer](https://github.com/theforeman/hammer-cli). + +Once the hosts have been moved you may need to reinstall the katello-agent. Do that with `ansible all -i hosts -m yum -a "state=absent name=katello-agent"` and then `ansible all -i hosts -m yum -a "state=present name=katello-agent"` + + ## Satellite Content (**satellite-content**) _This role creates lifecycle environments on the Satellite Server, creates content views and filters them, then sets up activation keys pointing to each, and a release version with wich to activate RHEL systems._ diff --git a/group_vars/all.yml b/group_vars/all.yml index a31ef9c..0f27f85 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -13,7 +13,7 @@ sat_manifest: "manifest.zip" sat_domain: "yourdomain.com" sat_hostname: "satellite" -satellite_server: "satellite.yourdomain.com" +satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" diff --git a/group_vars/hosts.template b/group_vars/hosts.template new file mode 100644 index 0000000..4e61004 --- /dev/null +++ b/group_vars/hosts.template @@ -0,0 +1,26 @@ +[satellite] +satellite.example.com + +[old_satellite] +satellite.example.com + +[puppet_master] +satellite.example.com + +[puppet_ca] +satellite.example.com + +[nodes] +node.example.com + +[6RedHatEnterpriseServer:vars] +activationkey='server,6epel' + +[6RedHatEnterpriseWorkstation:vars] +activationkey='workstation,6epel' + +[7RedHatEnterpriseServer:vars] +activationkey='server,7epel' + +[7RedHatEnterpriseWorkstation:vars] +activationkey='workstation,7epel' \ No newline at end of file diff --git a/roles/satellite-manage-nodes/.travis.yml b/roles/satellite-manage-nodes/.travis.yml new file mode 100644 index 0000000..36bbf62 --- /dev/null +++ b/roles/satellite-manage-nodes/.travis.yml @@ -0,0 +1,29 @@ +--- +language: python +python: "2.7" + +# Use the new container infrastructure +sudo: false + +# Install ansible +addons: + apt: + packages: + - python-pip + +install: + # Install ansible + - pip install ansible + + # Check ansible version + - ansible --version + + # Create ansible.cfg with correct roles_path + - printf '[defaults]\nroles_path=../' >ansible.cfg + +script: + # Basic role syntax check + - ansible-playbook tests/test.yml -i tests/inventory --syntax-check + +notifications: + webhooks: https://galaxy.ansible.com/api/v1/notifications/ \ No newline at end of file diff --git a/roles/satellite-manage-nodes/README.md b/roles/satellite-manage-nodes/README.md new file mode 100644 index 0000000..225dd44 --- /dev/null +++ b/roles/satellite-manage-nodes/README.md @@ -0,0 +1,38 @@ +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 +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/roles/satellite-manage-nodes/defaults/main.yml b/roles/satellite-manage-nodes/defaults/main.yml new file mode 100644 index 0000000..78942b8 --- /dev/null +++ b/roles/satellite-manage-nodes/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for satellite-manage-nodes \ No newline at end of file diff --git a/roles/satellite-manage-nodes/handlers/main.yml b/roles/satellite-manage-nodes/handlers/main.yml new file mode 100644 index 0000000..e8b5929 --- /dev/null +++ b/roles/satellite-manage-nodes/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for satellite-manage-nodes \ No newline at end of file diff --git a/roles/satellite-manage-nodes/meta/main.yml b/roles/satellite-manage-nodes/meta/main.yml new file mode 100644 index 0000000..227ad9c --- /dev/null +++ b/roles/satellite-manage-nodes/meta/main.yml @@ -0,0 +1,53 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.9 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. + \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tasks/get_activation_key.yml b/roles/satellite-manage-nodes/tasks/get_activation_key.yml new file mode 100644 index 0000000..7dc932e --- /dev/null +++ b/roles/satellite-manage-nodes/tasks/get_activation_key.yml @@ -0,0 +1,19 @@ +--- +# tasks file for satellite-manage-nodes + + # Get activation key + - name: ":::: Get {{ node }} activation key ::::" + command: > + /bin/hammer product create + --organization "{{ initial_org }}" + --name "{{ item.name }}" + register: create_addl_prod + with_items: sat_custom_products + failed_when: > + create_addl_prod.rc != 0 + and create_addl_prod.rc != 65 + changed_when: > + create_addl_prod.rc == 0 + + + \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tasks/get_repo_list.yml b/roles/satellite-manage-nodes/tasks/get_repo_list.yml new file mode 100644 index 0000000..f3a126c --- /dev/null +++ b/roles/satellite-manage-nodes/tasks/get_repo_list.yml @@ -0,0 +1,17 @@ +--- +# tasks file for satellite-manage-nodes + # Update certificate + - name: ":::: Download satellite {{ satellite_server }} certificate ::::" + shell: + cmd: subscription-manager repos --list-enabled + register: enabled_repos_out + + # Subscribe client + - name: ":::: Subscribe {{ node }} with activation key ::::" + community.general.redhat_subscription: + state: present + activationkey: "{{ activation_key }}" + org_id: "{{ organization_id }}" + register: subscribe_node_out + + # Disable repos \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tasks/main.yml b/roles/satellite-manage-nodes/tasks/main.yml new file mode 100644 index 0000000..cc8f4ec --- /dev/null +++ b/roles/satellite-manage-nodes/tasks/main.yml @@ -0,0 +1,2 @@ +--- +# tasks file for satellite-manage-nodes \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tasks/subscribe_client.yml b/roles/satellite-manage-nodes/tasks/subscribe_client.yml new file mode 100644 index 0000000..37d0306 --- /dev/null +++ b/roles/satellite-manage-nodes/tasks/subscribe_client.yml @@ -0,0 +1,17 @@ +--- +# tasks file for satellite-manage-nodes + # Update certificate + - name: ":::: Download satellite {{ satellite_server }} certificate ::::" + shell: + cmd: rpm -Uvh http://{{ satellite_server }}/pub/katello-ca-consumer-latest.noarch.rpm --force + register: install_katello_ca_out + + # Subscribe client + - name: ":::: Subscribe {{ node }} with activation key ::::" + community.general.redhat_subscription: + state: present + activationkey: "{{ activation_key }}" + org_id: "{{ organization_id }}" + register: subscribe_node_out + + # Disable repos \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tests/inventory b/roles/satellite-manage-nodes/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/roles/satellite-manage-nodes/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/roles/satellite-manage-nodes/tests/test.yml b/roles/satellite-manage-nodes/tests/test.yml new file mode 100644 index 0000000..ed6762d --- /dev/null +++ b/roles/satellite-manage-nodes/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - satellite-manage-nodes \ No newline at end of file diff --git a/roles/satellite-manage-nodes/vars/main.yml b/roles/satellite-manage-nodes/vars/main.yml new file mode 100644 index 0000000..1a474d4 --- /dev/null +++ b/roles/satellite-manage-nodes/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for satellite-manage-nodes \ No newline at end of file diff --git a/rsync.yml b/rsync.yml new file mode 100644 index 0000000..db2df87 --- /dev/null +++ b/rsync.yml @@ -0,0 +1,20 @@ +--- +# ansible-satellite | Upgrade + +- hosts: local + become: yes + ansible_become_pass: + gather_facts: yes + tasks: + + - set_facts: + path: + user: + remote_server: + remote_path: + + - name: Execute rsync command + ansible.builtin.shell: + cmd: rsync -avzh {{ path }}/* {{ user }}@{{ remote_server }}:{{ remote_path }}/ + + # rsync -avzh -e 'ssh -X' --rsync-path='SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass sudo -A rsync' /var/lib/pulp/* [user]@[satellite server v12]:/var/lib/pulp/ \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml new file mode 100644 index 0000000..5f1028b --- /dev/null +++ b/satellite_re_subscribe.yml @@ -0,0 +1,86 @@ +--- +# ansible-satellite | Satellite 6.x Orchestration + +- hosts: satellite6-server-prod + become: yes + sudo: True + vars: + org_id: example + puppet_env: production + + tasks: + # create dynamic groups to define variables + - group_by: key={{ ansible_distribution_major_version }}{{ ansible_lsb.id }} + + - name: Unregister host + redhat_subscription: state=absent + ignore_errors: True + + - name: Clean old subscription-manager data + shell: /usr/bin/subscription-manager clean + + - name: Remove old satellite certs + yum: name=katello-ca-consumer-{{ groups['old_satellite'][0] }} + state=absent + + - name: Install new satellite certs + shell: "/usr/bin/yum localinstall -e 0 -y http://{{ groups['satellite'][0] }}/pub/katello-ca-consumer-latest.noarch.rpm" + + - name: Subscribe to Satellite + shell: "/usr/bin/subscription-manager register --org {{ org_id }} --activationkey={{ activationkey }}" + register: subscription_result + ignore_errors: True + + # sometimes nodes fail to unregister + - name: Force subscribe + shell: "/usr/bin/subscription-manager register --force --org {{ org_id }} --activationkey={{ activationkey }}" + when: "'Use --force' in subscription_result.stdout" + + - name: Remove puppet certs + file: path=/var/lib/puppet/ssl + state=absent + tags: puppet + + # Clean the old cert just in case + - name: clean old cert on puppet ca + shell: /usr/bin/puppet cert clean {{ ansible_fqdn }} + delegate_to: "{{ groups['puppet_ca'][0] }}" + ignore_errors: True + tags: puppet + + - name: Update puppet conf ca + lineinfile: dest=/etc/puppet/puppet.conf + regexp="^\s*ca_server\s*=" + line="ca_server = {{ groups['puppet_ca'][0] }}" + tags: puppet + + - name: Update puppet conf server + lineinfile: dest=/etc/puppet/puppet.conf + regexp="^\s*server\s*=" + line="server = {{ groups['puppet_master'][0] }}" + tags: puppet + + - name: Update puppet environment + lineinfile: dest=/etc/puppet/puppet.conf + regexp="^\s*environment\s*=" + line="environment = {{ puppet_env }}" + tags: puppet + + - name: Kill existing puppet agent runs + command: /usr/bin/killall puppet + tags: puppet + ignore_errors: True + + - name: Run puppet to cache certs + shell: /usr/bin/puppet agent -t + ignore_errors: True + tags: puppet + + - name: sign puppet certificate + shell: /usr/bin/puppet cert sign {{ ansible_fqdn }} + delegate_to: "{{ groups['puppet_ca'][0] }}" + tags: puppet + + - name: Run puppet again with valid cert + shell: /usr/bin/puppet agent -t + ignore_errors: True From 97ab0669d274a38f7dc3fe9dbbbdf708305d65e2 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Mon, 1 May 2023 16:52:51 -0400 Subject: [PATCH 002/149] update --- README.md | 36 ++++---- group_vars/hosts.template | 2 +- group_vars/inventory | 38 +++++++++ group_vars/{all.yml => satellite.yml} | 11 ++- group_vars/secrets.yml | 6 +- maintenance.yml | 2 +- playbook.tar | Bin 0 -> 286720 bytes refresh_ldap_groups.yml | 2 +- refresh_s3_rpms.yml | 2 +- roles/satellite-auth/meta/main.yml | 6 +- satellite_re_subscribe.yml | 113 +++++++++++++------------- self-subscribe.yml | 2 +- standup.yml | 3 +- upgrade.yml | 2 +- 14 files changed, 137 insertions(+), 88 deletions(-) create mode 100644 group_vars/inventory rename group_vars/{all.yml => satellite.yml} (85%) create mode 100644 playbook.tar diff --git a/README.md b/README.md index cdcf7ff..d5203b0 100644 --- a/README.md +++ b/README.md @@ -46,14 +46,14 @@ _These scripts are written to aid in refreshing subscriptions on all the hosts, ## Satellite Authentication (**satellite-auth**) _This role sets up the Satellite Server with authenticated local users, or ties it into a central LDAP server for authentication._ -Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-auth/vars/main.yml](roles/satellite-auth/vars/main.yml), [all.yml](group_vars/all.yml) and [secrets.yml](group_vars/secrets.yml). +Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-auth/vars/main.yml](roles/satellite-auth/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml). ```yaml --- - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes # satellite-auth | Define users and assign them roles @@ -63,10 +63,10 @@ Invoke the role in the following way. Please note the configuration values speci # ldap_refresh: yes ``` -# Ansible Satellite Transition +## Ansible Satellite Transition This playbook will move nodes registered in one Satellite host to another. *It will not install satellite/katello server for you.* Use this after you have set up a new Satellite server and want to move all your existing nodes from one server to another. -# Configure Playbook +### Configure Playbook Copy the hosts.template file and fill it out with information for your infrastructure. Add systems to [nodes] for hosts you want tasks to run on. ```[satellite] @@ -99,13 +99,13 @@ Enable the satellite settings create_new_host_when_facts_are_uploaded and create To run on all of your nodes (defined in hosts) make sure you update the activationkey variables (in hosts) and then use. -`ansible-playbook -i hosts satellite-playbook.yaml` +`ansible-playbook -i inventory satellite-playbook.yaml` Add `-k` (ssh) or `-K` (sudo) if you need password prompts. You can also run just the puppet registration tasks with -`ansible-playbook -i hosts satellite-playbook.yaml --tags puppet` +`ansible-playbook -i inventory satellite-playbook.yaml --tags puppet` After the tasks complete you should have new unmanaged hosts in satellite. Edit the host and add any configuration you need (host groups, network, puppet). Unfortunately, I could not find a way to automate those steps yet. Your best bet is probably [hammer](https://github.com/theforeman/hammer-cli). @@ -115,14 +115,14 @@ Once the hosts have been moved you may need to reinstall the katello-agent. Do t ## Satellite Content (**satellite-content**) _This role creates lifecycle environments on the Satellite Server, creates content views and filters them, then sets up activation keys pointing to each, and a release version with wich to activate RHEL systems._ -Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-content/vars/main.yml](roles/satellite-content/vars/main.yml), [all.yml](group_vars/all.yml) and [secrets.yml](group_vars/secrets.yml). +Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-content/vars/main.yml](roles/satellite-content/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml). ```yaml --- - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes roles: @@ -132,14 +132,14 @@ Invoke the role in the following way. Please note the configuration values speci ## Satellite Installation (**satellite-install**) _This role installs Satellite to a RHEL host._ -Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-install/vars/main.yml](roles/satellite-install/vars/main.yml), [all.yml](group_vars/all.yml) and [secrets.yml](group_vars/secrets.yml). +Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-install/vars/main.yml](roles/satellite-install/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml). ```yaml --- - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes # satellite-install | Install Satellite 6 to a host @@ -150,7 +150,7 @@ Invoke the role in the following way. Please note the configuration values speci ## Satellite Maintenance Tasks (**satellite-maintenance**) _This role covers several items with regard to maintaining the security of the Satellite server, such as SSL configuration. It also provides orchestration of rpm content to the Satellite server, so that it can be made available to hosts on a regular basis. It leverages some variables from the **satellite-content** role as well._ -Invoke the role in the following way. Please note the configuration values specified in [satellite-maintenance/vars/main.yml](roles/satellite-maintenance/vars/main.yml), [satellite-content/vars/main.yml](roles/satellite-content/vars/main.yml), [all.yml](group_vars/all.yml) and [secrets.yml](group_vars/secrets.yml). +Invoke the role in the following way. Please note the configuration values specified in [satellite-maintenance/vars/main.yml](roles/satellite-maintenance/vars/main.yml), [satellite-content/vars/main.yml](roles/satellite-content/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml). ```yaml --- @@ -169,14 +169,14 @@ Invoke the role in the following way. Please note the configuration values speci ## Amazon Route53 DNS Registration (**satellite-route53**) _This role adds an entry into Amazon Route53 DNS for the Satellite server._ -Invoke the role in the following way. Please note the configuration values specified in [all.yml](group_vars/all.yml). +Invoke the role in the following way. Please note the configuration values specified in [satellite.yml](group_vars/satellite.yml). ```yaml --- - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes roles: @@ -188,14 +188,14 @@ Invoke the role in the following way. Please note the configuration values speci ## Satellite Self-Subscription (**satellite-selfsubscribe**) _This roles subscribes the Satellite server to itself. It pauses for a period to allow someone to update the Satellite server manifest at the **Red Hat Customer Portal > Subscription Management > [Subscription Management Applications](https://access.redhat.com/management/distributors?type=satellite) > Satellite**, and will then continue to set Satellite up to receive content filtered in the same way as other systems._ -Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-selfsubscribe/vars/main.yml](roles/satellite-selfsubscribe/vars/main.yml), [all.yml](group_vars/all.yml) and [secrets.yml](group_vars/secrets.yml). +Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-selfsubscribe/vars/main.yml](roles/satellite-selfsubscribe/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml). ```yaml --- - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes roles: @@ -214,14 +214,14 @@ Note: A manifest can been created and included as part of this playbook. It can ## Satellite Setup (**satellite-setup**) _This role ties the Satellite server to Red Hat using the manifest mentioned above, activates products, repositories, and also brings in Docker images from the Red Hat Registry, along with 3rd party and custom repositories for your own generated RPM content._ -Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-setup/vars/main.yml](roles/satellite-setup/vars/main.yml), [all.yml](group_vars/all.yml) and [secrets.yml](group_vars/secrets.yml) +Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-setup/vars/main.yml](roles/satellite-setup/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml) ```yaml --- - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes roles: @@ -231,7 +231,7 @@ Invoke the role in the following way. Please note the configuration values speci ## Satellite In-Place Upgrade (**satellite-upgrade**) _This role performs an in-place upgrade of Satellite 6.1 to the current 6.1.x release._ -Invoke the role in the following way. Please note the configuration values specified in [all.yml](group_vars/all.yml). +Invoke the role in the following way. Please note the configuration values specified in [satellite.yml](group_vars/satellite.yml). ```yaml --- diff --git a/group_vars/hosts.template b/group_vars/hosts.template index 4e61004..913374d 100644 --- a/group_vars/hosts.template +++ b/group_vars/hosts.template @@ -10,7 +10,7 @@ satellite.example.com [puppet_ca] satellite.example.com -[nodes] +[satellite6-server-prod] node.example.com [6RedHatEnterpriseServer:vars] diff --git a/group_vars/inventory b/group_vars/inventory new file mode 100644 index 0000000..27dc551 --- /dev/null +++ b/group_vars/inventory @@ -0,0 +1,38 @@ +[satellite] +student1-sat.twsfd.example.opentlc.com + +[old_satellite] +student1-sat.twsfd.example.opentlc.com + +# [puppet_master] +# satellite.example.com + +# [puppet_ca] +# satellite.example.com + +[satellite6-server-prod] +student1-sat.twsfd.example.opentlc.com ansible_connection=ssh ansible_ssh_user=student ansible_ssh_pass=lvynx8un + +[6RedHatEnterpriseServer:vars] +activationkey='server,6epel' + +[6RedHatEnterpriseWorkstation:vars] +activationkey='workstation,6epel' + +[7RedHatEnterpriseServer:vars] +activationkey='server,7epel' + +[7RedHatEnterpriseWorkstation:vars] +activationkey='workstation,7epel' + +[8RedHatEnterpriseServer:vars] +activationkey='server,8epel' + +[8RedHatEnterpriseWorkstation:vars] +activationkey='workstation,8epel' + +[9RedHatEnterpriseServer:vars] +activationkey='server,9epel' + +[9RedHatEnterpriseWorkstation:vars] +activationkey='workstation,9epel' \ No newline at end of file diff --git a/group_vars/all.yml b/group_vars/satellite.yml similarity index 85% rename from group_vars/all.yml rename to group_vars/satellite.yml index 0f27f85..5faf140 100644 --- a/group_vars/all.yml +++ b/group_vars/satellite.yml @@ -1,8 +1,8 @@ --- # ansible-satellite group vars -initial_org: "Your Organization" -initial_loc: "Your Location" +initial_org: "Default Organization" +initial_loc: "Default Location" initial_user: "admin" sat_admin_email: "some-admin-user@yourdomain.com" sat_admin_firstname: "Admin" @@ -11,9 +11,10 @@ sat_admin_lastname: "User" # Place the file with this name in the roles/satellite-setup/files folder sat_manifest: "manifest.zip" -sat_domain: "yourdomain.com" +sat_domain: "twsfd.example.opentlc.com/" sat_hostname: "satellite" satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" +org_id: 1 #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" @@ -35,4 +36,6 @@ satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" # Go through self-subscription process # self_subscribe_key: "satellite_key-ak" -# satellite_product_sku: "SOME-RH-SKU" \ No newline at end of file +# satellite_product_sku: "SOME-RH-SKU" + + diff --git a/group_vars/secrets.yml b/group_vars/secrets.yml index 6fa9f53..fead58c 100644 --- a/group_vars/secrets.yml +++ b/group_vars/secrets.yml @@ -4,10 +4,10 @@ # EXAMPLE: # ansible-vault encrypt secrets.yml -rhn_user: "RHN-USER" -rhn_pass: "RHN-PASS" +rhn_user: "admin" +rhn_pass: "lvynx8un" rhn_pool_id: "SOME-LONG-RED-HAT-POOL-ID" -sat_admin_password: "SATELLITE-ADMIN-PASSWORD" +sat_admin_password: "lvynx8un" # This is only needed if using a custom SSL certificate #openssl_passphrase: "PASSWORD-TO-USE-FOR-OPENSSL-ENCRYPTION-OF-PRIVATE-KEY" \ No newline at end of file diff --git a/maintenance.yml b/maintenance.yml index 9e4b691..7442ccd 100644 --- a/maintenance.yml +++ b/maintenance.yml @@ -4,7 +4,7 @@ - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes roles: diff --git a/playbook.tar b/playbook.tar new file mode 100644 index 0000000000000000000000000000000000000000..14364d54ae67b71587cf368ccf5591c139e23626 GIT binary patch literal 286720 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 S1U3-ZKwtxb4FrC35cq#q=?d`x literal 0 HcmV?d00001 diff --git a/refresh_ldap_groups.yml b/refresh_ldap_groups.yml index 2185670..f6bca92 100644 --- a/refresh_ldap_groups.yml +++ b/refresh_ldap_groups.yml @@ -4,7 +4,7 @@ - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes roles: diff --git a/refresh_s3_rpms.yml b/refresh_s3_rpms.yml index 2279a34..ce35f2f 100644 --- a/refresh_s3_rpms.yml +++ b/refresh_s3_rpms.yml @@ -4,7 +4,7 @@ - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes roles: diff --git a/roles/satellite-auth/meta/main.yml b/roles/satellite-auth/meta/main.yml index 14e2854..cda6bdb 100644 --- a/roles/satellite-auth/meta/main.yml +++ b/roles/satellite-auth/meta/main.yml @@ -4,15 +4,19 @@ galaxy_info: description: Authentication role for Red Hat Satellite 6, that sets up local and external authentication sources # company: your company (optional) license: GPLv3 - min_ansible_version: 1.9.4 + min_ansible_version: 2.9.x platforms: - name: EL versions: - 6 - 7 + - 8 + - 9 categories: - cloud - cloud:ec2 - packaging - system + - physical + - vmware dependencies: [] \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 5f1028b..0465564 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -3,25 +3,28 @@ - hosts: satellite6-server-prod become: yes - sudo: True - vars: - org_id: example - puppet_env: production - + vars_files: + - group_vars/satellite.yml + - group_vars/secrets.yml + gather_facts: yes + tasks: # create dynamic groups to define variables - - group_by: key={{ ansible_distribution_major_version }}{{ ansible_lsb.id }} + - group_by: + key: "{{ ansible_distribution_major_version }}" - name: Unregister host - redhat_subscription: state=absent + redhat_subscription: + state: absent ignore_errors: True - name: Clean old subscription-manager data shell: /usr/bin/subscription-manager clean - name: Remove old satellite certs - yum: name=katello-ca-consumer-{{ groups['old_satellite'][0] }} - state=absent + yum: + name: "katello-ca-consumer-{{ groups['old_satellite'][0] }}" + state: absent - name: Install new satellite certs shell: "/usr/bin/yum localinstall -e 0 -y http://{{ groups['satellite'][0] }}/pub/katello-ca-consumer-latest.noarch.rpm" @@ -36,51 +39,51 @@ shell: "/usr/bin/subscription-manager register --force --org {{ org_id }} --activationkey={{ activationkey }}" when: "'Use --force' in subscription_result.stdout" - - name: Remove puppet certs - file: path=/var/lib/puppet/ssl - state=absent - tags: puppet + # - name: Remove puppet certs + # file: path=/var/lib/puppet/ssl + # state=absent + # tags: puppet # Clean the old cert just in case - - name: clean old cert on puppet ca - shell: /usr/bin/puppet cert clean {{ ansible_fqdn }} - delegate_to: "{{ groups['puppet_ca'][0] }}" - ignore_errors: True - tags: puppet - - - name: Update puppet conf ca - lineinfile: dest=/etc/puppet/puppet.conf - regexp="^\s*ca_server\s*=" - line="ca_server = {{ groups['puppet_ca'][0] }}" - tags: puppet - - - name: Update puppet conf server - lineinfile: dest=/etc/puppet/puppet.conf - regexp="^\s*server\s*=" - line="server = {{ groups['puppet_master'][0] }}" - tags: puppet - - - name: Update puppet environment - lineinfile: dest=/etc/puppet/puppet.conf - regexp="^\s*environment\s*=" - line="environment = {{ puppet_env }}" - tags: puppet - - - name: Kill existing puppet agent runs - command: /usr/bin/killall puppet - tags: puppet - ignore_errors: True - - - name: Run puppet to cache certs - shell: /usr/bin/puppet agent -t - ignore_errors: True - tags: puppet - - - name: sign puppet certificate - shell: /usr/bin/puppet cert sign {{ ansible_fqdn }} - delegate_to: "{{ groups['puppet_ca'][0] }}" - tags: puppet - - - name: Run puppet again with valid cert - shell: /usr/bin/puppet agent -t - ignore_errors: True + # - name: clean old cert on puppet ca + # shell: /usr/bin/puppet cert clean {{ ansible_fqdn }}hromerot + # delegate_to: "{{ groups['puppet_ca'][0] }}" + # ignore_errors: True + # tags: puppet + + # - name: Update puppet conf ca + # lineinfile: dest=/etc/puppet/puppet.conf + # regexp="^\s*ca_server\s*=" + # line="ca_server = {{ groups['puppet_ca'][0] }}" + # tags: puppet + + # - name: Update puppet conf server + # lineinfile: dest=/etc/puppet/puppet.conf + # regexp="^\s*server\s*=" + # line="server = {{ groups['puppet_master'][0] }}" + # tags: puppet + + # - name: Update puppet environment + # lineinfile: dest=/etc/puppet/puppet.conf + # regexp="^\s*environment\s*=" + # line="environment = {{ puppet_env }}" + # tags: puppet + + # - name: Kill existing puppet agent runs + # command: /usr/bin/killall puppet + # tags: puppet + # ignore_errors: True + + # - name: Run puppet to cache certs + # shell: /usr/bin/puppet agent -t + # ignore_errors: True + # tags: puppet + + # - name: sign puppet certificate + # shell: /usr/bin/puppet cert sign {{ ansible_fqdn }} + # delegate_to: "{{ groups['puppet_ca'][0] }}" + # tags: puppet + + # - name: Run puppet again with valid cert + # shell: /usr/bin/puppet agent -t + # ignore_errors: True diff --git a/self-subscribe.yml b/self-subscribe.yml index d4fbd8f..346b71a 100644 --- a/self-subscribe.yml +++ b/self-subscribe.yml @@ -4,7 +4,7 @@ - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: no roles: diff --git a/standup.yml b/standup.yml index 86fdc3d..c3eeb9f 100644 --- a/standup.yml +++ b/standup.yml @@ -4,9 +4,10 @@ - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml - group_vars/secrets.yml gather_facts: yes + roles: # satellite-install | Install Satellite 6 to a host - role: satellite-install diff --git a/upgrade.yml b/upgrade.yml index c84aece..ca8e2bb 100644 --- a/upgrade.yml +++ b/upgrade.yml @@ -4,7 +4,7 @@ - hosts: satellite6-server-prod become: yes vars_files: - - group_vars/all.yml + - group_vars/satellite.yml gather_facts: yes roles: # satellite-upgrade | Perform Satellite Upgrade From 89f1da6bd52f6a9fcd0246c2e80230029c289d79 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Mon, 1 May 2023 17:15:20 -0400 Subject: [PATCH 003/149] update --- group_vars/{hosts.template => inventory.template} | 0 satellite_re_subscribe.yml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename group_vars/{hosts.template => inventory.template} (100%) diff --git a/group_vars/hosts.template b/group_vars/inventory.template similarity index 100% rename from group_vars/hosts.template rename to group_vars/inventory.template diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 0465564..8c0a172 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -14,7 +14,7 @@ key: "{{ ansible_distribution_major_version }}" - name: Unregister host - redhat_subscription: + subscription-manager: state: absent ignore_errors: True From c4a7ba382042099011aa2dcf53d5bd9bed3d81f3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Tue, 2 May 2023 11:55:06 -0400 Subject: [PATCH 004/149] changes --- group_vars/inventory | 2 +- group_vars/secrets.yml | 7 +++ roles/satellite-auth/tests/inventory | 2 + roles/satellite-auth/tests/test.yml | 5 +++ roles/satellite-clients/README.md | 38 +++++++++++++++++ roles/satellite-clients/handlers/main.yml | 2 + roles/satellite-clients/meta/main.yml | 52 +++++++++++++++++++++++ roles/satellite-clients/tasks/main.yml | 2 + roles/satellite-clients/tests/inventory | 2 + roles/satellite-clients/tests/test.yml | 5 +++ satellite_re_subscribe.yml | 9 ++-- 11 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 roles/satellite-auth/tests/inventory create mode 100644 roles/satellite-auth/tests/test.yml create mode 100644 roles/satellite-clients/README.md create mode 100644 roles/satellite-clients/handlers/main.yml create mode 100644 roles/satellite-clients/meta/main.yml create mode 100644 roles/satellite-clients/tasks/main.yml create mode 100644 roles/satellite-clients/tests/inventory create mode 100644 roles/satellite-clients/tests/test.yml diff --git a/group_vars/inventory b/group_vars/inventory index 27dc551..a476c95 100644 --- a/group_vars/inventory +++ b/group_vars/inventory @@ -11,7 +11,7 @@ student1-sat.twsfd.example.opentlc.com # satellite.example.com [satellite6-server-prod] -student1-sat.twsfd.example.opentlc.com ansible_connection=ssh ansible_ssh_user=student ansible_ssh_pass=lvynx8un +student1.twsfd.example.opentlc.com [6RedHatEnterpriseServer:vars] activationkey='server,6epel' diff --git a/group_vars/secrets.yml b/group_vars/secrets.yml index fead58c..84b9a6f 100644 --- a/group_vars/secrets.yml +++ b/group_vars/secrets.yml @@ -9,5 +9,12 @@ rhn_pass: "lvynx8un" rhn_pool_id: "SOME-LONG-RED-HAT-POOL-ID" sat_admin_password: "lvynx8un" +ansible_connection: ssh +ansible_user: student +ansible_ssh_pass: lvynx8un + +org: Default_Organization +activationkey: RHEL7_Prod + # This is only needed if using a custom SSL certificate #openssl_passphrase: "PASSWORD-TO-USE-FOR-OPENSSL-ENCRYPTION-OF-PRIVATE-KEY" \ No newline at end of file diff --git a/roles/satellite-auth/tests/inventory b/roles/satellite-auth/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/roles/satellite-auth/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/roles/satellite-auth/tests/test.yml b/roles/satellite-auth/tests/test.yml new file mode 100644 index 0000000..c32bcae --- /dev/null +++ b/roles/satellite-auth/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - satellite-auth diff --git a/roles/satellite-clients/README.md b/roles/satellite-clients/README.md new file mode 100644 index 0000000..225dd44 --- /dev/null +++ b/roles/satellite-clients/README.md @@ -0,0 +1,38 @@ +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 +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/roles/satellite-clients/handlers/main.yml b/roles/satellite-clients/handlers/main.yml new file mode 100644 index 0000000..cf1b904 --- /dev/null +++ b/roles/satellite-clients/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for satellite-clients diff --git a/roles/satellite-clients/meta/main.yml b/roles/satellite-clients/meta/main.yml new file mode 100644 index 0000000..c572acc --- /dev/null +++ b/roles/satellite-clients/meta/main.yml @@ -0,0 +1,52 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Choose a valid license ID from https://spdx.org - some suggested licenses: + # - BSD-3-Clause (default) + # - MIT + # - GPL-2.0-or-later + # - GPL-3.0-only + # - Apache-2.0 + # - CC-BY-4.0 + license: license (GPL-2.0-or-later, MIT, etc) + + min_ansible_version: 2.1 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] + # List your role dependencies here, one per line. Be sure to remove the '[]' above, + # if you add dependencies to this list. diff --git a/roles/satellite-clients/tasks/main.yml b/roles/satellite-clients/tasks/main.yml new file mode 100644 index 0000000..0cab542 --- /dev/null +++ b/roles/satellite-clients/tasks/main.yml @@ -0,0 +1,2 @@ +--- +# tasks file for satellite-clients diff --git a/roles/satellite-clients/tests/inventory b/roles/satellite-clients/tests/inventory new file mode 100644 index 0000000..878877b --- /dev/null +++ b/roles/satellite-clients/tests/inventory @@ -0,0 +1,2 @@ +localhost + diff --git a/roles/satellite-clients/tests/test.yml b/roles/satellite-clients/tests/test.yml new file mode 100644 index 0000000..0190e3a --- /dev/null +++ b/roles/satellite-clients/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - satellite-clients diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 8c0a172..b8c14e0 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -11,10 +11,13 @@ tasks: # create dynamic groups to define variables - group_by: - key: "{{ ansible_distribution_major_version }}" + key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + - debug: + msg: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - name: Unregister host - subscription-manager: + redhat_subscription: state: absent ignore_errors: True @@ -30,7 +33,7 @@ shell: "/usr/bin/yum localinstall -e 0 -y http://{{ groups['satellite'][0] }}/pub/katello-ca-consumer-latest.noarch.rpm" - name: Subscribe to Satellite - shell: "/usr/bin/subscription-manager register --org {{ org_id }} --activationkey={{ activationkey }}" + shell: "/usr/bin/subscription-manager register --org={{ org }} --activationkey={{ activationkey }}" register: subscription_result ignore_errors: True From 9647b37acae0e9455899cae3fedc30ff62967e1b Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Tue, 2 May 2023 12:08:23 -0400 Subject: [PATCH 005/149] changes --- satellite_group_by.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 satellite_group_by.yml diff --git a/satellite_group_by.yml b/satellite_group_by.yml new file mode 100644 index 0000000..58afbbf --- /dev/null +++ b/satellite_group_by.yml @@ -0,0 +1,19 @@ +--- +# ansible-satellite | Satellite 6.x Orchestration + +- hosts: satellite6-server-prod + become: yes + vars_files: + - group_vars/satellite.yml + - group_vars/secrets.yml + gather_facts: yes + + tasks: + # create dynamic groups to define variables + - group_by: + key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + - debug: + msg: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + \ No newline at end of file From 653f8f5a6af33bfa575a0e893ec73e8eee71f3be Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Tue, 2 May 2023 15:19:46 -0400 Subject: [PATCH 006/149] changes --- group_vars/inventory | 26 +---- group_vars/secrets.yml | 2 +- playbook.tar | Bin 286720 -> 0 bytes .../tasks/client_configure_pupet.yml | 39 +++++++ .../tasks/client_delete_pupet_cets.yml | 14 +++ .../tasks/client_subscribe_by_act_key.yml | 15 +++ .../tasks/client_unsubscribe.yml | 16 +++ .../tasks/get_activation_keys.yml | 14 +++ .../tasks/get_nodes_for_key.yml | 13 +++ satellite_re_subscribe.yml | 99 ++++-------------- 10 files changed, 138 insertions(+), 100 deletions(-) delete mode 100644 playbook.tar create mode 100644 roles/satellite-clients/tasks/client_configure_pupet.yml create mode 100644 roles/satellite-clients/tasks/client_delete_pupet_cets.yml create mode 100644 roles/satellite-clients/tasks/client_subscribe_by_act_key.yml create mode 100644 roles/satellite-clients/tasks/client_unsubscribe.yml create mode 100644 roles/satellite-content/tasks/get_activation_keys.yml create mode 100644 roles/satellite-content/tasks/get_nodes_for_key.yml diff --git a/group_vars/inventory b/group_vars/inventory index a476c95..c522254 100644 --- a/group_vars/inventory +++ b/group_vars/inventory @@ -13,26 +13,8 @@ student1-sat.twsfd.example.opentlc.com [satellite6-server-prod] student1.twsfd.example.opentlc.com -[6RedHatEnterpriseServer:vars] -activationkey='server,6epel' +[RedHat-8.6] +activationkey=RHEL7_Prod -[6RedHatEnterpriseWorkstation:vars] -activationkey='workstation,6epel' - -[7RedHatEnterpriseServer:vars] -activationkey='server,7epel' - -[7RedHatEnterpriseWorkstation:vars] -activationkey='workstation,7epel' - -[8RedHatEnterpriseServer:vars] -activationkey='server,8epel' - -[8RedHatEnterpriseWorkstation:vars] -activationkey='workstation,8epel' - -[9RedHatEnterpriseServer:vars] -activationkey='server,9epel' - -[9RedHatEnterpriseWorkstation:vars] -activationkey='workstation,9epel' \ No newline at end of file +[RedHat-7:vars] +activationkey='' diff --git a/group_vars/secrets.yml b/group_vars/secrets.yml index 84b9a6f..490e759 100644 --- a/group_vars/secrets.yml +++ b/group_vars/secrets.yml @@ -14,7 +14,7 @@ ansible_user: student ansible_ssh_pass: lvynx8un org: Default_Organization -activationkey: RHEL7_Prod + # This is only needed if using a custom SSL certificate #openssl_passphrase: "PASSWORD-TO-USE-FOR-OPENSSL-ENCRYPTION-OF-PRIVATE-KEY" \ No newline at end of file diff --git a/playbook.tar b/playbook.tar deleted file mode 100644 index 14364d54ae67b71587cf368ccf5591c139e23626..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286720 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 S1U3-ZKwtxb4FrC35cq#q=?d`x diff --git a/roles/satellite-clients/tasks/client_configure_pupet.yml b/roles/satellite-clients/tasks/client_configure_pupet.yml new file mode 100644 index 0000000..a324db6 --- /dev/null +++ b/roles/satellite-clients/tasks/client_configure_pupet.yml @@ -0,0 +1,39 @@ +--- +# tasks file for satellite-clients + +- name: Update puppet conf ca + lineinfile: dest=/etc/puppet/puppet.conf + regexp="^\s*ca_server\s*=" + line="ca_server = {{ groups['puppet_ca'][0] }}" + tags: puppet + +- name: Update puppet conf server + lineinfile: dest=/etc/puppet/puppet.conf + regexp="^\s*server\s*=" + line="server = {{ groups['puppet_master'][0] }}" + tags: puppet + +- name: Update puppet environment + lineinfile: dest=/etc/puppet/puppet.conf + regexp="^\s*environment\s*=" + line="environment = {{ puppet_env }}" + tags: puppet + +- name: Kill existing puppet agent runs + command: /usr/bin/killall puppet + tags: puppet + ignore_errors: True + +- name: Run puppet to cache certs + shell: /usr/bin/puppet agent -t + ignore_errors: True + tags: puppet + +- name: sign puppet certificate + shell: /usr/bin/puppet cert sign {{ ansible_fqdn }} + delegate_to: "{{ groups['puppet_ca'][0] }}" + tags: puppet + +- name: Run puppet again with valid cert + shell: /usr/bin/puppet agent -t + ignore_errors: True diff --git a/roles/satellite-clients/tasks/client_delete_pupet_cets.yml b/roles/satellite-clients/tasks/client_delete_pupet_cets.yml new file mode 100644 index 0000000..49b8185 --- /dev/null +++ b/roles/satellite-clients/tasks/client_delete_pupet_cets.yml @@ -0,0 +1,14 @@ +--- +# tasks file for satellite-clients + +- name: Remove puppet certs + file: path=/var/lib/puppet/ssl + state=absent + tags: puppet + +# Clean the old cert just in case +- name: clean old cert on puppet ca + shell: /usr/bin/puppet cert clean {{ ansible_fqdn }}hromerot + delegate_to: "{{ groups['puppet_ca'][0] }}" + ignore_errors: True + tags: puppet \ No newline at end of file diff --git a/roles/satellite-clients/tasks/client_subscribe_by_act_key.yml b/roles/satellite-clients/tasks/client_subscribe_by_act_key.yml new file mode 100644 index 0000000..0eec5ff --- /dev/null +++ b/roles/satellite-clients/tasks/client_subscribe_by_act_key.yml @@ -0,0 +1,15 @@ +--- +# tasks file for satellite-clients + +- name: Install new satellite certs + shell: "/usr/bin/yum localinstall -e 0 -y http://{{ groups['satellite'][0] }}/pub/katello-ca-consumer-latest.noarch.rpm" + +- name: Subscribe to Satellite + shell: "/usr/bin/subscription-manager register --org={{ org }} --activationkey={{ activationkey }}" + register: subscription_result +# ignore_errors: True + +# sometimes nodes fail to unregister +#- name: Force subscribe +# shell: "/usr/bin/subscription-manager register --force --org {{ org_id }} --activationkey={{ activationkey }}" +# when: "'Use --force' in subscription_result.stdout" \ No newline at end of file diff --git a/roles/satellite-clients/tasks/client_unsubscribe.yml b/roles/satellite-clients/tasks/client_unsubscribe.yml new file mode 100644 index 0000000..9458be2 --- /dev/null +++ b/roles/satellite-clients/tasks/client_unsubscribe.yml @@ -0,0 +1,16 @@ +--- +# tasks file for satellite-clients + +- name: Unregister host + redhat_subscription: + state: absent + ignore_errors: True + +- name: Clean old subscription-manager data + shell: + cmd: subscription-manager clean + +- name: Remove old satellite certs + yum: + name: "katello-ca-consumer-{{ satellite }}" + state: absent \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml new file mode 100644 index 0000000..a264525 --- /dev/null +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -0,0 +1,14 @@ +--- +# Create activation keys + + # Get all activation Keys +- name: Install new satellite certs + shell: + cmd: 'hammer activation-key list --organization {{ initial_org }}' + register: hosts_keys + +- set_fact: + activation_keys_list: activation_keys.stdout + + + \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml new file mode 100644 index 0000000..a359e1a --- /dev/null +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -0,0 +1,13 @@ +--- +# Create activation keys + + # Get all activation Keys +- name: Install new satellite certs + shell: + cmd: hammer host list --search activation_key={{ activationkey }} + register: host_for_key + +- set_fact: + ahost_for_key_list: host_for_key.stdout + + \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index b8c14e0..30ef343 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -1,5 +1,14 @@ --- # ansible-satellite | Satellite 6.x Orchestration +#- hosts: satellite +# vars_files: +# - group_vars/satellite.yml +# - group_vars/secrets.yml +# gather_facts: yes + +# tasks: +# - name: ":::: Get list of all activation keys ::::" +# import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml - hosts: satellite6-server-prod become: yes @@ -13,80 +22,16 @@ - group_by: key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - - debug: - msg: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - - - name: Unregister host - redhat_subscription: - state: absent - ignore_errors: True - - - name: Clean old subscription-manager data - shell: /usr/bin/subscription-manager clean - - - name: Remove old satellite certs - yum: - name: "katello-ca-consumer-{{ groups['old_satellite'][0] }}" - state: absent - - - name: Install new satellite certs - shell: "/usr/bin/yum localinstall -e 0 -y http://{{ groups['satellite'][0] }}/pub/katello-ca-consumer-latest.noarch.rpm" - - - name: Subscribe to Satellite - shell: "/usr/bin/subscription-manager register --org={{ org }} --activationkey={{ activationkey }}" - register: subscription_result - ignore_errors: True - - # sometimes nodes fail to unregister - - name: Force subscribe - shell: "/usr/bin/subscription-manager register --force --org {{ org_id }} --activationkey={{ activationkey }}" - when: "'Use --force' in subscription_result.stdout" - - # - name: Remove puppet certs - # file: path=/var/lib/puppet/ssl - # state=absent - # tags: puppet - - # Clean the old cert just in case - # - name: clean old cert on puppet ca - # shell: /usr/bin/puppet cert clean {{ ansible_fqdn }}hromerot - # delegate_to: "{{ groups['puppet_ca'][0] }}" - # ignore_errors: True - # tags: puppet - - # - name: Update puppet conf ca - # lineinfile: dest=/etc/puppet/puppet.conf - # regexp="^\s*ca_server\s*=" - # line="ca_server = {{ groups['puppet_ca'][0] }}" - # tags: puppet - - # - name: Update puppet conf server - # lineinfile: dest=/etc/puppet/puppet.conf - # regexp="^\s*server\s*=" - # line="server = {{ groups['puppet_master'][0] }}" - # tags: puppet - - # - name: Update puppet environment - # lineinfile: dest=/etc/puppet/puppet.conf - # regexp="^\s*environment\s*=" - # line="environment = {{ puppet_env }}" - # tags: puppet - - # - name: Kill existing puppet agent runs - # command: /usr/bin/killall puppet - # tags: puppet - # ignore_errors: True - - # - name: Run puppet to cache certs - # shell: /usr/bin/puppet agent -t - # ignore_errors: True - # tags: puppet - - # - name: sign puppet certificate - # shell: /usr/bin/puppet cert sign {{ ansible_fqdn }} - # delegate_to: "{{ groups['puppet_ca'][0] }}" - # tags: puppet - - # - name: Run puppet again with valid cert - # shell: /usr/bin/puppet agent -t - # ignore_errors: True + - set_fact: + ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + - name: ":::: Unregister host ::::" + import_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + vars: + satellite: "{{ groups['old_satellite'][0] }}" + + - name: ":::: Register host ::::" + import_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + vars: + satellite: "{{ groups['satellite'][0] }}" + activationkey: "{{ groups[ak] }}" From f8a56714bee29347ec97bfbbbad5984ba7d18fb3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Tue, 2 May 2023 16:14:26 -0400 Subject: [PATCH 007/149] for get keys and servers --- satellite_re_subscribe.yml | 41 ++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 30ef343..335552b 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -1,15 +1,5 @@ --- # ansible-satellite | Satellite 6.x Orchestration -#- hosts: satellite -# vars_files: -# - group_vars/satellite.yml -# - group_vars/secrets.yml -# gather_facts: yes - -# tasks: -# - name: ":::: Get list of all activation keys ::::" -# import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml - - hosts: satellite6-server-prod become: yes vars_files: @@ -25,6 +15,37 @@ - set_fact: ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" +- hosts: satellite + vars_files: + - group_vars/satellite.yml + - group_vars/secrets.yml + gather_facts: yes + + tasks: + - name: ":::: Get list of all activation keys ::::" + import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml + + - name: ":::: Get Host and Key subscriptions ::::" + import_tasks: + - ./roles/satellite-content/tasks/get_activation_keys.yml + - ./roles/satellite-content/tasks/get_nodes_for_key.yml + vars: + activationkey: "{{ groups[ak] }}" + + - name: "Show lists of activation keys and nodes" + msg: + - "Activation keys list: {{ activation_keys_list }}" + - "Nodes list: {{ahost_for_key_list }}" + +- hosts: satellite6-server-prod + become: yes + vars_files: + - group_vars/satellite.yml + - group_vars/secrets.yml + gather_facts: yes + + tasks: + - name: ":::: Unregister host ::::" import_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml vars: From 8b1671a284882fb5ab045a913cc42528bf5f1c22 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Tue, 2 May 2023 17:31:33 -0400 Subject: [PATCH 008/149] example --- roles/satellite-content/tasks/get_activation_keys.yml | 2 +- roles/satellite-content/tasks/get_nodes_for_key.yml | 2 +- rsync.yml | 2 +- satellite_re_subscribe.yml | 11 +++++------ 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index a264525..c8a3faa 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -5,7 +5,7 @@ - name: Install new satellite certs shell: cmd: 'hammer activation-key list --organization {{ initial_org }}' - register: hosts_keys + register: activation_keys_list - set_fact: activation_keys_list: activation_keys.stdout diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index a359e1a..c52b655 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -8,6 +8,6 @@ register: host_for_key - set_fact: - ahost_for_key_list: host_for_key.stdout + host_for_key_list: host_for_key.stdout \ No newline at end of file diff --git a/rsync.yml b/rsync.yml index db2df87..33f7456 100644 --- a/rsync.yml +++ b/rsync.yml @@ -7,7 +7,7 @@ gather_facts: yes tasks: - - set_facts: + - set_fact: path: user: remote_server: diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 335552b..7782291 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -26,16 +26,15 @@ import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml - name: ":::: Get Host and Key subscriptions ::::" - import_tasks: - - ./roles/satellite-content/tasks/get_activation_keys.yml - - ./roles/satellite-content/tasks/get_nodes_for_key.yml + import_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml vars: activationkey: "{{ groups[ak] }}" - name: "Show lists of activation keys and nodes" - msg: - - "Activation keys list: {{ activation_keys_list }}" - - "Nodes list: {{ahost_for_key_list }}" + ansible.builtin.debug: + msg: + - "Activation keys list: {{ activation_keys_list }}" + - "Nodes list: {{ahost_for_key_list }}" - hosts: satellite6-server-prod become: yes From 73ee6d145c7f21c3140ae006cad344f9c40a3b10 Mon Sep 17 00:00:00 2001 From: mahernan Date: Tue, 2 May 2023 23:14:09 -0500 Subject: [PATCH 009/149] inventory and vars --- group_vars/inventory | 7 ++++--- group_vars/satellite.yml | 12 ++++++------ group_vars/secrets.yml | 15 ++++++--------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/group_vars/inventory b/group_vars/inventory index c522254..412708e 100644 --- a/group_vars/inventory +++ b/group_vars/inventory @@ -1,8 +1,8 @@ [satellite] -student1-sat.twsfd.example.opentlc.com +rhs.lnx.demo.rd [old_satellite] -student1-sat.twsfd.example.opentlc.com +rhs.lnx.demo.rd # [puppet_master] # satellite.example.com @@ -11,10 +11,11 @@ student1-sat.twsfd.example.opentlc.com # satellite.example.com [satellite6-server-prod] +#3.144.121.168 student1.twsfd.example.opentlc.com [RedHat-8.6] activationkey=RHEL7_Prod -[RedHat-7:vars] +[RedHat-7] activationkey='' diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index 5faf140..fba8035 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -1,18 +1,18 @@ --- # ansible-satellite group vars -initial_org: "Default Organization" -initial_loc: "Default Location" +initial_org: "RD" +initial_loc: "MX" initial_user: "admin" -sat_admin_email: "some-admin-user@yourdomain.com" +sat_admin_email: "psehgaft@redhat.com" sat_admin_firstname: "Admin" -sat_admin_lastname: "User" +sat_admin_lastname: "RedHat" # Place the file with this name in the roles/satellite-setup/files folder sat_manifest: "manifest.zip" -sat_domain: "twsfd.example.opentlc.com/" -sat_hostname: "satellite" +sat_domain: "lnx.demo.rd" +sat_hostname: "rhs" satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" org_id: 1 diff --git a/group_vars/secrets.yml b/group_vars/secrets.yml index 490e759..c4b3eae 100644 --- a/group_vars/secrets.yml +++ b/group_vars/secrets.yml @@ -5,16 +5,13 @@ # ansible-vault encrypt secrets.yml rhn_user: "admin" -rhn_pass: "lvynx8un" -rhn_pool_id: "SOME-LONG-RED-HAT-POOL-ID" -sat_admin_password: "lvynx8un" +rhn_pass: "Iaz6USksOy" +rhn_pool_id: "" +sat_admin_password: "Iaz6USksOy" ansible_connection: ssh -ansible_user: student -ansible_ssh_pass: lvynx8un - -org: Default_Organization - +ansible_user: redhat +ansible_ssh_pass: redhat # This is only needed if using a custom SSL certificate -#openssl_passphrase: "PASSWORD-TO-USE-FOR-OPENSSL-ENCRYPTION-OF-PRIVATE-KEY" \ No newline at end of file +#openssl_passphrase: "PASSWORD-TO-USE-FOR-OPENSSL-ENCRYPTION-OF-PRIVATE-KEY" From cf92c7fe5bb68b9039b440d006af03a31c54057b Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 00:14:34 -0400 Subject: [PATCH 010/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index c8a3faa..a5a165a 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -2,7 +2,7 @@ # Create activation keys # Get all activation Keys -- name: Install new satellite certs +- name: Get list of all activation keys shell: cmd: 'hammer activation-key list --organization {{ initial_org }}' register: activation_keys_list From d08ab2016b4b59228856c5778a80315426c6ddb8 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 00:15:37 -0400 Subject: [PATCH 011/149] update --- satellite_re_subscribe.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 7782291..17a0eaa 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -16,6 +16,7 @@ ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - hosts: satellite + become: yes vars_files: - group_vars/satellite.yml - group_vars/secrets.yml From 82e488444ea9c59427334a32302946d7684aca24 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 00:39:03 -0400 Subject: [PATCH 012/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 5 ++++- roles/satellite-content/tasks/get_nodes_for_key.yml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index a5a165a..9d55e57 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -8,7 +8,10 @@ register: activation_keys_list - set_fact: - activation_keys_list: activation_keys.stdout + activation_keys_list: {{ activation_keys.stdout[2] | split('|') }}" + + + \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index c52b655..5195f3c 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -8,6 +8,6 @@ register: host_for_key - set_fact: - host_for_key_list: host_for_key.stdout + host_for_key_list: "{{ host_for_key.stdout }}" \ No newline at end of file From 958dd59eb85fc6c90458362d469ffefab70f3d79 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 00:40:18 -0400 Subject: [PATCH 013/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 9d55e57..e595049 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -8,7 +8,7 @@ register: activation_keys_list - set_fact: - activation_keys_list: {{ activation_keys.stdout[2] | split('|') }}" + activation_keys_list: "{{ activation_keys.stdout[2] | split('|') }}" From 88b0621eabcd8b2e455f3487905af6c840570440 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 00:45:07 -0400 Subject: [PATCH 014/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index e595049..00f15e2 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -8,7 +8,7 @@ register: activation_keys_list - set_fact: - activation_keys_list: "{{ activation_keys.stdout[2] | split('|') }}" + activation_keys_list: "{{ activation_keys.stdout[2].split('|') | lower }}" From d4964f1e8ec90c5568584b026ab7da5be2b6da83 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 00:46:46 -0400 Subject: [PATCH 015/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 00f15e2..1cd129b 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -5,7 +5,7 @@ - name: Get list of all activation keys shell: cmd: 'hammer activation-key list --organization {{ initial_org }}' - register: activation_keys_list + register: activation_keys - set_fact: activation_keys_list: "{{ activation_keys.stdout[2].split('|') | lower }}" From d54ebdfeba70d4ec936d8fd8136a92ed94a2c58c Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 09:37:27 -0400 Subject: [PATCH 016/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 1cd129b..c6367cd 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -7,6 +7,10 @@ cmd: 'hammer activation-key list --organization {{ initial_org }}' register: activation_keys +- debug: + msg: "{{ activation_keys.stdout.[item] }}" + with_items: "{{ activation_keys.stdout }}" + - set_fact: activation_keys_list: "{{ activation_keys.stdout[2].split('|') | lower }}" From bec0443c80323418855cee694aec27508e46b14d Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 09:47:26 -0400 Subject: [PATCH 017/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index c6367cd..9d5e42c 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -8,8 +8,7 @@ register: activation_keys - debug: - msg: "{{ activation_keys.stdout.[item] }}" - with_items: "{{ activation_keys.stdout }}" + msg: "{{ activation_keys.stdout.[3] }}" - set_fact: activation_keys_list: "{{ activation_keys.stdout[2].split('|') | lower }}" From 3fb7ce4fa16bcd708e737fba83383d7796901484 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 09:50:57 -0400 Subject: [PATCH 018/149] update --- .../tasks/get_activation_keys.yml | 4 ++- satellite_re_subscribe.yml | 27 +++++++------------ 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 9d5e42c..9e1f4fe 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -8,7 +8,9 @@ register: activation_keys - debug: - msg: "{{ activation_keys.stdout.[3] }}" + msg: + - "{{ activation_keys.stdout[3] }}" + - "{{ activation_keys.stdout[4] }}" - set_fact: activation_keys_list: "{{ activation_keys.stdout[2].split('|') | lower }}" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 17a0eaa..064b518 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -1,35 +1,21 @@ --- # ansible-satellite | Satellite 6.x Orchestration -- hosts: satellite6-server-prod - become: yes - vars_files: - - group_vars/satellite.yml - - group_vars/secrets.yml - gather_facts: yes - - tasks: - # create dynamic groups to define variables - - group_by: - key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - - - set_fact: - ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - - hosts: satellite become: yes vars_files: - group_vars/satellite.yml - group_vars/secrets.yml - gather_facts: yes + gather_facts: no tasks: + - name: ":::: Get list of all activation keys ::::" import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml - name: ":::: Get Host and Key subscriptions ::::" import_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml vars: - activationkey: "{{ groups[ak] }}" + activationkey: aap_ak # "{{ groups[ak] }}" - name: "Show lists of activation keys and nodes" ansible.builtin.debug: @@ -46,6 +32,13 @@ tasks: + # create dynamic groups to define variables + - group_by: + key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + - set_fact: + ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + - name: ":::: Unregister host ::::" import_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml vars: From 070db11e34b0ee25516ab9529c97c765f7feb361 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 10:06:41 -0400 Subject: [PATCH 019/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 9e1f4fe..49fadcb 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -4,16 +4,15 @@ # Get all activation Keys - name: Get list of all activation keys shell: - cmd: 'hammer activation-key list --organization {{ initial_org }}' + cmd: 'hammer activation-key list --organization {{ initial_org }} --fields name' register: activation_keys - debug: msg: - - "{{ activation_keys.stdout[3] }}" - - "{{ activation_keys.stdout[4] }}" + - "{{ activation_keys.stdout }}" -- set_fact: - activation_keys_list: "{{ activation_keys.stdout[2].split('|') | lower }}" +#- set_fact: +# activation_keys_list: "{{ activation_keys.stdout[2].split('|') | lower }}" From 73a37e9de0b7e65b9591817be4f3f42d305f4a49 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 10:18:07 -0400 Subject: [PATCH 020/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 4 ++-- roles/satellite-content/tasks/get_nodes_for_key.yml | 2 +- satellite_re_subscribe.yml | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 49fadcb..30d4c5a 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -11,8 +11,8 @@ msg: - "{{ activation_keys.stdout }}" -#- set_fact: -# activation_keys_list: "{{ activation_keys.stdout[2].split('|') | lower }}" +- set_fact: + activation_keys_list: "{{ activation_keys.stdout.split('|') | lower }}" diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index 5195f3c..6d4728e 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -4,7 +4,7 @@ # Get all activation Keys - name: Install new satellite certs shell: - cmd: hammer host list --search activation_key={{ activationkey }} + cmd: 'hammer host list --search activation_key={{ activationkey }} --fields name' register: host_for_key - set_fact: diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 064b518..9ed184f 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -20,8 +20,9 @@ - name: "Show lists of activation keys and nodes" ansible.builtin.debug: msg: - - "Activation keys list: {{ activation_keys_list }}" - - "Nodes list: {{ahost_for_key_list }}" + - "BLANK" + #- "Activation keys list: {{ activation_keys_list }}" + #- "Nodes list: {{ahost_for_key_list }}" - hosts: satellite6-server-prod become: yes From 9f6a7f4c9635140780eb2894b22a610800905090 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 10:24:48 -0400 Subject: [PATCH 021/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 30d4c5a..da2984f 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -7,12 +7,13 @@ cmd: 'hammer activation-key list --organization {{ initial_org }} --fields name' register: activation_keys +- set_fact: + activation_keys_list: "{{ activation_keys.stdout.split('\n') | lower }}" + - debug: msg: - "{{ activation_keys.stdout }}" - -- set_fact: - activation_keys_list: "{{ activation_keys.stdout.split('|') | lower }}" + - "{{ activation_keys_list }}" From c7a0c7d04c7b8ab3a0e1d7ec73b88342c3002250 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 11:04:48 -0400 Subject: [PATCH 022/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index da2984f..21f101a 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -10,6 +10,10 @@ - set_fact: activation_keys_list: "{{ activation_keys.stdout.split('\n') | lower }}" +- set_fact: + Number_of_keys: "{{ activation_keys_list|length }}" + activation_keys_list_clean: "{{ activation_keys_list|ansible.utils.remove_keys(matching_parameter= '(s|season)' }}" + - debug: msg: - "{{ activation_keys.stdout }}" From e41aed7183221e77d97246780d16593874878c88 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 11:14:53 -0400 Subject: [PATCH 023/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 21f101a..e7b5e6f 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -12,7 +12,11 @@ - set_fact: Number_of_keys: "{{ activation_keys_list|length }}" - activation_keys_list_clean: "{{ activation_keys_list|ansible.utils.remove_keys(matching_parameter= '(s|season)' }}" + activation_keys_list_clean: "{{ activation_keys_list|ansible.utils.remove_keys(regex_search('s|name')) }}" + +- set_fact: + Number_of_keys: "{{ activation_keys_list|length }}" + activation_keys_list: "{{ activation_keys_list_clean|ansible.utils.remove_keys(regex_search('s|name')) }}" - debug: msg: From 26cc6859eae763531152c21c9111aa6736613da7 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 11:27:50 -0400 Subject: [PATCH 024/149] update --- .../satellite-content/tasks/get_activation_keys.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index e7b5e6f..4f5849f 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -11,17 +11,20 @@ activation_keys_list: "{{ activation_keys.stdout.split('\n') | lower }}" - set_fact: + separators: "{{ activation_keys_list[0] }}" + title: "{{ activation_keys_list[1] }}" Number_of_keys: "{{ activation_keys_list|length }}" - activation_keys_list_clean: "{{ activation_keys_list|ansible.utils.remove_keys(regex_search('s|name')) }}" + activation_keys_list_remove_lines: "{{ activation_keys_list|reject('search', separators)|list }}" - set_fact: - Number_of_keys: "{{ activation_keys_list|length }}" - activation_keys_list: "{{ activation_keys_list_clean|ansible.utils.remove_keys(regex_search('s|name')) }}" + activation_keys_list_remove_title: "{{ activation_keys_list_remove_lines|reject('search', title)|list }}" + +- set_fact: + activation_keys_list: "{{ activation_keys_list_remove_title }}" - debug: msg: - - "{{ activation_keys.stdout }}" - - "{{ activation_keys_list }}" + - "{{ activation_keys_list}}" From 2f1d9efbf3139397bb3d0d2e728c0e9b004977a7 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 11:30:30 -0400 Subject: [PATCH 025/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 4f5849f..9b136c4 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -14,6 +14,8 @@ separators: "{{ activation_keys_list[0] }}" title: "{{ activation_keys_list[1] }}" Number_of_keys: "{{ activation_keys_list|length }}" + +- set_fact: activation_keys_list_remove_lines: "{{ activation_keys_list|reject('search', separators)|list }}" - set_fact: From c8fab73e2717863519f4e66cc1e0170b9d6c5919 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 11:58:21 -0400 Subject: [PATCH 026/149] update --- .../tasks/get_activation_keys.yml | 2 +- .../tasks/get_nodes_for_key.yml | 24 ++++++++++++++++++- satellite_re_subscribe.yml | 7 ++++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 9b136c4..ddd0719 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -13,7 +13,7 @@ - set_fact: separators: "{{ activation_keys_list[0] }}" title: "{{ activation_keys_list[1] }}" - Number_of_keys: "{{ activation_keys_list|length }}" + number_of_keys: "{{ activation_keys_list|length }}" - set_fact: activation_keys_list_remove_lines: "{{ activation_keys_list|reject('search', separators)|list }}" diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index 6d4728e..ce803ac 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -8,6 +8,28 @@ register: host_for_key - set_fact: - host_for_key_list: "{{ host_for_key.stdout }}" + host_for_key_list: "{{ host_for_key.stdout.split('\n') | lower }}" + +- set_fact: + separators: "{{ host_for_key_list[0] }}" + title: "{{ host_for_key_list[1] }}" + number_of_servers_keys: "{{ host_for_key_list|length }}" + +- set_fact: + host_for_key_list_lines: "{{ host_for_key_list|reject('search', separators)|list }}" + +- set_fact: + host_for_key_list_title: "{{ host_for_key_list_lines|reject('search', title)|list }}" + +- set_fact: + host_for_key_list: "{{ host_for_key_list_title }}" + +- debug: + msg: + - "{{ activation_keys_list}}" + +- name: create inventory file + template: src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini + delegate_to: localhost \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 9ed184f..3292b29 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -1,6 +1,6 @@ --- # ansible-satellite | Satellite 6.x Orchestration -- hosts: satellite +- hosts: localhost become: yes vars_files: - group_vars/satellite.yml @@ -11,11 +11,14 @@ - name: ":::: Get list of all activation keys ::::" import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml + delegate_to: satellite - name: ":::: Get Host and Key subscriptions ::::" import_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml + with_items: "{{ activation_keys_list }}" vars: - activationkey: aap_ak # "{{ groups[ak] }}" + activationkey: "{{ item }}" + delegate_to: satellite - name: "Show lists of activation keys and nodes" ansible.builtin.debug: From 20498842b703235963784edd38c013811039053a Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 11:58:57 -0400 Subject: [PATCH 027/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 3292b29..1e3d0be 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -14,7 +14,7 @@ delegate_to: satellite - name: ":::: Get Host and Key subscriptions ::::" - import_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml + include_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml with_items: "{{ activation_keys_list }}" vars: activationkey: "{{ item }}" From 90f422e13db36bc9d98802c94e98c105d929307f Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 12:24:16 -0400 Subject: [PATCH 028/149] update --- group_vars/satellite.yml | 2 ++ roles/satellite-clients/tasks/main.yml | 2 -- .../tasks/create_content_inventory.yml | 15 +++++++++++++++ .../tasks/create_content_inventory_file.yml | 5 +++++ .../tasks/get_nodes_for_key.yml | 13 ++++++------- satellite_re_subscribe.yml | 19 ++++++++----------- 6 files changed, 36 insertions(+), 20 deletions(-) delete mode 100644 roles/satellite-clients/tasks/main.yml create mode 100644 roles/satellite-content/tasks/create_content_inventory.yml create mode 100644 roles/satellite-content/tasks/create_content_inventory_file.yml diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index fba8035..a397480 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -16,6 +16,8 @@ sat_hostname: "rhs" satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" org_id: 1 +inventory_content: [] + #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" diff --git a/roles/satellite-clients/tasks/main.yml b/roles/satellite-clients/tasks/main.yml deleted file mode 100644 index 0cab542..0000000 --- a/roles/satellite-clients/tasks/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# tasks file for satellite-clients diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml new file mode 100644 index 0000000..825a284 --- /dev/null +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -0,0 +1,15 @@ +--- +# tasks file for satellite-clients +- debug: + msg: + - "host: {{ host }}" + - "ak: {{ activation_key }}" + +- set_facts: + node: + host: "{{ host }}" + activation_key: "{{ activation_key }}" + repos: [] + +- set_facts: + inventory_content: "{{ inventory_content + node }}" diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml new file mode 100644 index 0000000..1a97abf --- /dev/null +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -0,0 +1,5 @@ +--- +# tasks file for satellite-clients +- name: create inventory file + copy: content="{{ inventory_content }}" dest=/group_vars/inventory_content.yml + delegate_to: localhost \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index ce803ac..ae4768c 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -24,12 +24,11 @@ - set_fact: host_for_key_list: "{{ host_for_key_list_title }}" -- debug: - msg: - - "{{ activation_keys_list}}" - -- name: create inventory file - template: src=~/workspace/ansible_templates/somefile_template.j2 dest=/etc/somefile/apps-available/someproject.ini - delegate_to: localhost +- name: Create report + include_task: create_content_inventory + with_items: "{{ host_for_key_list }}" + vars: + host: "{{ item }}" + activation_key: "{{ activationkey }}" \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 1e3d0be..cb7c4f4 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -1,6 +1,6 @@ --- # ansible-satellite | Satellite 6.x Orchestration -- hosts: localhost +- hosts: satellite become: yes vars_files: - group_vars/satellite.yml @@ -11,21 +11,18 @@ - name: ":::: Get list of all activation keys ::::" import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml - delegate_to: satellite - name: ":::: Get Host and Key subscriptions ::::" - include_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml + import_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml with_items: "{{ activation_keys_list }}" vars: activationkey: "{{ item }}" - delegate_to: satellite - - - name: "Show lists of activation keys and nodes" - ansible.builtin.debug: - msg: - - "BLANK" - #- "Activation keys list: {{ activation_keys_list }}" - #- "Nodes list: {{ahost_for_key_list }}" + + - name: ":::: Create content inventory ::::" + import_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml + + - name: ":::: Create content inventory file ::::" + import_tasks: ./roles/satellite-content/tasks/create_content_inventory_file.yml - hosts: satellite6-server-prod become: yes From 1bb446d58e580f5c91993e6c9d2aa3d17b3b11ee Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 12:25:51 -0400 Subject: [PATCH 029/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index cb7c4f4..23a79b0 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -13,7 +13,7 @@ import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml - name: ":::: Get Host and Key subscriptions ::::" - import_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml + include_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml with_items: "{{ activation_keys_list }}" vars: activationkey: "{{ item }}" From f30dd3d46cf219d63c85caefc6b1f437aef7a0f9 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 12:26:48 -0400 Subject: [PATCH 030/149] update --- roles/satellite-content/tasks/create_content_inventory.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index 825a284..ca27876 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -5,11 +5,11 @@ - "host: {{ host }}" - "ak: {{ activation_key }}" -- set_facts: +- set_fact: node: host: "{{ host }}" activation_key: "{{ activation_key }}" repos: [] -- set_facts: +- set_fact: inventory_content: "{{ inventory_content + node }}" From 6a990ae20a8707de303e9ed2e0ba1191e5175a45 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 12:57:58 -0400 Subject: [PATCH 031/149] update --- .../{get_nodes_for_key.yml => get_node_for_key.yml} | 0 roles/satellite-content/tasks/get_nodes_for_keys.yml | 11 +++++++++++ satellite_re_subscribe.yml | 5 +---- 3 files changed, 12 insertions(+), 4 deletions(-) rename roles/satellite-content/tasks/{get_nodes_for_key.yml => get_node_for_key.yml} (100%) create mode 100644 roles/satellite-content/tasks/get_nodes_for_keys.yml diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_node_for_key.yml similarity index 100% rename from roles/satellite-content/tasks/get_nodes_for_key.yml rename to roles/satellite-content/tasks/get_node_for_key.yml diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml new file mode 100644 index 0000000..01869bb --- /dev/null +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -0,0 +1,11 @@ +--- +# Create activation keys + + # Get all activation Keys +- name: ":::: Get Host and Key subscriptions ::::" + include_tasks: get_node_for_key + with_items: "{{ activation_keys_list }}" + vars: + activationkey: "{{ item }}" + + \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 23a79b0..f9825bf 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -13,10 +13,7 @@ import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml - name: ":::: Get Host and Key subscriptions ::::" - include_tasks: ./roles/satellite-content/tasks/get_nodes_for_key.yml - with_items: "{{ activation_keys_list }}" - vars: - activationkey: "{{ item }}" + import_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml - name: ":::: Create content inventory ::::" import_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml From c1198ef911451f7dd616a7a6095c7fd733045966 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:00:54 -0400 Subject: [PATCH 032/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 01869bb..7df68e5 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -3,7 +3,7 @@ # Get all activation Keys - name: ":::: Get Host and Key subscriptions ::::" - include_tasks: get_node_for_key + include_tasks: ./get_node_for_key.yml with_items: "{{ activation_keys_list }}" vars: activationkey: "{{ item }}" From e9626f67c1781e4599c8de5ccc72c160ba5c3a2a Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:08:06 -0400 Subject: [PATCH 033/149] update --- roles/satellite-content/tasks/get_node_for_key.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_node_for_key.yml b/roles/satellite-content/tasks/get_node_for_key.yml index ae4768c..fd832ea 100644 --- a/roles/satellite-content/tasks/get_node_for_key.yml +++ b/roles/satellite-content/tasks/get_node_for_key.yml @@ -25,7 +25,7 @@ host_for_key_list: "{{ host_for_key_list_title }}" - name: Create report - include_task: create_content_inventory + include_task: ./create_content_inventory.yml with_items: "{{ host_for_key_list }}" vars: host: "{{ item }}" From f5a4a24bfe9afc9caa8d2b5f1f771bb7628c46a9 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:17:50 -0400 Subject: [PATCH 034/149] update --- group_vars/inventory | 11 ---- .../tasks/get_activation_keys.yml | 2 +- .../tasks/get_node_for_key.yml | 2 +- .../tasks/get_nodes_for_keys.yml | 2 +- roles/satellite-content/tasks/get_orgs.yml | 35 ++++++++++++ roles/satellite-manage-nodes/.travis.yml | 29 ---------- roles/satellite-manage-nodes/README.md | 38 ------------- .../satellite-manage-nodes/defaults/main.yml | 2 - .../satellite-manage-nodes/handlers/main.yml | 2 - roles/satellite-manage-nodes/meta/main.yml | 53 ------------------- .../tasks/get_activation_key.yml | 19 ------- .../tasks/get_repo_list.yml | 17 ------ roles/satellite-manage-nodes/tasks/main.yml | 2 - .../tasks/subscribe_client.yml | 17 ------ roles/satellite-manage-nodes/tests/inventory | 2 - roles/satellite-manage-nodes/tests/test.yml | 5 -- roles/satellite-manage-nodes/vars/main.yml | 2 - satellite_re_subscribe.yml | 9 +++- 18 files changed, 45 insertions(+), 204 deletions(-) create mode 100644 roles/satellite-content/tasks/get_orgs.yml delete mode 100644 roles/satellite-manage-nodes/.travis.yml delete mode 100644 roles/satellite-manage-nodes/README.md delete mode 100644 roles/satellite-manage-nodes/defaults/main.yml delete mode 100644 roles/satellite-manage-nodes/handlers/main.yml delete mode 100644 roles/satellite-manage-nodes/meta/main.yml delete mode 100644 roles/satellite-manage-nodes/tasks/get_activation_key.yml delete mode 100644 roles/satellite-manage-nodes/tasks/get_repo_list.yml delete mode 100644 roles/satellite-manage-nodes/tasks/main.yml delete mode 100644 roles/satellite-manage-nodes/tasks/subscribe_client.yml delete mode 100644 roles/satellite-manage-nodes/tests/inventory delete mode 100644 roles/satellite-manage-nodes/tests/test.yml delete mode 100644 roles/satellite-manage-nodes/vars/main.yml diff --git a/group_vars/inventory b/group_vars/inventory index 412708e..5230d45 100644 --- a/group_vars/inventory +++ b/group_vars/inventory @@ -4,18 +4,7 @@ rhs.lnx.demo.rd [old_satellite] rhs.lnx.demo.rd -# [puppet_master] -# satellite.example.com - -# [puppet_ca] -# satellite.example.com - [satellite6-server-prod] #3.144.121.168 student1.twsfd.example.opentlc.com -[RedHat-8.6] -activationkey=RHEL7_Prod - -[RedHat-7] -activationkey='' diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index ddd0719..2416671 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -26,7 +26,7 @@ - debug: msg: - - "{{ activation_keys_list}}" + - "{{ activation_keys_list }}" diff --git a/roles/satellite-content/tasks/get_node_for_key.yml b/roles/satellite-content/tasks/get_node_for_key.yml index fd832ea..7d01251 100644 --- a/roles/satellite-content/tasks/get_node_for_key.yml +++ b/roles/satellite-content/tasks/get_node_for_key.yml @@ -27,7 +27,7 @@ - name: Create report include_task: ./create_content_inventory.yml with_items: "{{ host_for_key_list }}" - vars: + include_vars: host: "{{ item }}" activation_key: "{{ activationkey }}" diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 7df68e5..5a64e3f 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -5,7 +5,7 @@ - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./get_node_for_key.yml with_items: "{{ activation_keys_list }}" - vars: + include_vars: activationkey: "{{ item }}" \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_orgs.yml b/roles/satellite-content/tasks/get_orgs.yml new file mode 100644 index 0000000..c397ab4 --- /dev/null +++ b/roles/satellite-content/tasks/get_orgs.yml @@ -0,0 +1,35 @@ +--- +# Create activation keys + + # Get all activation Keys +- name: Get list of all activation keys + shell: + cmd: 'hammer org list --fields name' + register: organizations + +- set_fact: + organizations_list: "{{ organizations.stdout.split('\n') | lower }}" + +- set_fact: + separators: "{{ organizations_list[0] }}" + title: "{{ organizations_list[1] }}" + number_of_keys: "{{ organizations_list|length }}" + +- set_fact: + organizations_list_remove_lines: "{{ organizations_list|reject('search', separators)|list }}" + +- set_fact: + organizations_list_remove_title: "{{ organizations_list_remove_lines|reject('search', title)|list }}" + +- set_fact: + organizations_list: "{{ organizations_list_remove_title }}" + +- debug: + msg: + - "{{ organizations_list }}" + + + + + + \ No newline at end of file diff --git a/roles/satellite-manage-nodes/.travis.yml b/roles/satellite-manage-nodes/.travis.yml deleted file mode 100644 index 36bbf62..0000000 --- a/roles/satellite-manage-nodes/.travis.yml +++ /dev/null @@ -1,29 +0,0 @@ ---- -language: python -python: "2.7" - -# Use the new container infrastructure -sudo: false - -# Install ansible -addons: - apt: - packages: - - python-pip - -install: - # Install ansible - - pip install ansible - - # Check ansible version - - ansible --version - - # Create ansible.cfg with correct roles_path - - printf '[defaults]\nroles_path=../' >ansible.cfg - -script: - # Basic role syntax check - - ansible-playbook tests/test.yml -i tests/inventory --syntax-check - -notifications: - webhooks: https://galaxy.ansible.com/api/v1/notifications/ \ No newline at end of file diff --git a/roles/satellite-manage-nodes/README.md b/roles/satellite-manage-nodes/README.md deleted file mode 100644 index 225dd44..0000000 --- a/roles/satellite-manage-nodes/README.md +++ /dev/null @@ -1,38 +0,0 @@ -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 -------- - -BSD - -Author Information ------------------- - -An optional section for the role authors to include contact information, or a website (HTML is not allowed). diff --git a/roles/satellite-manage-nodes/defaults/main.yml b/roles/satellite-manage-nodes/defaults/main.yml deleted file mode 100644 index 78942b8..0000000 --- a/roles/satellite-manage-nodes/defaults/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# defaults file for satellite-manage-nodes \ No newline at end of file diff --git a/roles/satellite-manage-nodes/handlers/main.yml b/roles/satellite-manage-nodes/handlers/main.yml deleted file mode 100644 index e8b5929..0000000 --- a/roles/satellite-manage-nodes/handlers/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# handlers file for satellite-manage-nodes \ No newline at end of file diff --git a/roles/satellite-manage-nodes/meta/main.yml b/roles/satellite-manage-nodes/meta/main.yml deleted file mode 100644 index 227ad9c..0000000 --- a/roles/satellite-manage-nodes/meta/main.yml +++ /dev/null @@ -1,53 +0,0 @@ -galaxy_info: - author: your name - description: your role description - company: your company (optional) - - # If the issue tracker for your role is not on github, uncomment the - # next line and provide a value - # issue_tracker_url: http://example.com/issue/tracker - - # Choose a valid license ID from https://spdx.org - some suggested licenses: - # - BSD-3-Clause (default) - # - MIT - # - GPL-2.0-or-later - # - GPL-3.0-only - # - Apache-2.0 - # - CC-BY-4.0 - license: license (GPL-2.0-or-later, MIT, etc) - - min_ansible_version: 2.9 - - # If this a Container Enabled role, provide the minimum Ansible Container version. - # min_ansible_container_version: - - # - # Provide a list of supported platforms, and for each platform a list of versions. - # If you don't wish to enumerate all versions for a particular platform, use 'all'. - # To view available platforms and versions (or releases), visit: - # https://galaxy.ansible.com/api/v1/platforms/ - # - # platforms: - # - name: Fedora - # versions: - # - all - # - 25 - # - name: SomePlatform - # versions: - # - all - # - 1.0 - # - 7 - # - 99.99 - - galaxy_tags: [] - # List tags for your role here, one per line. A tag is a keyword that describes - # and categorizes the role. Users find roles by searching for tags. Be sure to - # remove the '[]' above, if you add tags to this list. - # - # NOTE: A tag is limited to a single word comprised of alphanumeric characters. - # Maximum 20 tags per role. - -dependencies: [] - # List your role dependencies here, one per line. Be sure to remove the '[]' above, - # if you add dependencies to this list. - \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tasks/get_activation_key.yml b/roles/satellite-manage-nodes/tasks/get_activation_key.yml deleted file mode 100644 index 7dc932e..0000000 --- a/roles/satellite-manage-nodes/tasks/get_activation_key.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- -# tasks file for satellite-manage-nodes - - # Get activation key - - name: ":::: Get {{ node }} activation key ::::" - command: > - /bin/hammer product create - --organization "{{ initial_org }}" - --name "{{ item.name }}" - register: create_addl_prod - with_items: sat_custom_products - failed_when: > - create_addl_prod.rc != 0 - and create_addl_prod.rc != 65 - changed_when: > - create_addl_prod.rc == 0 - - - \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tasks/get_repo_list.yml b/roles/satellite-manage-nodes/tasks/get_repo_list.yml deleted file mode 100644 index f3a126c..0000000 --- a/roles/satellite-manage-nodes/tasks/get_repo_list.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -# tasks file for satellite-manage-nodes - # Update certificate - - name: ":::: Download satellite {{ satellite_server }} certificate ::::" - shell: - cmd: subscription-manager repos --list-enabled - register: enabled_repos_out - - # Subscribe client - - name: ":::: Subscribe {{ node }} with activation key ::::" - community.general.redhat_subscription: - state: present - activationkey: "{{ activation_key }}" - org_id: "{{ organization_id }}" - register: subscribe_node_out - - # Disable repos \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tasks/main.yml b/roles/satellite-manage-nodes/tasks/main.yml deleted file mode 100644 index cc8f4ec..0000000 --- a/roles/satellite-manage-nodes/tasks/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# tasks file for satellite-manage-nodes \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tasks/subscribe_client.yml b/roles/satellite-manage-nodes/tasks/subscribe_client.yml deleted file mode 100644 index 37d0306..0000000 --- a/roles/satellite-manage-nodes/tasks/subscribe_client.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -# tasks file for satellite-manage-nodes - # Update certificate - - name: ":::: Download satellite {{ satellite_server }} certificate ::::" - shell: - cmd: rpm -Uvh http://{{ satellite_server }}/pub/katello-ca-consumer-latest.noarch.rpm --force - register: install_katello_ca_out - - # Subscribe client - - name: ":::: Subscribe {{ node }} with activation key ::::" - community.general.redhat_subscription: - state: present - activationkey: "{{ activation_key }}" - org_id: "{{ organization_id }}" - register: subscribe_node_out - - # Disable repos \ No newline at end of file diff --git a/roles/satellite-manage-nodes/tests/inventory b/roles/satellite-manage-nodes/tests/inventory deleted file mode 100644 index 878877b..0000000 --- a/roles/satellite-manage-nodes/tests/inventory +++ /dev/null @@ -1,2 +0,0 @@ -localhost - diff --git a/roles/satellite-manage-nodes/tests/test.yml b/roles/satellite-manage-nodes/tests/test.yml deleted file mode 100644 index ed6762d..0000000 --- a/roles/satellite-manage-nodes/tests/test.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- hosts: localhost - remote_user: root - roles: - - satellite-manage-nodes \ No newline at end of file diff --git a/roles/satellite-manage-nodes/vars/main.yml b/roles/satellite-manage-nodes/vars/main.yml deleted file mode 100644 index 1a474d4..0000000 --- a/roles/satellite-manage-nodes/vars/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -# vars file for satellite-manage-nodes \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index f9825bf..6d4f53c 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -1,6 +1,6 @@ --- # ansible-satellite | Satellite 6.x Orchestration -- hosts: satellite +- hosts: old_satellite become: yes vars_files: - group_vars/satellite.yml @@ -8,9 +8,14 @@ gather_facts: no tasks: + - name: ":::: Get organizations ::::" + import_role: ./roles/satellite-content/tasks/get_orgs.yml - name: ":::: Get list of all activation keys ::::" - import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml + include_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml +# with_items: "{{ organizations_list }}" +# include_vars: +# initial_org: "{{ item }}" - name: ":::: Get Host and Key subscriptions ::::" import_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml From 96d0a242706a6d47c98cfadd18810283c261c3b4 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:18:59 -0400 Subject: [PATCH 035/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 6d4f53c..e9528f5 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -9,7 +9,7 @@ tasks: - name: ":::: Get organizations ::::" - import_role: ./roles/satellite-content/tasks/get_orgs.yml + include_tasks: ./roles/satellite-content/tasks/get_orgs.yml - name: ":::: Get list of all activation keys ::::" include_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml From 68546d914c7b08195c9975f1f70e1a2c4bceac32 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:19:36 -0400 Subject: [PATCH 036/149] update --- satellite_re_subscribe.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index e9528f5..a4c2b00 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -9,10 +9,10 @@ tasks: - name: ":::: Get organizations ::::" - include_tasks: ./roles/satellite-content/tasks/get_orgs.yml + import_tasks: ./roles/satellite-content/tasks/get_orgs.yml - name: ":::: Get list of all activation keys ::::" - include_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml + import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml # with_items: "{{ organizations_list }}" # include_vars: # initial_org: "{{ item }}" From 668faa21222cf3b257edf6527b2d79d4219bda94 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:23:35 -0400 Subject: [PATCH 037/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 5a64e3f..b255729 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -3,7 +3,7 @@ # Get all activation Keys - name: ":::: Get Host and Key subscriptions ::::" - include_tasks: ./get_node_for_key.yml + import_tasks: ./get_node_for_key.yml with_items: "{{ activation_keys_list }}" include_vars: activationkey: "{{ item }}" From 07d7a4676e14343f81ff93402e42d594722435a0 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:29:49 -0400 Subject: [PATCH 038/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index b255729..ad5d5db 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -1,11 +1,11 @@ --- # Create activation keys - # Get all activation Keys +# Get all activation Keys - name: ":::: Get Host and Key subscriptions ::::" - import_tasks: ./get_node_for_key.yml + include_tasks: ./get_node_for_key.yml with_items: "{{ activation_keys_list }}" - include_vars: + vars: activationkey: "{{ item }}" \ No newline at end of file From 0a4d4fcb31ecfef744382b8be424a3208e586ad8 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:35:41 -0400 Subject: [PATCH 039/149] update --- roles/satellite-content/tasks/get_node_for_key.yml | 4 ++-- roles/satellite-content/tasks/get_orgs.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/satellite-content/tasks/get_node_for_key.yml b/roles/satellite-content/tasks/get_node_for_key.yml index 7d01251..3809c6b 100644 --- a/roles/satellite-content/tasks/get_node_for_key.yml +++ b/roles/satellite-content/tasks/get_node_for_key.yml @@ -25,9 +25,9 @@ host_for_key_list: "{{ host_for_key_list_title }}" - name: Create report - include_task: ./create_content_inventory.yml + include_tasks: ./create_content_inventory.yml with_items: "{{ host_for_key_list }}" - include_vars: + vars: host: "{{ item }}" activation_key: "{{ activationkey }}" diff --git a/roles/satellite-content/tasks/get_orgs.yml b/roles/satellite-content/tasks/get_orgs.yml index c397ab4..0187341 100644 --- a/roles/satellite-content/tasks/get_orgs.yml +++ b/roles/satellite-content/tasks/get_orgs.yml @@ -2,7 +2,7 @@ # Create activation keys # Get all activation Keys -- name: Get list of all activation keys +- name: Get list of all orgs shell: cmd: 'hammer org list --fields name' register: organizations From 029ab1cd9cc5199e855ba36171644db1203b4367 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:44:44 -0400 Subject: [PATCH 040/149] update --- roles/satellite-content/tasks/create_content_inventory.yml | 2 +- roles/satellite-content/tasks/get_node_for_key.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index ca27876..20a5a34 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -12,4 +12,4 @@ repos: [] - set_fact: - inventory_content: "{{ inventory_content + node }}" + inventory_content: inventory_content + "{{ node }}" diff --git a/roles/satellite-content/tasks/get_node_for_key.yml b/roles/satellite-content/tasks/get_node_for_key.yml index 3809c6b..0cd5fcb 100644 --- a/roles/satellite-content/tasks/get_node_for_key.yml +++ b/roles/satellite-content/tasks/get_node_for_key.yml @@ -2,7 +2,7 @@ # Create activation keys # Get all activation Keys -- name: Install new satellite certs +- name: Get node for specific key shell: cmd: 'hammer host list --search activation_key={{ activationkey }} --fields name' register: host_for_key From dc5cdbce6a87526bb0bace28a7f5d15401c31cd1 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 13:55:22 -0400 Subject: [PATCH 041/149] update --- roles/satellite-content/tasks/get_node_for_key.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/satellite-content/tasks/get_node_for_key.yml b/roles/satellite-content/tasks/get_node_for_key.yml index 0cd5fcb..918fd2b 100644 --- a/roles/satellite-content/tasks/get_node_for_key.yml +++ b/roles/satellite-content/tasks/get_node_for_key.yml @@ -30,5 +30,6 @@ vars: host: "{{ item }}" activation_key: "{{ activationkey }}" + when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file From 41e2ddf29af9ef6663e008a7aa33eb4c121658d3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:18:59 -0400 Subject: [PATCH 042/149] update --- group_vars/satellite.yml | 6 ++++++ .../tasks/create_content_inventory.yml | 8 ++++++-- .../tasks/create_org_key_inventory .yml | 14 ++++++++++++++ .../tasks/get_activation_keys_for_org.yml | 15 +++++++++++++++ ...get_node_for_key.yml => get_nodes_for_key.yml} | 0 .../tasks/get_nodes_for_keys.yml | 4 ++-- satellite_re_subscribe.yml | 11 +++++++---- 7 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 roles/satellite-content/tasks/create_org_key_inventory .yml create mode 100644 roles/satellite-content/tasks/get_activation_keys_for_org.yml rename roles/satellite-content/tasks/{get_node_for_key.yml => get_nodes_for_key.yml} (100%) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index a397480..c46e5ab 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -17,6 +17,12 @@ satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" org_id: 1 inventory_content: [] +aks: [] +organization: [] +host: [] +activation_key: [] +repos: [] + #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index 20a5a34..cb46390 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -2,14 +2,18 @@ # tasks file for satellite-clients - debug: msg: + - "organization: {{ organization }}" - "host: {{ host }}" - - "ak: {{ activation_key }}" + - "activation_key: {{ activation_key }}" + - "repos: {{ repos }}" + - set_fact: node: + organization: "{{ organization }}" host: "{{ host }}" activation_key: "{{ activation_key }}" - repos: [] + repos: "{{ repos }}" - set_fact: inventory_content: inventory_content + "{{ node }}" diff --git a/roles/satellite-content/tasks/create_org_key_inventory .yml b/roles/satellite-content/tasks/create_org_key_inventory .yml new file mode 100644 index 0000000..e3a04a9 --- /dev/null +++ b/roles/satellite-content/tasks/create_org_key_inventory .yml @@ -0,0 +1,14 @@ +--- +# tasks file for satellite-clients +- debug: + msg: + - "organizaion: {{ organizaion }}" + - "ak: {{ activation_key }}" + +- set_fact: + aks: + organizaion: "{{ hoorganizaionst }}" + activation_key: "{{ activation_key }}" + +- set_fact: + aks_list: aks_list + "{{ aks }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml new file mode 100644 index 0000000..83b95bf --- /dev/null +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -0,0 +1,15 @@ +--- +# Create activation keys + + # Get all activation Keys +- name: ":::: Get Activation Keys for Organization ::::" + include_tasks: ./get_activation_keys.yml + with_items: "{{ organizations_list }}" + vars: + initial_org: "{{ item }}" + + + + + + \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_node_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml similarity index 100% rename from roles/satellite-content/tasks/get_node_for_key.yml rename to roles/satellite-content/tasks/get_nodes_for_key.yml diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index ad5d5db..bab11a5 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -1,9 +1,9 @@ --- # Create activation keys -# Get all activation Keys +# Get all nodes for activation Keys - name: ":::: Get Host and Key subscriptions ::::" - include_tasks: ./get_node_for_key.yml + include_tasks: ./get_nodes_for_key.yml with_items: "{{ activation_keys_list }}" vars: activationkey: "{{ item }}" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index a4c2b00..4a7b08b 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -10,12 +10,15 @@ tasks: - name: ":::: Get organizations ::::" import_tasks: ./roles/satellite-content/tasks/get_orgs.yml + + - name: ":::: Create content inventory ::::" + import_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml + wich_items: "{{ organizations_list }}" + include_vars: + organization: "{{ item }}" - name: ":::: Get list of all activation keys ::::" - import_tasks: ./roles/satellite-content/tasks/get_activation_keys.yml -# with_items: "{{ organizations_list }}" -# include_vars: -# initial_org: "{{ item }}" + import_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml - name: ":::: Get Host and Key subscriptions ::::" import_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml From fa5430ce44a94c10bd4148a6dfb98a4f562a6519 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:19:35 -0400 Subject: [PATCH 043/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 4a7b08b..c825aea 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -12,7 +12,7 @@ import_tasks: ./roles/satellite-content/tasks/get_orgs.yml - name: ":::: Create content inventory ::::" - import_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml + include_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml wich_items: "{{ organizations_list }}" include_vars: organization: "{{ item }}" From 99772bef005c2b31a04f8fd6f5530f362e497723 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:21:05 -0400 Subject: [PATCH 044/149] update --- satellite_re_subscribe.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index c825aea..8de2b3f 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -13,9 +13,9 @@ - name: ":::: Create content inventory ::::" include_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml - wich_items: "{{ organizations_list }}" - include_vars: - organization: "{{ item }}" + with_items: "{{ organizations_list }}" +# include_vars: +# organization: "{{ item }}" - name: ":::: Get list of all activation keys ::::" import_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml From 0f268cf788c1e04d47b4b0e4df35a3d022fdb60f Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:21:55 -0400 Subject: [PATCH 045/149] update --- satellite_re_subscribe.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 8de2b3f..c36ad5d 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -14,8 +14,8 @@ - name: ":::: Create content inventory ::::" include_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml with_items: "{{ organizations_list }}" -# include_vars: -# organization: "{{ item }}" + vars: + organization: "{{ item }}" - name: ":::: Get list of all activation keys ::::" import_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml From 5842c3ce0dd0cdb4d14d322b08c8ff730df6daa2 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:35:59 -0400 Subject: [PATCH 046/149] update --- .../tasks/create_content_inventory.yml | 4 ++-- .../tasks/get_activation_keys_for_org.yml | 13 ++++++++++--- satellite_re_subscribe.yml | 11 ++++++++++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index cb46390..c982812 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -2,7 +2,7 @@ # tasks file for satellite-clients - debug: msg: - - "organization: {{ organization }}" + - "organization: {{ organization|upper }}" - "host: {{ host }}" - "activation_key: {{ activation_key }}" - "repos: {{ repos }}" @@ -10,7 +10,7 @@ - set_fact: node: - organization: "{{ organization }}" + organization: "{{ organization|upper }}" host: "{{ host }}" activation_key: "{{ activation_key }}" repos: "{{ repos }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 83b95bf..77a1e39 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -2,12 +2,19 @@ # Create activation keys # Get all activation Keys + +- sec_fact: + inventory_content: [] + - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml - with_items: "{{ organizations_list }}" - vars: - initial_org: "{{ item }}" +- name: ":::: Create content inventory ::::" + include_tasks: ./create_content_inventory.yml + with_items: "{{ activation_keys_list }}" + vars: + activation_key: "{{ item }}" + organization: "{{ initial_org }}" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index c36ad5d..4f80f27 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -17,8 +17,17 @@ vars: organization: "{{ item }}" + - set_fact: + inventory_satellite: "{{ inventory_content }}" + - name: ":::: Get list of all activation keys ::::" - import_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml + include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml + with_items: "{{ inventory_satellite }}" + vars: + initial_org: "{{ item.organization }}" + + - set_fact: + inventory_satellite: "{{ inventory_content }}" - name: ":::: Get Host and Key subscriptions ::::" import_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml From d0873ae9061dd9bcd2391e64ea31a186e825d631 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:38:08 -0400 Subject: [PATCH 047/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 2 +- satellite_re_subscribe.yml | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 77a1e39..f8b625a 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -3,7 +3,7 @@ # Get all activation Keys -- sec_fact: +- set_fact: inventory_content: [] - name: ":::: Get Activation Keys for Organization ::::" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 4f80f27..f921ca8 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -30,7 +30,10 @@ inventory_satellite: "{{ inventory_content }}" - name: ":::: Get Host and Key subscriptions ::::" - import_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml + include_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml + with_items: "{{ inventory_satellite }}" + vars: + initial_org: "{{ item.activation_key }}" - name: ":::: Create content inventory ::::" import_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml From 4074840751072a119a1f13a0bdecd205a93823e6 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:40:28 -0400 Subject: [PATCH 048/149] update --- roles/satellite-content/tasks/get_nodes_for_key.yml | 7 ------- roles/satellite-content/tasks/get_nodes_for_keys.yml | 9 +++++++-- satellite_re_subscribe.yml | 3 +++ 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index 918fd2b..09b282b 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -24,12 +24,5 @@ - set_fact: host_for_key_list: "{{ host_for_key_list_title }}" -- name: Create report - include_tasks: ./create_content_inventory.yml - with_items: "{{ host_for_key_list }}" - vars: - host: "{{ item }}" - activation_key: "{{ activationkey }}" - when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index bab11a5..df5672b 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -4,8 +4,13 @@ # Get all nodes for activation Keys - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./get_nodes_for_key.yml - with_items: "{{ activation_keys_list }}" + +- name: Create report + include_tasks: ./create_content_inventory.yml + with_items: "{{ host_for_key_list }}" vars: - activationkey: "{{ item }}" + host: "{{ item }}" + activation_key: "{{ activationkey }}" + when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index f921ca8..875e712 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -35,6 +35,9 @@ vars: initial_org: "{{ item.activation_key }}" + - set_fact: + inventory_satellite: "{{ inventory_content }}" + - name: ":::: Create content inventory ::::" import_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml From 4d33092d9fbc321335449e4f3ac14354a08cef24 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:45:05 -0400 Subject: [PATCH 049/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 3 --- .../tasks/get_activation_keys_for_org.yml | 3 ++- roles/satellite-content/tasks/get_nodes_for_keys.yml | 1 + satellite_re_subscribe.yml | 7 +++---- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 2416671..b65d59b 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -24,9 +24,6 @@ - set_fact: activation_keys_list: "{{ activation_keys_list_remove_title }}" -- debug: - msg: - - "{{ activation_keys_list }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index f8b625a..c66eaef 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -4,7 +4,7 @@ # Get all activation Keys - set_fact: - inventory_content: [] + inventory_content: [] - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml @@ -15,6 +15,7 @@ vars: activation_key: "{{ item }}" organization: "{{ initial_org }}" + when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index df5672b..7959c19 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -11,6 +11,7 @@ vars: host: "{{ item }}" activation_key: "{{ activationkey }}" + organization: "{{ initial_org }}" when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 875e712..2948251 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -38,11 +38,10 @@ - set_fact: inventory_satellite: "{{ inventory_content }}" - - name: ":::: Create content inventory ::::" - import_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml - - name: ":::: Create content inventory file ::::" - import_tasks: ./roles/satellite-content/tasks/create_content_inventory_file.yml + include_tasks: ./roles/satellite-content/tasks/create_content_inventory_file.yml + vars: + inventory_content: "{{ inventory_satellite }}" - hosts: satellite6-server-prod become: yes From 10ee0d6471d85ed14af24cea2b8b98498775b446 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:51:18 -0400 Subject: [PATCH 050/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 3 --- satellite_re_subscribe.yml | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index c66eaef..448421a 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -3,9 +3,6 @@ # Get all activation Keys -- set_fact: - inventory_content: [] - - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 2948251..ebda4c8 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -19,6 +19,7 @@ - set_fact: inventory_satellite: "{{ inventory_content }}" + inventory_content: [] - name: ":::: Get list of all activation keys ::::" include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -28,6 +29,7 @@ - set_fact: inventory_satellite: "{{ inventory_content }}" + inventory_content: [] - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -37,6 +39,7 @@ - set_fact: inventory_satellite: "{{ inventory_content }}" + inventory_content: [] - name: ":::: Create content inventory file ::::" include_tasks: ./roles/satellite-content/tasks/create_content_inventory_file.yml From 14af9006c5dba73041cc3fcf19eeb427900842ac Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:54:23 -0400 Subject: [PATCH 051/149] update --- satellite_re_subscribe.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index ebda4c8..c9a6966 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -21,6 +21,10 @@ inventory_satellite: "{{ inventory_content }}" inventory_content: [] + - debug: + msg: + - "{{ inventory_satellite }}" + - name: ":::: Get list of all activation keys ::::" include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml with_items: "{{ inventory_satellite }}" From e327ddc0f7a3f3acd6ea513da1f1169b2eab8ee2 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 14:56:56 -0400 Subject: [PATCH 052/149] update --- roles/satellite-content/tasks/create_content_inventory.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index c982812..ea4e59d 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -16,4 +16,4 @@ repos: "{{ repos }}" - set_fact: - inventory_content: inventory_content + "{{ node }}" + inventory_content: "{{ inventory_content + [node] }}" From 33de6e58f757a38f4f33fc6d13d571cd59cadda3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 15:03:14 -0400 Subject: [PATCH 053/149] update --- .../tasks/create_org_key_inventory .yml | 14 -------------- .../tasks/get_activation_keys_for_org.yml | 4 +++- roles/satellite-content/tasks/get_orgs.yml | 3 --- 3 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 roles/satellite-content/tasks/create_org_key_inventory .yml diff --git a/roles/satellite-content/tasks/create_org_key_inventory .yml b/roles/satellite-content/tasks/create_org_key_inventory .yml deleted file mode 100644 index e3a04a9..0000000 --- a/roles/satellite-content/tasks/create_org_key_inventory .yml +++ /dev/null @@ -1,14 +0,0 @@ ---- -# tasks file for satellite-clients -- debug: - msg: - - "organizaion: {{ organizaion }}" - - "ak: {{ activation_key }}" - -- set_fact: - aks: - organizaion: "{{ hoorganizaionst }}" - activation_key: "{{ activation_key }}" - -- set_fact: - aks_list: aks_list + "{{ aks }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 448421a..c57750e 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,12 +6,14 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml +- set_fact: + organization: "{{ initial_org }}" + - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" - organization: "{{ initial_org }}" when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/roles/satellite-content/tasks/get_orgs.yml b/roles/satellite-content/tasks/get_orgs.yml index 0187341..e99637c 100644 --- a/roles/satellite-content/tasks/get_orgs.yml +++ b/roles/satellite-content/tasks/get_orgs.yml @@ -24,9 +24,6 @@ - set_fact: organizations_list: "{{ organizations_list_remove_title }}" -- debug: - msg: - - "{{ organizations_list }}" From d86122f46625ef440fd1db7a9442684556060ab4 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 15:14:33 -0400 Subject: [PATCH 054/149] update --- group_vars/satellite.yml | 1 - .../tasks/activation_keys.yml | 10 +++--- .../satellite-content/tasks/content_views.yml | 22 ++++++------ .../tasks/create_content_inventory.yml | 1 - .../tasks/get_activation_keys.yml | 2 +- .../tasks/get_activation_keys_for_org.yml | 2 +- .../tasks/get_nodes_for_keys.yml | 2 -- roles/satellite-content/tasks/lifecycle.yml | 2 +- roles/satellite-content/tasks/main.yml | 2 +- roles/satellite-content/tasks/s3.yml | 2 +- roles/satellite-content/vars/main.yml | 2 +- .../tasks/content_views-auto_update.yml | 10 +++--- .../satellite-maintenance/tasks/s3-update.yml | 2 +- roles/satellite-selfsubscribe/tasks/main.yml | 4 +-- .../tasks/self_content.yml | 36 +++++++++---------- .../tasks/custom_repositories.yml | 4 +-- .../tasks/docker_repositories.yml | 4 +-- roles/satellite-setup/tasks/initial_sync.yml | 6 ++-- roles/satellite-setup/tasks/main.yml | 16 ++++----- .../tasks/redhat_repositories.yml | 2 +- roles/satellite-setup/tasks/sync_plans.yml | 4 +-- .../tasks/thirdparty_repositories.yml | 4 +-- satellite_re_subscribe.yml | 12 ++++--- 23 files changed, 76 insertions(+), 76 deletions(-) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index c46e5ab..bc99651 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -1,7 +1,6 @@ --- # ansible-satellite group vars -initial_org: "RD" initial_loc: "MX" initial_user: "admin" sat_admin_email: "psehgaft@redhat.com" diff --git a/roles/satellite-content/tasks/activation_keys.yml b/roles/satellite-content/tasks/activation_keys.yml index 6714a82..7e35f7d 100644 --- a/roles/satellite-content/tasks/activation_keys.yml +++ b/roles/satellite-content/tasks/activation_keys.yml @@ -5,7 +5,7 @@ - name: Creating activation key(s) command: > /bin/hammer activation-key create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.content_view }}" --lifecycle-environment "{{ item.lifecycle_env }}" @@ -21,7 +21,7 @@ - name: Updating activation key release versions command: > /bin/hammer activation-key update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --release-version "{{ item.releasever }}" register: update_activation_keys_rv @@ -37,7 +37,7 @@ - name: Obtaining All Subscription IDs shell: > /bin/hammer subscription list - --organization "{{ initial_org }}" | awk -F"|" '{ print $8 }' | column -t | egrep -vi "(--|ID)" + --organization "{{ organization }}" | awk -F"|" '{ print $8 }' | column -t | egrep -vi "(--|ID)" register: all_subscription_ids changed_when: no @@ -45,7 +45,7 @@ - name: Add subscription to activation key(s) command: > /bin/hammer activation-key add-subscription - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item[0].name }}" --subscription-id "{{ item[1] }}" register: add_activation_key_sub @@ -62,7 +62,7 @@ - name: Override content defaults to enable needed repos for activation key(s) command: > /bin/hammer activation-key content-override - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.0.name }}" --content-label "{{ item.1 }}" --value 1 diff --git a/roles/satellite-content/tasks/content_views.yml b/roles/satellite-content/tasks/content_views.yml index 30e15c1..01e08df 100644 --- a/roles/satellite-content/tasks/content_views.yml +++ b/roles/satellite-content/tasks/content_views.yml @@ -5,7 +5,7 @@ - name: Creating content view(s) command: > /bin/hammer content-view create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --description "{{ item.description }}" register: create_content_view @@ -20,7 +20,7 @@ - name: Updating defined content view(s) command: > /bin/hammer content-view update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.item.name }}" --description "{{ item.item.description }}" register: update_content_view @@ -37,7 +37,7 @@ - name: Assign repositories to content views via repository ids command: > /bin/hammer content-view update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --repository-ids "{{ item.repo_ids | join(',') }}" register: update_content_view @@ -52,7 +52,7 @@ - name: Creating content view package filter(s) command: > /bin/hammer content-view filter create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.applytocv }}" --inclusion "{{ item.inclusion | default(yes) }}" @@ -71,7 +71,7 @@ - name: Add content filter rules by package command: > /bin/hammer content-view filter rule create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.1 }}" --content-view "{{ item.0.applytocv }}" --content-view-filter "{{ item.0.name }}" @@ -91,7 +91,7 @@ - name: Applying repository restrictions to package filters command: > /bin/hammer content-view filter update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.applytocv }}" --repository-ids "{{ item.repo_ids | join(',') }}" @@ -109,7 +109,7 @@ - name: Creating content view date filter(s) command: > /bin/hammer content-view filter create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.applytocv }}" --inclusion "{{ item.inclusion | default(no) }}" @@ -128,7 +128,7 @@ - name: Add content filter rules by start date command: > /bin/hammer content-view filter rule create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --content-view "{{ item.applytocv }}" --content-view-filter "{{ item.name }}" --start-date "{{ item.start_date }}" @@ -148,7 +148,7 @@ - name: Applying repository restrictions to date filters command: > /bin/hammer content-view filter update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.applytocv }}" --repository-ids "{{ item.repo_ids | join(',') }}" @@ -166,7 +166,7 @@ - name: Publish content views to the Library environment command: > /bin/hammer content-view publish - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" register: publish_content_view with_items: sat_content_views @@ -181,7 +181,7 @@ - name: Promote initial content views from the Library to their respective environments command: > /bin/hammer content-view version promote - --organization "{{ initial_org }}" + --organization "{{ organization }}" --content-view "{{ item.0.name }}" --to-lifecycle-environment "{{ item.1 }}" --version "1.0" diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index ea4e59d..1094bf4 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -7,7 +7,6 @@ - "activation_key: {{ activation_key }}" - "repos: {{ repos }}" - - set_fact: node: organization: "{{ organization|upper }}" diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index b65d59b..e9368d3 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -4,7 +4,7 @@ # Get all activation Keys - name: Get list of all activation keys shell: - cmd: 'hammer activation-key list --organization {{ initial_org }} --fields name' + cmd: 'hammer activation-key list --organization {{ organization }} --fields name' register: activation_keys - set_fact: diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index c57750e..3fb8041 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -7,7 +7,7 @@ include_tasks: ./get_activation_keys.yml - set_fact: - organization: "{{ initial_org }}" + organization: "{{ organization }}" - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 7959c19..f0e3f49 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -10,8 +10,6 @@ with_items: "{{ host_for_key_list }}" vars: host: "{{ item }}" - activation_key: "{{ activationkey }}" - organization: "{{ initial_org }}" when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file diff --git a/roles/satellite-content/tasks/lifecycle.yml b/roles/satellite-content/tasks/lifecycle.yml index 22e8c9b..64fdc96 100644 --- a/roles/satellite-content/tasks/lifecycle.yml +++ b/roles/satellite-content/tasks/lifecycle.yml @@ -5,7 +5,7 @@ - name: Creating lifecycle environments command: > /bin/hammer lifecycle-environment create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.env }}" --description "{{ item.env }} Environment" --prior "{{ item.prior }}" diff --git a/roles/satellite-content/tasks/main.yml b/roles/satellite-content/tasks/main.yml index db4d1a2..4c6c98e 100644 --- a/roles/satellite-content/tasks/main.yml +++ b/roles/satellite-content/tasks/main.yml @@ -6,7 +6,7 @@ fail: msg: "You must pass an organization and a location to this role. Please see README.md for more detail." when: > - initial_org is not defined + organization is not defined or initial_loc is not defined # Wait for primary sync to finish if wait_on_sync is true/yes diff --git a/roles/satellite-content/tasks/s3.yml b/roles/satellite-content/tasks/s3.yml index 5fe592c..dd0fd36 100644 --- a/roles/satellite-content/tasks/s3.yml +++ b/roles/satellite-content/tasks/s3.yml @@ -17,7 +17,7 @@ - name: Upload changed packages to their respective repositories in the custom product command: > /bin/hammer repository upload-content - --organization "{{ initial_org }}" + --organization "{{ organization }}" --product "{{ sat_custom_product }}" --name "{{ item.item[0].name }}" --path "{{ item.dest }}" diff --git a/roles/satellite-content/vars/main.yml b/roles/satellite-content/vars/main.yml index ca500a7..a14c2f0 100644 --- a/roles/satellite-content/vars/main.yml +++ b/roles/satellite-content/vars/main.yml @@ -21,7 +21,7 @@ sat_lifecycle: # List content view details. View names must have no spaces. # Repositories you want to include, should match the IDs output by -# hammer repository list --organization "{{ initial_org }}" and should be +# hammer repository list --organization "{{ organization }}" and should be # separated by commas. Take a look at satellite-setup/vars/main.yml for ordering # Satellite 6.2 will fix the bug in hammer that allows you to specify repository names # when adding repository sets. Will update the code after release to take that into account diff --git a/roles/satellite-maintenance/tasks/content_views-auto_update.yml b/roles/satellite-maintenance/tasks/content_views-auto_update.yml index 1cedb5e..d533c81 100644 --- a/roles/satellite-maintenance/tasks/content_views-auto_update.yml +++ b/roles/satellite-maintenance/tasks/content_views-auto_update.yml @@ -80,7 +80,7 @@ - name: Creating content view package filter(s) command: > /bin/hammer content-view filter create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.content_view_name }}" --inclusion "{{ item.is_inclusion }}" @@ -99,7 +99,7 @@ - name: Add content filter rules by package command: > /bin/hammer content-view filter rule create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.1.name }}" --content-view "{{ item.0.content_view_name }}" --content-view-filter "{{ item.0.name }}" @@ -119,7 +119,7 @@ - name: Applying repository restrictions to package filters command: > /bin/hammer content-view filter update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.content_view_name }}" --repository-ids "{{ item.repositories | join(',') }}" @@ -137,7 +137,7 @@ - name: Creating content view erratum filters using date exclusion command: > /bin/hammer content-view filter create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name | replace('-cv','') }}-dated_to_{{ ansible_date_time.month }}{{ ansible_date_time.day }}{{ ansible_date_time.year }}" --content-view "{{ item.name }}" --inclusion "{{ sat_content_orchestration.date_filters.inclusion }}" @@ -157,7 +157,7 @@ - name: Exclude erratum updated after todays date command: > /bin/hammer content-view filter rule create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --content-view "{{ item.name }}" --content-view-filter "{{ item.name | replace('-cv','') }}-dated_to_{{ ansible_date_time.month }}{{ ansible_date_time.day }}{{ ansible_date_time.year }}" --start-date "{{ sat_content_orchestration.date_filters.start_date }}" diff --git a/roles/satellite-maintenance/tasks/s3-update.yml b/roles/satellite-maintenance/tasks/s3-update.yml index 5fe592c..dd0fd36 100644 --- a/roles/satellite-maintenance/tasks/s3-update.yml +++ b/roles/satellite-maintenance/tasks/s3-update.yml @@ -17,7 +17,7 @@ - name: Upload changed packages to their respective repositories in the custom product command: > /bin/hammer repository upload-content - --organization "{{ initial_org }}" + --organization "{{ organization }}" --product "{{ sat_custom_product }}" --name "{{ item.item[0].name }}" --path "{{ item.dest }}" diff --git a/roles/satellite-selfsubscribe/tasks/main.yml b/roles/satellite-selfsubscribe/tasks/main.yml index f64d7ce..4f850dd 100644 --- a/roles/satellite-selfsubscribe/tasks/main.yml +++ b/roles/satellite-selfsubscribe/tasks/main.yml @@ -26,7 +26,7 @@ - name: "Refresh the manifest from the Red Hat Portal" command: > /bin/hammer subscription refresh-manifest - --organization "{{ initial_org }}" + --organization "{{ organization }}" # Remove Satellite certificates - name: Uninstall certificates package if installed @@ -49,7 +49,7 @@ # Check registration status of the system - name: Subscribe the Satellite Server to itself command: > - /sbin/subscription-manager register --org "{{ initial_org | replace(' ','_') }}" --activationkey "{{ self_subscribe_key }}" + /sbin/subscription-manager register --org "{{ organization | replace(' ','_') }}" --activationkey "{{ self_subscribe_key }}" ignore_errors: yes # Remove automatically attached subscriptions diff --git a/roles/satellite-selfsubscribe/tasks/self_content.yml b/roles/satellite-selfsubscribe/tasks/self_content.yml index d31d352..25e56a2 100644 --- a/roles/satellite-selfsubscribe/tasks/self_content.yml +++ b/roles/satellite-selfsubscribe/tasks/self_content.yml @@ -4,7 +4,7 @@ - name: Enable repositories command: > /bin/hammer repository-set enable - --organization "{{ initial_org }}" + --organization "{{ organization }}" --product "{{ item.0.name }}" --name "{{ item.1.name }}" {{ item.1.options }} @@ -24,7 +24,7 @@ - name: Synchronize Red Hat yum repositories in the background command: > /bin/hammer product synchronize - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --async with_items: sat_products @@ -34,7 +34,7 @@ - name: Assign products to sync plan(s) command: > /bin/hammer product set-sync-plan - --organization "{{ initial_org }}" + --organization "{{ organization }}" --sync-plan "{{ item.0.name }}" --name "{{ item.1 }}" register: syncproduct_assign @@ -63,7 +63,7 @@ - name: Determine Satellite Repo ID shell: > /bin/hammer repository list - --organization "{{ initial_org }}" + --organization "{{ organization }}" --search "*Red\ Hat\ Satellite\ 6.1\ for\ RHEL\ 7\ Server*" | egrep -v "(\-\-\-|PRODUCT)" | awk '{ print $1 }' register: satellite_repository_id ignore_errors: yes @@ -83,7 +83,7 @@ - name: Creating lifecycle environments command: > /bin/hammer lifecycle-environment create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.env }}" --description "{{ item.env }} Environment" --prior "{{ item.prior }}" @@ -99,7 +99,7 @@ - name: Creating content view(s) command: > /bin/hammer content-view create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --description "{{ item.description }}" register: create_content_view @@ -114,7 +114,7 @@ - name: Updating defined content view(s) command: > /bin/hammer content-view update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.item.name }}" --description "{{ item.item.description }}" register: update_content_view @@ -130,7 +130,7 @@ - name: Assign repositories to content views via repository ids command: > /bin/hammer content-view update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --repository-ids "{{ sat_combined_repo_ids |list| join(',') }}" register: update_content_view @@ -145,7 +145,7 @@ - name: Creating content view date filter(s) command: > /bin/hammer content-view filter create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.applytocv }}" --inclusion "{{ item.inclusion | default(no) }}" @@ -164,7 +164,7 @@ - name: Add content filter rules by start date command: > /bin/hammer content-view filter rule create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --content-view "{{ item.applytocv }}" --content-view-filter "{{ item.name }}" --start-date "{{ item.start_date }}" @@ -184,7 +184,7 @@ - name: Applying repository restrictions to date filters command: > /bin/hammer content-view filter update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.applytocv }}" --repository-ids "{{ item.repo_ids | join(',') }}" @@ -202,7 +202,7 @@ - name: Publish content views to the Library environment command: > /bin/hammer content-view publish - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" register: publish_content_view with_items: sat_content_views @@ -217,7 +217,7 @@ - name: Promote initial content views from the Library to their respective environments command: > /bin/hammer content-view version promote - --organization "{{ initial_org }}" + --organization "{{ organization }}" --content-view "{{ item.0.name }}" --to-lifecycle-environment "{{ item.1 }}" --version "1.0" @@ -238,7 +238,7 @@ - name: Creating activation key(s) command: > /bin/hammer activation-key create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --content-view "{{ item.content_view }}" --lifecycle-environment "{{ item.lifecycle_env }}" @@ -254,7 +254,7 @@ - name: Updating activation key release versions command: > /bin/hammer activation-key update - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --release-version "{{ item.releasever }}" register: update_activation_keys_rv @@ -270,7 +270,7 @@ - name: Obtaining All Subscription IDs shell: > /bin/hammer subscription list - --organization "{{ initial_org }}" | awk -F"|" '{ print $8 }' | column -t | egrep -vi "(--|ID)" + --organization "{{ organization }}" | awk -F"|" '{ print $8 }' | column -t | egrep -vi "(--|ID)" register: all_subscription_ids changed_when: no @@ -278,7 +278,7 @@ - name: Add subscription to activation key(s) command: > /bin/hammer activation-key add-subscription - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item[0].name }}" --subscription-id "{{ item[1] }}" register: add_activation_key_sub @@ -295,7 +295,7 @@ - name: Override content defaults to enable needed repos for activation key(s) command: > /bin/hammer activation-key content-override - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.0.name }}" --content-label "{{ item.1 }}" --value 1 diff --git a/roles/satellite-setup/tasks/custom_repositories.yml b/roles/satellite-setup/tasks/custom_repositories.yml index ac2b887..e6b04d2 100644 --- a/roles/satellite-setup/tasks/custom_repositories.yml +++ b/roles/satellite-setup/tasks/custom_repositories.yml @@ -5,7 +5,7 @@ - name: Create additional products command: > /bin/hammer product create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" register: create_addl_prod with_items: sat_custom_products @@ -19,7 +19,7 @@ - name: Create additional yum repositories command: > /bin/hammer repository create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --product "{{ item.0.name }}" --name "{{ item.1.name }}" --content-type "yum" diff --git a/roles/satellite-setup/tasks/docker_repositories.yml b/roles/satellite-setup/tasks/docker_repositories.yml index 6335818..53c2363 100644 --- a/roles/satellite-setup/tasks/docker_repositories.yml +++ b/roles/satellite-setup/tasks/docker_repositories.yml @@ -5,7 +5,7 @@ - name: Create Docker products command: > /bin/hammer product create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" register: create_docker_prod with_items: sat_docker_products @@ -19,7 +19,7 @@ - name: Create additional Docker repositories command: > /bin/hammer repository create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --product "{{ item.0.name }}" --name "{{ item.1.name }}" --content-type "docker" diff --git a/roles/satellite-setup/tasks/initial_sync.yml b/roles/satellite-setup/tasks/initial_sync.yml index 486d839..09df017 100644 --- a/roles/satellite-setup/tasks/initial_sync.yml +++ b/roles/satellite-setup/tasks/initial_sync.yml @@ -5,7 +5,7 @@ - name: Synchronize Red Hat yum repositories in the background command: > /bin/hammer product synchronize - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --async with_items: sat_products @@ -15,7 +15,7 @@ - name: Synchronize Docker repositories in the background command: > /bin/hammer product synchronize - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --async with_items: sat_docker_products @@ -25,7 +25,7 @@ - name: Synchronize third-party repositories in the background command: > /bin/hammer product synchronize - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --async with_items: sat_thirdparty_products diff --git a/roles/satellite-setup/tasks/main.yml b/roles/satellite-setup/tasks/main.yml index 0a223b4..def2b27 100644 --- a/roles/satellite-setup/tasks/main.yml +++ b/roles/satellite-setup/tasks/main.yml @@ -6,7 +6,7 @@ fail: msg: "You must pass an organization, location, username, and manifest to this role. Please see README.md for more detail." when: > - initial_org is not defined + organization is not defined or initial_loc is not defined or initial_user is not defined or sat_manifest is not defined @@ -35,8 +35,8 @@ - name: Create an initial organization command: > /bin/hammer organization create - --name "{{ initial_org }}" - --label "{{ initial_org }}" + --name "{{ organization }}" + --label "{{ organization }}" register: create_org failed_when: > create_org.rc != 0 @@ -47,7 +47,7 @@ - name: Add a user to the organization command: > /bin/hammer organization add-user - --name "{{ initial_org }}" + --name "{{ organization }}" --user "{{ initial_user }}" register: org_adduser failed_when: > @@ -83,7 +83,7 @@ command: > /bin/hammer location add-organization --name "{{ initial_loc }}" - --organization "{{ initial_org }}" + --organization "{{ organization }}" register: loc_addorg failed_when: > loc_addorg.rc != 0 @@ -106,7 +106,7 @@ command: > /bin/hammer subscription upload --file "{{ ansible_user_dir }}/{{ sat_manifest }}" - --organization "{{ initial_org }}" + --organization "{{ organization }}" register: manifest_upload failed_when: > manifest_upload.rc != 0 @@ -115,12 +115,12 @@ - name: "Refresh the manifest with the latest copy from the Red Hat Portal" command: > /bin/hammer subscription refresh-manifest - --organization "{{ initial_org }}" + --organization "{{ organization }}" - name: Grab list of repositories available to this Satellite server command: > /bin/hammer product list - --organization "{{ initial_org }}" + --organization "{{ organization }}" changed_when: no register: hammer_product_list diff --git a/roles/satellite-setup/tasks/redhat_repositories.yml b/roles/satellite-setup/tasks/redhat_repositories.yml index 9030b9e..6914948 100644 --- a/roles/satellite-setup/tasks/redhat_repositories.yml +++ b/roles/satellite-setup/tasks/redhat_repositories.yml @@ -5,7 +5,7 @@ - name: Enable repositories command: > /bin/hammer repository-set enable - --organization "{{ initial_org }}" + --organization "{{ organization }}" --product "{{ item.0.name }}" --name "{{ item.1.name }}" {{ item.1.options }} diff --git a/roles/satellite-setup/tasks/sync_plans.yml b/roles/satellite-setup/tasks/sync_plans.yml index d5c33e0..d48c3f2 100644 --- a/roles/satellite-setup/tasks/sync_plans.yml +++ b/roles/satellite-setup/tasks/sync_plans.yml @@ -5,7 +5,7 @@ - name: Creating sync plan(s) command: > /bin/hammer sync-plan create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" --sync-date "{{ ansible_date_time.date }} {{ item.synctime }}" --interval "{{ item.interval }}" @@ -23,7 +23,7 @@ - name: Assign products to sync plan(s) command: > /bin/hammer product set-sync-plan - --organization "{{ initial_org }}" + --organization "{{ organization }}" --sync-plan "{{ item.0.name }}" --name "{{ item.1 }}" register: syncproduct_assign diff --git a/roles/satellite-setup/tasks/thirdparty_repositories.yml b/roles/satellite-setup/tasks/thirdparty_repositories.yml index 85aedf5..12944da 100644 --- a/roles/satellite-setup/tasks/thirdparty_repositories.yml +++ b/roles/satellite-setup/tasks/thirdparty_repositories.yml @@ -5,7 +5,7 @@ - name: Create third-party products command: > /bin/hammer product create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --name "{{ item.name }}" register: create_thirdparty_prod with_items: sat_thirdparty_products @@ -19,7 +19,7 @@ - name: Create third-party yum repositories command: > /bin/hammer repository create - --organization "{{ initial_org }}" + --organization "{{ organization }}" --product "{{ item.0.name }}" --name "{{ item.1.name }}" --url "{{ item.1.url }}" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index c9a6966..18a195c 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -29,7 +29,7 @@ include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml with_items: "{{ inventory_satellite }}" vars: - initial_org: "{{ item.organization }}" + organization: "{{ item.organization }}" - set_fact: inventory_satellite: "{{ inventory_content }}" @@ -39,7 +39,8 @@ include_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml with_items: "{{ inventory_satellite }}" vars: - initial_org: "{{ item.activation_key }}" + organization: "{{ item.organization }}" + activationkey: "{{ item.activation_key }}" - set_fact: inventory_satellite: "{{ inventory_content }}" @@ -66,13 +67,16 @@ - set_fact: ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + - name: ":::: Get repos for host ::::" + include_tasks: + - name: ":::: Unregister host ::::" - import_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml vars: satellite: "{{ groups['old_satellite'][0] }}" - name: ":::: Register host ::::" - import_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml vars: satellite: "{{ groups['satellite'][0] }}" activationkey: "{{ groups[ak] }}" From e1214518a408b3ff3a78eecb5d33d52bea06cf08 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 15:22:53 -0400 Subject: [PATCH 055/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 4 +--- roles/satellite-content/tasks/get_nodes_for_keys.yml | 2 ++ satellite_re_subscribe.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 3fb8041..ab7b09b 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,14 +6,12 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml -- set_fact: - organization: "{{ organization }}" - - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" + organization: "{{ organization }}" when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index f0e3f49..282a6e5 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -10,6 +10,8 @@ with_items: "{{ host_for_key_list }}" vars: host: "{{ item }}" + organization: "{{ organization }}" + activation_key: "{{ item.activation_key }}" when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 18a195c..c7a788f 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -40,7 +40,7 @@ with_items: "{{ inventory_satellite }}" vars: organization: "{{ item.organization }}" - activationkey: "{{ item.activation_key }}" + activation_key: "{{ item.activation_key }}" - set_fact: inventory_satellite: "{{ inventory_content }}" From bd25f7635d93ac81eedd2e9a8538bedaa0c31c9f Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 15:25:50 -0400 Subject: [PATCH 056/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 4 +++- roles/satellite-content/tasks/get_nodes_for_keys.yml | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index ab7b09b..15c827c 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,12 +6,14 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml +- set_fact: + organization: "{{ organization }}" + - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" - organization: "{{ organization }}" when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 282a6e5..81b0272 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -5,13 +5,15 @@ - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./get_nodes_for_key.yml +- set_fact: + organization: "{{ organization }}" + activation_key: "{{ item.activation_key }}" + - name: Create report include_tasks: ./create_content_inventory.yml with_items: "{{ host_for_key_list }}" vars: host: "{{ item }}" - organization: "{{ organization }}" - activation_key: "{{ item.activation_key }}" when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file From f83cfa4ebd3381eb0f9ff1cbd7fc7170977acfce Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 15:34:40 -0400 Subject: [PATCH 057/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 7 +++++++ .../tasks/get_activation_keys_for_org.yml | 1 + satellite_re_subscribe.yml | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 roles/satellite-clients/tasks/client_get_enable_repos.yml diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml new file mode 100644 index 0000000..8ff6c7e --- /dev/null +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -0,0 +1,7 @@ +--- +# tasks file for satellite-clients + +- name: Clean old subscription-manager data + shell: + cmd: subscription-manager repos --list-enabled + diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 15c827c..b66227c 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -14,6 +14,7 @@ with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" + organization: "{{ organization }}" when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index c7a788f..301a556 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -68,7 +68,7 @@ ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - name: ":::: Get repos for host ::::" - include_tasks: + include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml - name: ":::: Unregister host ::::" include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml From e366c44c5172cb2e3b440d4bb0534a7fa4a17c5e Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 15:39:59 -0400 Subject: [PATCH 058/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 4 ++-- roles/satellite-content/tasks/get_nodes_for_keys.yml | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index b66227c..c46d2e2 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -7,14 +7,14 @@ include_tasks: ./get_activation_keys.yml - set_fact: - organization: "{{ organization }}" + org: "{{ organization }}" - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" - organization: "{{ organization }}" + organization: "{{ org }}" when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 81b0272..fff9728 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -6,14 +6,16 @@ include_tasks: ./get_nodes_for_key.yml - set_fact: - organization: "{{ organization }}" - activation_key: "{{ item.activation_key }}" + org: "{{ organization }}" + ak: "{{ activation_key }}" - name: Create report include_tasks: ./create_content_inventory.yml with_items: "{{ host_for_key_list }}" vars: host: "{{ item }}" + organization: "{{ org }}" + activation_key: "{{ ak }}" when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file From 661eaf9068ab947edc5372d2ecdd3586041e7334 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 15:48:21 -0400 Subject: [PATCH 059/149] update --- .../satellite-content/tasks/create_content_inventory.yml | 4 ++-- .../tasks/get_activation_keys_for_org.yml | 8 +------- roles/satellite-content/tasks/get_nodes_for_keys.yml | 8 ++------ satellite_re_subscribe.yml | 2 +- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index 1094bf4..5c612d9 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -2,14 +2,14 @@ # tasks file for satellite-clients - debug: msg: - - "organization: {{ organization|upper }}" + - "organization: {{ organization }}" - "host: {{ host }}" - "activation_key: {{ activation_key }}" - "repos: {{ repos }}" - set_fact: node: - organization: "{{ organization|upper }}" + organization: "{{ organization }}" host: "{{ host }}" activation_key: "{{ activation_key }}" repos: "{{ repos }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index c46d2e2..835b1b0 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,18 +6,12 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml -- set_fact: - org: "{{ organization }}" - - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" - organization: "{{ org }}" + organization: "{{ organization }}" when: activation_keys_list is defined and (activation_keys_list|length>0) - - - \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index fff9728..efb5b62 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -5,17 +5,13 @@ - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./get_nodes_for_key.yml -- set_fact: - org: "{{ organization }}" - ak: "{{ activation_key }}" - - name: Create report include_tasks: ./create_content_inventory.yml with_items: "{{ host_for_key_list }}" vars: host: "{{ item }}" - organization: "{{ org }}" - activation_key: "{{ ak }}" + organization: "{{ organization }}" + activation_key: "{{ activation_key }}" when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 301a556..d730c54 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -29,7 +29,7 @@ include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml with_items: "{{ inventory_satellite }}" vars: - organization: "{{ item.organization }}" + organization: "{{ item.organization|upper }}" - set_fact: inventory_satellite: "{{ inventory_content }}" From bcb69d57654ceacfe04c662ef78c61f6a11f1aea Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:03:31 -0400 Subject: [PATCH 060/149] update --- .../tasks/get_activation_keys_for_org.yml | 10 +++++++++- satellite_re_subscribe.yml | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 835b1b0..e901e73 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,12 +6,20 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml + +- debug: + msg: + - "MESSAGE__________________________" + +- debug: + msg: + - "{{ organization }}" + - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" - organization: "{{ organization }}" when: activation_keys_list is defined and (activation_keys_list|length>0) \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index d730c54..51a09ce 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -29,7 +29,7 @@ include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml with_items: "{{ inventory_satellite }}" vars: - organization: "{{ item.organization|upper }}" + org: "{{ item.organization|upper }}" - set_fact: inventory_satellite: "{{ inventory_content }}" From cacbcebed127178235b8486d40e7a83ba4d5f45c Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:04:39 -0400 Subject: [PATCH 061/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 51a09ce..d730c54 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -29,7 +29,7 @@ include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml with_items: "{{ inventory_satellite }}" vars: - org: "{{ item.organization|upper }}" + organization: "{{ item.organization|upper }}" - set_fact: inventory_satellite: "{{ inventory_content }}" From 8b535d33af33b459fc4713ae2930e41a0da196b2 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:07:57 -0400 Subject: [PATCH 062/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index e901e73..2150ca7 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -15,11 +15,15 @@ msg: - "{{ organization }}" +- set_fact: + org: "{{ organization }}" + - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" + organization: "{{ org }}" when: activation_keys_list is defined and (activation_keys_list|length>0) \ No newline at end of file From 80394a69b467f21e66a036abce99488326a3c1c2 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:17:02 -0400 Subject: [PATCH 063/149] update --- group_vars/satellite.yml | 1 - .../tasks/create_content_inventory.yml | 14 +++++++------- .../tasks/get_activation_keys_for_org.yml | 16 +++------------- satellite_re_subscribe.yml | 6 +++--- 4 files changed, 13 insertions(+), 24 deletions(-) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index bc99651..3da8cc2 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -17,7 +17,6 @@ org_id: 1 inventory_content: [] aks: [] -organization: [] host: [] activation_key: [] repos: [] diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index 5c612d9..99176e3 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -2,17 +2,17 @@ # tasks file for satellite-clients - debug: msg: - - "organization: {{ organization }}" - - "host: {{ host }}" + - "org: {{ organization }}" + - "host: {{ host_name }}" - "activation_key: {{ activation_key }}" - - "repos: {{ repos }}" + - "repos: {{ repos_host }}" - set_fact: node: - organization: "{{ organization }}" - host: "{{ host }}" - activation_key: "{{ activation_key }}" - repos: "{{ repos }}" + org: "{{ organization }}" + host: "{{ host_name }}" + activationkey: "{{ activation_key }}" + repos: "{{ repos_host }}" - set_fact: inventory_content: "{{ inventory_content + [node] }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 2150ca7..b1e2672 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,24 +6,14 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml - -- debug: - msg: - - "MESSAGE__________________________" - -- debug: - msg: - - "{{ organization }}" - -- set_fact: - org: "{{ organization }}" - - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list }}" vars: activation_key: "{{ item }}" - organization: "{{ org }}" when: activation_keys_list is defined and (activation_keys_list|length>0) + + + \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index d730c54..13bfb7d 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -29,7 +29,7 @@ include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml with_items: "{{ inventory_satellite }}" vars: - organization: "{{ item.organization|upper }}" + organization: "{{ item.org|upper }}" - set_fact: inventory_satellite: "{{ inventory_content }}" @@ -39,8 +39,8 @@ include_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml with_items: "{{ inventory_satellite }}" vars: - organization: "{{ item.organization }}" - activation_key: "{{ item.activation_key }}" + organization: "{{ item.org }}" + activation_key: "{{ item.activationkey }}" - set_fact: inventory_satellite: "{{ inventory_content }}" From 4dca0ef64bdb0bdb3eaac2ffcc019310697ab4ed Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:19:43 -0400 Subject: [PATCH 064/149] update --- group_vars/satellite.yml | 5 +---- satellite_re_subscribe.yml | 3 +++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index 3da8cc2..249c2d6 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -15,10 +15,7 @@ sat_hostname: "rhs" satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" org_id: 1 -inventory_content: [] -aks: [] -host: [] -activation_key: [] +host_name: [] repos: [] diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 13bfb7d..48976ca 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -8,6 +8,9 @@ gather_facts: no tasks: + - set_fact: + inventory_content: [] + - name: ":::: Get organizations ::::" import_tasks: ./roles/satellite-content/tasks/get_orgs.yml From 182943de70b1cd70f194850ccf81630963a3cbc5 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:21:33 -0400 Subject: [PATCH 065/149] update --- group_vars/satellite.yml | 1 + satellite_re_subscribe.yml | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index 249c2d6..752be03 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -19,6 +19,7 @@ host_name: [] repos: [] + #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 48976ca..94287f6 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -23,10 +23,7 @@ - set_fact: inventory_satellite: "{{ inventory_content }}" inventory_content: [] - - - debug: - msg: - - "{{ inventory_satellite }}" + activation_key: [] - name: ":::: Get list of all activation keys ::::" include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml From 39cd51082c8d9a9e0226f90ca8eed1abd069bcdc Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:23:20 -0400 Subject: [PATCH 066/149] update --- group_vars/satellite.yml | 5 ----- satellite_re_subscribe.yml | 4 +++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index 752be03..95a46f2 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -15,11 +15,6 @@ sat_hostname: "rhs" satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" org_id: 1 -host_name: [] -repos: [] - - - #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 94287f6..168c295 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -10,6 +10,9 @@ tasks: - set_fact: inventory_content: [] + activation_key: [] + host_name: [] + repos: [] - name: ":::: Get organizations ::::" import_tasks: ./roles/satellite-content/tasks/get_orgs.yml @@ -23,7 +26,6 @@ - set_fact: inventory_satellite: "{{ inventory_content }}" inventory_content: [] - activation_key: [] - name: ":::: Get list of all activation keys ::::" include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml From 78fae12817e4611e640872f80ff0cefeb616a61f Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:24:35 -0400 Subject: [PATCH 067/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 168c295..825a42c 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -12,7 +12,7 @@ inventory_content: [] activation_key: [] host_name: [] - repos: [] + repos_host: [] - name: ":::: Get organizations ::::" import_tasks: ./roles/satellite-content/tasks/get_orgs.yml From ccb25044c1971f92abf133ff6cd2482ce99d9098 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:33:05 -0400 Subject: [PATCH 068/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 7 ++++++- .../tasks/get_activation_keys_for_org.yml | 6 ------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index e9368d3..f9c1518 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -24,7 +24,12 @@ - set_fact: activation_keys_list: "{{ activation_keys_list_remove_title }}" - +- name: ":::: Create content inventory ::::" + include_tasks: ./create_content_inventory.yml + with_items: "{{ activation_keys_list }}" + vars: + activation_key: "{{ item }}" + when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index b1e2672..66a4aa9 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,12 +6,6 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml -- name: ":::: Create content inventory ::::" - include_tasks: ./create_content_inventory.yml - with_items: "{{ activation_keys_list }}" - vars: - activation_key: "{{ item }}" - when: activation_keys_list is defined and (activation_keys_list|length>0) From 934746650711717effc4b4f327bfd0b474a79a98 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:39:38 -0400 Subject: [PATCH 069/149] update --- group_vars/satellite.yml | 1 + roles/satellite-content/tasks/get_activation_keys.yml | 6 ------ .../satellite-content/tasks/get_activation_keys_for_org.yml | 6 ++++++ satellite_re_subscribe.yml | 6 +++--- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index 95a46f2..71d7eb6 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -14,6 +14,7 @@ sat_domain: "lnx.demo.rd" sat_hostname: "rhs" satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" org_id: 1 +organization: RD #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index f9c1518..3ab0ed2 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -24,12 +24,6 @@ - set_fact: activation_keys_list: "{{ activation_keys_list_remove_title }}" -- name: ":::: Create content inventory ::::" - include_tasks: ./create_content_inventory.yml - with_items: "{{ activation_keys_list }}" - vars: - activation_key: "{{ item }}" - when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 66a4aa9..b1e2672 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,6 +6,12 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml +- name: ":::: Create content inventory ::::" + include_tasks: ./create_content_inventory.yml + with_items: "{{ activation_keys_list }}" + vars: + activation_key: "{{ item }}" + when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 825a42c..79f5046 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -29,9 +29,9 @@ - name: ":::: Get list of all activation keys ::::" include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml - with_items: "{{ inventory_satellite }}" - vars: - organization: "{{ item.org|upper }}" +# with_items: "{{ inventory_satellite }}" +# vars: +# organization: "{{ org }}" - set_fact: inventory_satellite: "{{ inventory_content }}" From c30dc1b70595658ad576a51ef1a7582e129e1974 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:42:23 -0400 Subject: [PATCH 070/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index efb5b62..980cd0a 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -11,7 +11,7 @@ vars: host: "{{ item }}" organization: "{{ organization }}" - activation_key: "{{ activation_key }}" + activationkey: "{{ activation_key }}" when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file From a1e91ea863c43248edaa1229c61e2e4ad9e6da11 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:48:07 -0400 Subject: [PATCH 071/149] update --- roles/satellite-content/tasks/get_nodes_for_key.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index 09b282b..dbc1716 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -4,7 +4,7 @@ # Get all activation Keys - name: Get node for specific key shell: - cmd: 'hammer host list --search activation_key={{ activationkey }} --fields name' + cmd: 'hammer host list --search activation_key={{ activation_key }} --fields name' register: host_for_key - set_fact: From db72df1d1904b0fe98d4f1fcbc30aec46808171b Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:51:06 -0400 Subject: [PATCH 072/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 980cd0a..f0e3f49 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -10,8 +10,6 @@ with_items: "{{ host_for_key_list }}" vars: host: "{{ item }}" - organization: "{{ organization }}" - activationkey: "{{ activation_key }}" when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file From b59e24bb79892e8a85bba63f85b89fd51040dad7 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 16:54:51 -0400 Subject: [PATCH 073/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 79f5046..eff5b22 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -41,7 +41,7 @@ include_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml with_items: "{{ inventory_satellite }}" vars: - organization: "{{ item.org }}" + # organization: "{{ item.org }}" activation_key: "{{ item.activationkey }}" - set_fact: From af99ff5966e486eb3c22111bf5a2f8107b906414 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 17:00:25 -0400 Subject: [PATCH 074/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 4 ++++ satellite_re_subscribe.yml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index f0e3f49..d0e7c34 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -5,6 +5,10 @@ - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./get_nodes_for_key.yml +- set_facs: + org: this.organization + activationkey: this.activation_key + - name: Create report include_tasks: ./create_content_inventory.yml with_items: "{{ host_for_key_list }}" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index eff5b22..79f5046 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -41,7 +41,7 @@ include_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml with_items: "{{ inventory_satellite }}" vars: - # organization: "{{ item.org }}" + organization: "{{ item.org }}" activation_key: "{{ item.activationkey }}" - set_fact: From 6368bfff4eeb8c4356c38dd0b7144df4097a5c3e Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 17:04:13 -0400 Subject: [PATCH 075/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index d0e7c34..4f879b7 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -5,7 +5,7 @@ - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./get_nodes_for_key.yml -- set_facs: +- set_fact: org: this.organization activationkey: this.activation_key From 2370913be794e8471677f0f3faa9c4ca5249ede4 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 17:09:43 -0400 Subject: [PATCH 076/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 4f879b7..eb90812 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -6,8 +6,8 @@ include_tasks: ./get_nodes_for_key.yml - set_fact: - org: this.organization - activationkey: this.activation_key + org: "{{ item.organization}}" + activationkey: "{{ item.activation_key }}" - name: Create report include_tasks: ./create_content_inventory.yml From 10c24804e94f5384ea37e78ec5dbd8ac09af3a03 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 17:12:13 -0400 Subject: [PATCH 077/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index eb90812..e59f2e7 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -6,8 +6,8 @@ include_tasks: ./get_nodes_for_key.yml - set_fact: - org: "{{ item.organization}}" - activationkey: "{{ item.activation_key }}" + organization: "{{ org.vale }}" + activation_key: "{{ activationkey.value }}" - name: Create report include_tasks: ./create_content_inventory.yml From afe2fac7db463ec0ec721f8e7b2f2fcf4ccc59db Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 17:15:25 -0400 Subject: [PATCH 078/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index e59f2e7..f826762 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -6,8 +6,8 @@ include_tasks: ./get_nodes_for_key.yml - set_fact: - organization: "{{ org.vale }}" - activation_key: "{{ activationkey.value }}" + org: "{{ organization.vale }}" + activationkey: "{{ activation_key.value }}" - name: Create report include_tasks: ./create_content_inventory.yml From 529c5f7579416c03a3fad2fd42a73e671a906c9b Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 17:23:43 -0400 Subject: [PATCH 079/149] update --- roles/satellite-content/tasks/get_nodes_for_keys.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index f826762..e95b8d2 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -6,7 +6,7 @@ include_tasks: ./get_nodes_for_key.yml - set_fact: - org: "{{ organization.vale }}" + org: "{{ organization.value }}" activationkey: "{{ activation_key.value }}" - name: Create report From 271678158473294468f3becee2ca2333f31ad2cc Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 17:31:28 -0400 Subject: [PATCH 080/149] update --- roles/satellite-content/tasks/get_nodes_for_key.yml | 7 +++++++ roles/satellite-content/tasks/get_nodes_for_keys.yml | 9 --------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index dbc1716..2d553de 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -24,5 +24,12 @@ - set_fact: host_for_key_list: "{{ host_for_key_list_title }}" +- name: Create report + include_tasks: ./create_content_inventory.yml + with_items: "{{ host_for_key_list }}" + vars: + host_name: "{{ item }}" + when: host_for_key_list is defined and (host_for_key_list|length>0) + \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index e95b8d2..753cb72 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -5,15 +5,6 @@ - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./get_nodes_for_key.yml -- set_fact: - org: "{{ organization.value }}" - activationkey: "{{ activation_key.value }}" -- name: Create report - include_tasks: ./create_content_inventory.yml - with_items: "{{ host_for_key_list }}" - vars: - host: "{{ item }}" - when: host_for_key_list is defined and (host_for_key_list|length>0) \ No newline at end of file From 714c6b285defe88129fe2e092a1ee84e83cc9d66 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 19:37:57 -0400 Subject: [PATCH 081/149] update --- group_vars/satellite.yml | 1 - .../tasks/create_content_inventory.yml | 18 +++++------------- .../tasks/get_activation_keys_for_org.yml | 12 ++++++++++-- satellite_re_subscribe.yml | 16 ++++++++-------- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index 71d7eb6..95a46f2 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -14,7 +14,6 @@ sat_domain: "lnx.demo.rd" sat_hostname: "rhs" satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" org_id: 1 -organization: RD #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" diff --git a/roles/satellite-content/tasks/create_content_inventory.yml b/roles/satellite-content/tasks/create_content_inventory.yml index 99176e3..8fb300e 100644 --- a/roles/satellite-content/tasks/create_content_inventory.yml +++ b/roles/satellite-content/tasks/create_content_inventory.yml @@ -1,18 +1,10 @@ --- # tasks file for satellite-clients -- debug: - msg: - - "org: {{ organization }}" - - "host: {{ host_name }}" - - "activation_key: {{ activation_key }}" - - "repos: {{ repos_host }}" - -- set_fact: - node: - org: "{{ organization }}" - host: "{{ host_name }}" - activationkey: "{{ activation_key }}" - repos: "{{ repos_host }}" +# node: +# organization: "{{ organization }}" +# host: "{{ host }}" +# activationkey: "{{ activationkey }}" +# repos: "{{ repos }}" - set_fact: inventory_content: "{{ inventory_content + [node] }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index b1e2672..286fd9d 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -8,12 +8,20 @@ - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml - with_items: "{{ activation_keys_list }}" + with_subelements: + - "{{ item }}" + - "{{ activation_keys_list }}" vars: - activation_key: "{{ item }}" + node: + "{{ organization }}" + host: + activationkey: "{{ activation_key }}" + repos: "{{ repos_host }}" + when: activation_keys_list is defined and (activation_keys_list|length>0) + \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 79f5046..293823c 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -9,10 +9,6 @@ tasks: - set_fact: - inventory_content: [] - activation_key: [] - host_name: [] - repos_host: [] - name: ":::: Get organizations ::::" import_tasks: ./roles/satellite-content/tasks/get_orgs.yml @@ -21,7 +17,11 @@ include_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml with_items: "{{ organizations_list }}" vars: - organization: "{{ item }}" + host: + organization: "{{ item }}" + host: "" + activationkey: "" + repo: "" - set_fact: inventory_satellite: "{{ inventory_content }}" @@ -29,9 +29,9 @@ - name: ":::: Get list of all activation keys ::::" include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml -# with_items: "{{ inventory_satellite }}" -# vars: -# organization: "{{ org }}" + with_items: "{{ inventory_satellite }}" + vars: + organization: "{{ item.organization }}" - set_fact: inventory_satellite: "{{ inventory_content }}" From 813ed17a17d76aaa9bdda16993c6a7b387a7bb3e Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 19:39:40 -0400 Subject: [PATCH 082/149] update --- satellite_re_subscribe.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 293823c..5b8230e 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -9,6 +9,7 @@ tasks: - set_fact: + inventory_content: [] - name: ":::: Get organizations ::::" import_tasks: ./roles/satellite-content/tasks/get_orgs.yml From edc3c050d219c5713ab482c1226dfca07925d274 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 19:45:29 -0400 Subject: [PATCH 083/149] update --- .../tasks/get_activation_keys_for_org.yml | 8 ++++---- satellite_re_subscribe.yml | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 286fd9d..13f6924 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -13,10 +13,10 @@ - "{{ activation_keys_list }}" vars: node: - "{{ organization }}" - host: - activationkey: "{{ activation_key }}" - repos: "{{ repos_host }}" + organization: "{{ item.0.organization }}" + host: "{{ item.1 }}" + activationkey: "{{ item.0.activation_key }}" + repos: "{{ item.0.repos_host }}" when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 5b8230e..e684bd3 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -18,11 +18,11 @@ include_tasks: ./roles/satellite-content/tasks/create_content_inventory.yml with_items: "{{ organizations_list }}" vars: - host: - organization: "{{ item }}" + node: + organization: "{{ item|uper }}" host: "" activationkey: "" - repo: "" + repos: "" - set_fact: inventory_satellite: "{{ inventory_content }}" From 4029fa915e2139916734f2b6a5bdfe283ea98f1b Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 19:47:24 -0400 Subject: [PATCH 084/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index e684bd3..a502a74 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -19,7 +19,7 @@ with_items: "{{ organizations_list }}" vars: node: - organization: "{{ item|uper }}" + organization: "{{ item|upper }}" host: "" activationkey: "" repos: "" From db579a532a7b01452f560fd1fcfe8512e066fe06 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:00:20 -0400 Subject: [PATCH 085/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 3 ++- .../satellite-content/tasks/get_activation_keys_for_org.yml | 3 +++ satellite_re_subscribe.yml | 5 ++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 3ab0ed2..eaa39a6 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -22,7 +22,8 @@ activation_keys_list_remove_title: "{{ activation_keys_list_remove_lines|reject('search', title)|list }}" - set_fact: - activation_keys_list: "{{ activation_keys_list_remove_title }}" + activation_keys_list: "{{ organization }}.{{ activation_keys_list_remove_title }}" + diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 13f6924..a4831c1 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -6,6 +6,9 @@ - name: ":::: Get Activation Keys for Organization ::::" include_tasks: ./get_activation_keys.yml +- debug: + msg: "{{ activation_keys_list }}" + - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_subelements: diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index a502a74..5498dd2 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -32,7 +32,10 @@ include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml with_items: "{{ inventory_satellite }}" vars: - organization: "{{ item.organization }}" + organization: "{{ item.organization }}" + host: "" + activationkey: "" + repos: "" - set_fact: inventory_satellite: "{{ inventory_content }}" From cd3256751018ddf8fecaf83db1e9ed0c68f7abc3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:08:10 -0400 Subject: [PATCH 086/149] update --- .../satellite-content/tasks/get_activation_keys.yml | 2 +- .../tasks/get_activation_keys_for_org.yml | 13 +++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index eaa39a6..e9368d3 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -22,7 +22,7 @@ activation_keys_list_remove_title: "{{ activation_keys_list_remove_lines|reject('search', title)|list }}" - set_fact: - activation_keys_list: "{{ organization }}.{{ activation_keys_list_remove_title }}" + activation_keys_list: "{{ activation_keys_list_remove_title }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index a4831c1..5f0769a 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -11,16 +11,13 @@ - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml - with_subelements: - - "{{ item }}" - - "{{ activation_keys_list }}" + with_subelements: "{{ activation_keys_list }}" vars: node: - organization: "{{ item.0.organization }}" - host: "{{ item.1 }}" - activationkey: "{{ item.0.activation_key }}" - repos: "{{ item.0.repos_host }}" - + organization: "{{ organization }}" + host: "" + activationkey: "{{ item }}" + repos: "" when: activation_keys_list is defined and (activation_keys_list|length>0) From 542adf187ae388dc8eede71bcb366c58b255316a Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:11:06 -0400 Subject: [PATCH 087/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 5f0769a..a02f4e7 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -11,7 +11,7 @@ - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml - with_subelements: "{{ activation_keys_list }}" + with_items: "{{ activation_keys_list }}" vars: node: organization: "{{ organization }}" From 322ae7a0ccf6224f2f4b176c2e894bdc54ef5373 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:18:22 -0400 Subject: [PATCH 088/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 2 -- satellite_re_subscribe.yml | 6 ------ 2 files changed, 8 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index a02f4e7..5c198dd 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -15,9 +15,7 @@ vars: node: organization: "{{ organization }}" - host: "" activationkey: "{{ item }}" - repos: "" when: activation_keys_list is defined and (activation_keys_list|length>0) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 5498dd2..223a93e 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -20,9 +20,6 @@ vars: node: organization: "{{ item|upper }}" - host: "" - activationkey: "" - repos: "" - set_fact: inventory_satellite: "{{ inventory_content }}" @@ -33,9 +30,6 @@ with_items: "{{ inventory_satellite }}" vars: organization: "{{ item.organization }}" - host: "" - activationkey: "" - repos: "" - set_fact: inventory_satellite: "{{ inventory_content }}" From ead385150c401c7b50ec3abdb45fac689db4f2ab Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:25:33 -0400 Subject: [PATCH 089/149] update --- roles/satellite-content/tasks/get_activation_keys.yml | 4 +++- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index e9368d3..73c15c2 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -22,7 +22,9 @@ activation_keys_list_remove_title: "{{ activation_keys_list_remove_lines|reject('search', title)|list }}" - set_fact: - activation_keys_list: "{{ activation_keys_list_remove_title }}" + activation_keys_list: + - list: "{{ activation_keys_list_remove_title }}" + org: "{{ organization }}" diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 5c198dd..4c45838 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -11,10 +11,10 @@ - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml - with_items: "{{ activation_keys_list }}" + with_items: "{{ activation_keys_list.list }}" vars: node: - organization: "{{ organization }}" + organization: "{{ activation_keys_list.org }}" activationkey: "{{ item }}" when: activation_keys_list is defined and (activation_keys_list|length>0) From 92e5eec0c84d6fcde2ca4f476ecb26e4634ffdf5 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:31:46 -0400 Subject: [PATCH 090/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 4c45838..9e3ac94 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -11,7 +11,7 @@ - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml - with_items: "{{ activation_keys_list.list }}" + with_items: "{{ activation_keys_list.list[] }}" vars: node: organization: "{{ activation_keys_list.org }}" From 1b6f654f860da2549773e35e94563b9035942ff9 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:37:39 -0400 Subject: [PATCH 091/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 9e3ac94..982a005 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -9,9 +9,12 @@ - debug: msg: "{{ activation_keys_list }}" +- debug: + msg: "{{ activation_keys_list.list }}" + - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml - with_items: "{{ activation_keys_list.list[] }}" + with_items: "{{ activation_keys_list.list }}" vars: node: organization: "{{ activation_keys_list.org }}" From 95b5d24f0c97af59f7b32ed6e16a8c2e48fb4a3a Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:42:51 -0400 Subject: [PATCH 092/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 982a005..7cdc573 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -14,10 +14,10 @@ - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml - with_items: "{{ activation_keys_list.list }}" + with_items: "{{ activation_keys_list[].list }}" vars: node: - organization: "{{ activation_keys_list.org }}" + organization: "{{ activation_keys_list[].org }}" activationkey: "{{ item }}" when: activation_keys_list is defined and (activation_keys_list|length>0) From e70a7f931e3bcf1b79ad39c1a07b99bca3f31093 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:45:25 -0400 Subject: [PATCH 093/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 7cdc573..10accf8 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -10,7 +10,7 @@ msg: "{{ activation_keys_list }}" - debug: - msg: "{{ activation_keys_list.list }}" + msg: "{{ activation_keys_list[].list }}" - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml From ad2538ca86f72cca988bd2c1d2f367a0fdea0052 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:48:47 -0400 Subject: [PATCH 094/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 10accf8..271cfdd 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -10,14 +10,14 @@ msg: "{{ activation_keys_list }}" - debug: - msg: "{{ activation_keys_list[].list }}" + msg: "{{ activation_keys_list[0].list }}" - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml - with_items: "{{ activation_keys_list[].list }}" + with_items: "{{ activation_keys_list[0].list }}" vars: node: - organization: "{{ activation_keys_list[].org }}" + organization: "{{ activation_keys_list[1].org }}" activationkey: "{{ item }}" when: activation_keys_list is defined and (activation_keys_list|length>0) From 892f0fb0d0c713b5a5f922c65ee4edaefad3cee9 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:53:57 -0400 Subject: [PATCH 095/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 271cfdd..8a04f9a 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -10,7 +10,8 @@ msg: "{{ activation_keys_list }}" - debug: - msg: "{{ activation_keys_list[0].list }}" + - msg: "{{ activation_keys_list[0].list }}" + - msg: "{{ activation_keys_list[1].org }}" - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml From ad85f1ccfbb7ef62c19170a543a72d0e85abca9f Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 20:58:55 -0400 Subject: [PATCH 096/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 8a04f9a..bf3e72d 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -10,8 +10,9 @@ msg: "{{ activation_keys_list }}" - debug: - - msg: "{{ activation_keys_list[0].list }}" - - msg: "{{ activation_keys_list[1].org }}" + - msg: + - "{{ activation_keys_list[0].list }}" + - "{{ activation_keys_list[1].org }}" - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml From 2f20827c01fd9dfb0da2d46b99b75c7408a920d0 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 21:00:28 -0400 Subject: [PATCH 097/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index bf3e72d..ff1b7e2 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -9,11 +9,6 @@ - debug: msg: "{{ activation_keys_list }}" -- debug: - - msg: - - "{{ activation_keys_list[0].list }}" - - "{{ activation_keys_list[1].org }}" - - name: ":::: Create content inventory ::::" include_tasks: ./create_content_inventory.yml with_items: "{{ activation_keys_list[0].list }}" From 8389e6a04deda49c8bf3024b5f14a994d8f3386b Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 21:05:13 -0400 Subject: [PATCH 098/149] update --- roles/satellite-content/tasks/get_activation_keys_for_org.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index ff1b7e2..c6a0f7d 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -14,7 +14,7 @@ with_items: "{{ activation_keys_list[0].list }}" vars: node: - organization: "{{ activation_keys_list[1].org }}" + organization: "{{ activation_keys_list[0].org }}" activationkey: "{{ item }}" when: activation_keys_list is defined and (activation_keys_list|length>0) From e89f985021a89bb8e1d3c6fc7e746328bcfa7405 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 21:18:25 -0400 Subject: [PATCH 099/149] update --- .../tasks/get_activation_keys_for_org.yml | 2 +- roles/satellite-content/tasks/get_nodes_for_key.yml | 13 +++++-------- .../satellite-content/tasks/get_nodes_for_keys.yml | 11 +++++++++++ satellite_re_subscribe.yml | 2 +- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index c6a0f7d..e97cbb5 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -16,7 +16,7 @@ node: organization: "{{ activation_keys_list[0].org }}" activationkey: "{{ item }}" - when: activation_keys_list is defined and (activation_keys_list|length>0) + when: activation_keys_list[0].list is defined and ( activation_keys_list[0].list|length>0 ) diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index 2d553de..1ddc191 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -22,14 +22,11 @@ host_for_key_list_title: "{{ host_for_key_list_lines|reject('search', title)|list }}" - set_fact: - host_for_key_list: "{{ host_for_key_list_title }}" - -- name: Create report - include_tasks: ./create_content_inventory.yml - with_items: "{{ host_for_key_list }}" - vars: - host_name: "{{ item }}" - when: host_for_key_list is defined and (host_for_key_list|length>0) + host_for_key_list: + - list: "{{ host_for_key_list_title }}" + org: "{{ organization }}" + ak: "{{ activation_key }}" + \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 753cb72..5f72c8e 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -5,6 +5,17 @@ - name: ":::: Get Host and Key subscriptions ::::" include_tasks: ./get_nodes_for_key.yml +- debug: + msg: "{{ host_for_key_list }}" +- name: ":::: Create content inventory ::::" + include_tasks: ./create_content_inventory.yml + with_items: "{{ host_for_key_list[0].list }}" + vars: + node: + organization: "{{ host_for_key_list[0].org }}" + activationkey: "{{ host_for_key_list[0].ak }}" + host: "{{ item }}" + when: host_for_key_list[0].list is defined and ( host_for_key_list[0].list|length>0 ) \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 223a93e..7591a66 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -29,7 +29,7 @@ include_tasks: ./roles/satellite-content/tasks/get_activation_keys_for_org.yml with_items: "{{ inventory_satellite }}" vars: - organization: "{{ item.organization }}" + organization: "{{ item.organization }}" - set_fact: inventory_satellite: "{{ inventory_content }}" From 596d652d752841edee0c1d0c7b5485229cc6da9d Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 21:24:45 -0400 Subject: [PATCH 100/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 7591a66..042c7e4 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -39,7 +39,7 @@ include_tasks: ./roles/satellite-content/tasks/get_nodes_for_keys.yml with_items: "{{ inventory_satellite }}" vars: - organization: "{{ item.org }}" + organization: "{{ item.organization }}" activation_key: "{{ item.activationkey }}" - set_fact: From 05f3e5e9c7ec2ac31184ad9fb53dd22bec04a8b9 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 21:30:36 -0400 Subject: [PATCH 101/149] update --- .../satellite-content/tasks/create_content_inventory_file.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml index 1a97abf..739e8e0 100644 --- a/roles/satellite-content/tasks/create_content_inventory_file.yml +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -2,4 +2,5 @@ # tasks file for satellite-clients - name: create inventory file copy: content="{{ inventory_content }}" dest=/group_vars/inventory_content.yml - delegate_to: localhost \ No newline at end of file + delegate_to: localhost + connection: local \ No newline at end of file From a00f3242fab8abccac6a0bea7d3b86e19fdb7bb6 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 23:06:37 -0400 Subject: [PATCH 102/149] update --- group_vars/inventory | 2 ++ .../satellite-content/tasks/create_content_inventory_file.yml | 3 ++- satellite_re_subscribe.yml | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/group_vars/inventory b/group_vars/inventory index 5230d45..c5dda34 100644 --- a/group_vars/inventory +++ b/group_vars/inventory @@ -8,3 +8,5 @@ rhs.lnx.demo.rd #3.144.121.168 student1.twsfd.example.opentlc.com +# [localhost] +# localhost ansible_connection=ssh ansible_user=redhat ansible_ssh_pass=L3b1r4m4r1@# \ No newline at end of file diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml index 739e8e0..dc771b8 100644 --- a/roles/satellite-content/tasks/create_content_inventory_file.yml +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -3,4 +3,5 @@ - name: create inventory file copy: content="{{ inventory_content }}" dest=/group_vars/inventory_content.yml delegate_to: localhost - connection: local \ No newline at end of file + connection: local + \ No newline at end of file diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 042c7e4..7b8a142 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -50,6 +50,8 @@ include_tasks: ./roles/satellite-content/tasks/create_content_inventory_file.yml vars: inventory_content: "{{ inventory_satellite }}" + ansible_user: "mahernan" + ansible_ssh_pass: "L3b1r4m4r1@#" - hosts: satellite6-server-prod become: yes From ff96c777deeb2ac9c9b5cfccf67e73790dcae3f4 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 23:16:12 -0400 Subject: [PATCH 103/149] update --- satellite_re_subscribe.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 7b8a142..729271f 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -52,6 +52,7 @@ inventory_content: "{{ inventory_satellite }}" ansible_user: "mahernan" ansible_ssh_pass: "L3b1r4m4r1@#" + ansible_sudo_pass: "L3b1r4m4r1@#" - hosts: satellite6-server-prod become: yes From e1c562203971a15d311b051094edd7aa8ada916a Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 23:22:18 -0400 Subject: [PATCH 104/149] update --- group_vars/satellite.yml | 1 + .../satellite-content/tasks/create_content_inventory_file.yml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index 95a46f2..7f0db14 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -14,6 +14,7 @@ sat_domain: "lnx.demo.rd" sat_hostname: "rhs" satellite_server: "{{ sat_hostname }}.{{ sat_domain }}" org_id: 1 +path_vars: /home/mahernan/workspace/ansible-satellite/group_vars/ #slack_token: "SOME-SUPER-LONG-SLACK-TOKEN-HERE" #slack_user: "SLACK-USERNAME" diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml index dc771b8..93d7ac6 100644 --- a/roles/satellite-content/tasks/create_content_inventory_file.yml +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -1,7 +1,8 @@ --- # tasks file for satellite-clients - name: create inventory file - copy: content="{{ inventory_content }}" dest=/group_vars/inventory_content.yml + copy: content="{{ inventory_content }}" + dest: "{{ path_vars }}/inventory_content.yml" delegate_to: localhost connection: local \ No newline at end of file From b5eb2130b5af863d64c17e9d7134583612b5d258 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 23:28:20 -0400 Subject: [PATCH 105/149] update --- .../satellite-content/tasks/create_content_inventory_file.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml index 93d7ac6..94c9f3a 100644 --- a/roles/satellite-content/tasks/create_content_inventory_file.yml +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -1,7 +1,8 @@ --- # tasks file for satellite-clients - name: create inventory file - copy: content="{{ inventory_content }}" + copy: + content: "{{ inventory_content | to_yaml }}" dest: "{{ path_vars }}/inventory_content.yml" delegate_to: localhost connection: local From 2ff6afd45c35c8b233e532b6f80ce2562fd9e156 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 23:53:08 -0400 Subject: [PATCH 106/149] update --- .../tasks/create_content_inventory_file.yml | 11 ++++++++++- satellite_re_subscribe.yml | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml index 94c9f3a..e7fba4c 100644 --- a/roles/satellite-content/tasks/create_content_inventory_file.yml +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -1,8 +1,17 @@ --- # tasks file for satellite-clients + +- name: create inventory file + lineinfile: + path: "{{ path_vars }}/inventorycontent.yml" + line: "{{ item.node }} organization={{ organization }} activationkey={{ activationkey }}" + create: yes + delegate_to: localhost + connection: local + - name: create inventory file copy: - content: "{{ inventory_content | to_yaml }}" + content: "{{ item | to_yaml }}" dest: "{{ path_vars }}/inventory_content.yml" delegate_to: localhost connection: local diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 729271f..7fa0d16 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -53,12 +53,14 @@ ansible_user: "mahernan" ansible_ssh_pass: "L3b1r4m4r1@#" ansible_sudo_pass: "L3b1r4m4r1@#" + with_items: "{{ inventory_satellite }}" -- hosts: satellite6-server-prod +- hosts: localhost become: yes vars_files: - group_vars/satellite.yml - group_vars/secrets.yml + - group_vars/inventory_content.yml gather_facts: yes tasks: From 7eb04e9e1da8b5c91df64e02a5e4c414f8457ac3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Wed, 3 May 2023 23:56:21 -0400 Subject: [PATCH 107/149] update --- roles/satellite-content/tasks/create_content_inventory_file.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml index e7fba4c..6e9db92 100644 --- a/roles/satellite-content/tasks/create_content_inventory_file.yml +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -4,7 +4,7 @@ - name: create inventory file lineinfile: path: "{{ path_vars }}/inventorycontent.yml" - line: "{{ item.node }} organization={{ organization }} activationkey={{ activationkey }}" + line: "{{ item.host }} organization={{ organization }} activationkey={{ activationkey }}" create: yes delegate_to: localhost connection: local From 7e2b9a70dedf889a7ecb31bfc3795f67b22881d8 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 00:05:15 -0400 Subject: [PATCH 108/149] update --- .../satellite-content/tasks/get_activation_keys_for_org.yml | 4 ++-- roles/satellite-content/tasks/get_nodes_for_keys.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index e97cbb5..3c5c842 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -14,8 +14,8 @@ with_items: "{{ activation_keys_list[0].list }}" vars: node: - organization: "{{ activation_keys_list[0].org }}" - activationkey: "{{ item }}" + - organization: "{{ activation_keys_list[0].org }}" + - activationkey: "{{ item }}" when: activation_keys_list[0].list is defined and ( activation_keys_list[0].list|length>0 ) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 5f72c8e..9cee37e 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -13,9 +13,9 @@ with_items: "{{ host_for_key_list[0].list }}" vars: node: - organization: "{{ host_for_key_list[0].org }}" - activationkey: "{{ host_for_key_list[0].ak }}" - host: "{{ item }}" + - organization: "{{ host_for_key_list[0].org }}" + - activationkey: "{{ host_for_key_list[0].ak }}" + - host: "{{ item }}" when: host_for_key_list[0].list is defined and ( host_for_key_list[0].list|length>0 ) \ No newline at end of file From 483678429aabd8289a0e1acb5c2fcec575893716 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 00:08:48 -0400 Subject: [PATCH 109/149] update --- .../tasks/create_content_inventory_file.yml | 2 +- .../satellite-content/tasks/get_activation_keys_for_org.yml | 4 ++-- roles/satellite-content/tasks/get_nodes_for_keys.yml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml index 6e9db92..5f94a09 100644 --- a/roles/satellite-content/tasks/create_content_inventory_file.yml +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -4,7 +4,7 @@ - name: create inventory file lineinfile: path: "{{ path_vars }}/inventorycontent.yml" - line: "{{ item.host }} organization={{ organization }} activationkey={{ activationkey }}" + line: "{{ item.host }} organization={{ item.organization }} activationkey={{ item.activationkey }}" create: yes delegate_to: localhost connection: local diff --git a/roles/satellite-content/tasks/get_activation_keys_for_org.yml b/roles/satellite-content/tasks/get_activation_keys_for_org.yml index 3c5c842..e97cbb5 100644 --- a/roles/satellite-content/tasks/get_activation_keys_for_org.yml +++ b/roles/satellite-content/tasks/get_activation_keys_for_org.yml @@ -14,8 +14,8 @@ with_items: "{{ activation_keys_list[0].list }}" vars: node: - - organization: "{{ activation_keys_list[0].org }}" - - activationkey: "{{ item }}" + organization: "{{ activation_keys_list[0].org }}" + activationkey: "{{ item }}" when: activation_keys_list[0].list is defined and ( activation_keys_list[0].list|length>0 ) diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 9cee37e..5f72c8e 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -13,9 +13,9 @@ with_items: "{{ host_for_key_list[0].list }}" vars: node: - - organization: "{{ host_for_key_list[0].org }}" - - activationkey: "{{ host_for_key_list[0].ak }}" - - host: "{{ item }}" + organization: "{{ host_for_key_list[0].org }}" + activationkey: "{{ host_for_key_list[0].ak }}" + host: "{{ item }}" when: host_for_key_list[0].list is defined and ( host_for_key_list[0].list|length>0 ) \ No newline at end of file From e3670e351df708fcdf2c74a35cbfe193a88a1f13 Mon Sep 17 00:00:00 2001 From: mahernan Date: Wed, 3 May 2023 23:12:46 -0500 Subject: [PATCH 110/149] inventory --- group_vars/inventory_content.yml | 1 + group_vars/inventorycontent.yml | 1 + 2 files changed, 2 insertions(+) create mode 100644 group_vars/inventory_content.yml create mode 100644 group_vars/inventorycontent.yml diff --git a/group_vars/inventory_content.yml b/group_vars/inventory_content.yml new file mode 100644 index 0000000..7fe4a63 --- /dev/null +++ b/group_vars/inventory_content.yml @@ -0,0 +1 @@ +{activationkey: 'aap_ak ', host: aap.lnx.demo.rd, organization: 'RD '} diff --git a/group_vars/inventorycontent.yml b/group_vars/inventorycontent.yml new file mode 100644 index 0000000..eea0fc6 --- /dev/null +++ b/group_vars/inventorycontent.yml @@ -0,0 +1 @@ +aap.lnx.demo.rd organization=RD activationkey=aap_ak From 88b487e1ad3e4eec8ee001d23d070c3a082ea156 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 00:17:28 -0400 Subject: [PATCH 111/149] update --- ansible_re-subscribe.yml | 29 +++++++++++++++++++ ...e_re_subscribe.yml => create_inventory.yml | 0 2 files changed, 29 insertions(+) create mode 100644 ansible_re-subscribe.yml rename satellite_re_subscribe.yml => create_inventory.yml (100%) diff --git a/ansible_re-subscribe.yml b/ansible_re-subscribe.yml new file mode 100644 index 0000000..0a7e7ae --- /dev/null +++ b/ansible_re-subscribe.yml @@ -0,0 +1,29 @@ +--- +- hosts: all + become: yes + vars_files: + - group_vars/satellite.yml + - group_vars/secrets.yml + gather_facts: yes + + tasks: + # create dynamic groups to define variables + - group_by: + key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + - set_fact: + ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + - name: ":::: Get repos for host ::::" + include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml + + - name: ":::: Unregister host ::::" + include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + vars: + satellite: "{{ groups['old_satellite'][0] }}" + + - name: ":::: Register host ::::" + include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + vars: + satellite: "{{ groups['satellite'][0] }}" + activationkey: "{{ groups[ak] }}" diff --git a/satellite_re_subscribe.yml b/create_inventory.yml similarity index 100% rename from satellite_re_subscribe.yml rename to create_inventory.yml From c6d952c71399a7e64f2efc7ca72806c07fd83f59 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 00:21:07 -0400 Subject: [PATCH 112/149] update --- ansible_re-subscribe.yml => satellite_re_subscribe.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ansible_re-subscribe.yml => satellite_re_subscribe.yml (100%) diff --git a/ansible_re-subscribe.yml b/satellite_re_subscribe.yml similarity index 100% rename from ansible_re-subscribe.yml rename to satellite_re_subscribe.yml From 1f37ca11fb7376c87b9ebaeb856beabbf44d32f6 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:13:15 -0400 Subject: [PATCH 113/149] update --- satellite_re_subscribe_old copy.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 satellite_re_subscribe_old copy.yml diff --git a/satellite_re_subscribe_old copy.yml b/satellite_re_subscribe_old copy.yml new file mode 100644 index 0000000..0a7e7ae --- /dev/null +++ b/satellite_re_subscribe_old copy.yml @@ -0,0 +1,29 @@ +--- +- hosts: all + become: yes + vars_files: + - group_vars/satellite.yml + - group_vars/secrets.yml + gather_facts: yes + + tasks: + # create dynamic groups to define variables + - group_by: + key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + - set_fact: + ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + + - name: ":::: Get repos for host ::::" + include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml + + - name: ":::: Unregister host ::::" + include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + vars: + satellite: "{{ groups['old_satellite'][0] }}" + + - name: ":::: Register host ::::" + include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + vars: + satellite: "{{ groups['satellite'][0] }}" + activationkey: "{{ groups[ak] }}" From 3f4dec2880ad5a44b71a8792e7d506eb80e9d5be Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:14:56 -0400 Subject: [PATCH 114/149] update --- .../tasks/client_get_enable_repos.yml | 1 + satellite_re_subscribe.yml | 10 ++-- satellite_re_subscribe_old copy.yml | 57 +++++++++++++------ 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 8ff6c7e..4718497 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -4,4 +4,5 @@ - name: Clean old subscription-manager data shell: cmd: subscription-manager repos --list-enabled + register: enable_repos diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 0a7e7ae..84c7606 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -7,12 +7,12 @@ gather_facts: yes tasks: - # create dynamic groups to define variables - - group_by: - key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" +# create dynamic groups to define variables +# - group_by: +# key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - - set_fact: - ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" +# - set_fact: +# ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - name: ":::: Get repos for host ::::" include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml diff --git a/satellite_re_subscribe_old copy.yml b/satellite_re_subscribe_old copy.yml index 0a7e7ae..adaf2c1 100644 --- a/satellite_re_subscribe_old copy.yml +++ b/satellite_re_subscribe_old copy.yml @@ -7,23 +7,46 @@ gather_facts: yes tasks: - # create dynamic groups to define variables - - group_by: - key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + - name: '{{ company }} :::: {{ policy }} :::: API procedure - Generating Host Registration Command' + ansible.builtin.uri: + url: "{{ satellite_url }}/api/registration_commands" + user: "{{ user_registration }}" + password: "{{ passwd_registration }}" + force_basic_auth: yes + return_content: yes + method: POST + body_format: json + headers: + Content-Type: application/json + body: '{ "registration_command": { "activation_keys": ["{{ rhsm_activation_key }}"] }}' + validate_certs: no + register: host_registration - - set_fact: - ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + - name: '{{ company }} :::: {{ policy }} :::: Get CA file' + ansible.builtin.get_url: + url: "{{ satellite_url }}/pub/katello-server-ca.crt" + dest: /etc/pki/ca-trust/source/anchors/ + validate_certs: no - - name: ":::: Get repos for host ::::" - include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml + - name: '{{ company }} :::: {{ policy }} :::: update-ca-trust enable' + ansible.builtin.command: + cmd: update-ca-trust enable - - name: ":::: Unregister host ::::" - include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml - vars: - satellite: "{{ groups['old_satellite'][0] }}" - - - name: ":::: Register host ::::" - include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml - vars: - satellite: "{{ groups['satellite'][0] }}" - activationkey: "{{ groups[ak] }}" + - name: '{{ company }} :::: {{ policy }} :::: update-ca-trust ' + ansible.builtin.command: + cmd: update-ca-trust + + - name: '{{ company }} :::: {{ policy }} :::: Registering server' + ansible.builtin.shell: + cmd: "{{ host_registration.json.registration_command }}" + register: out + + - name: Notify Errors + ansible.builtin.debug: + var: out.stderr_lines + when: out.stderr_lines | length > 0 + + - name: Notify Stdout + ansible.builtin.debug: + var: out.stdout_lines + when: out.rc == 0 From 01cdfc51eb92103e52a6b4b1a3090bec8c7526f7 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:17:23 -0400 Subject: [PATCH 115/149] update --- group_vars/inventorycontent.yml | 7 +++++++ satellite_re_subscribe.yml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/group_vars/inventorycontent.yml b/group_vars/inventorycontent.yml index eea0fc6..4c3b7d3 100644 --- a/group_vars/inventorycontent.yml +++ b/group_vars/inventorycontent.yml @@ -1 +1,8 @@ +[servers] aap.lnx.demo.rd organization=RD activationkey=aap_ak + +[satellite] +rhs.lnx.demo.rd + +[old_satellite] +rhs.lnx.demo.rd diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 84c7606..c822239 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -1,5 +1,5 @@ --- -- hosts: all +- hosts: servers become: yes vars_files: - group_vars/satellite.yml From bd00aa51aeaba46b82ebba5a3c0149c4c7b00afb Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:19:12 -0400 Subject: [PATCH 116/149] update --- group_vars/inventorycontent.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/group_vars/inventorycontent.yml b/group_vars/inventorycontent.yml index 4c3b7d3..72ed24f 100644 --- a/group_vars/inventorycontent.yml +++ b/group_vars/inventorycontent.yml @@ -5,4 +5,4 @@ aap.lnx.demo.rd organization=RD activationkey=aap_ak rhs.lnx.demo.rd [old_satellite] -rhs.lnx.demo.rd +srv1.lnx.demo.rd \ No newline at end of file From f36394e4d97181c9a5114b3dfd2fb6f89dfef538 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:27:39 -0400 Subject: [PATCH 117/149] update --- group_vars/inventorycontent.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/group_vars/inventorycontent.yml b/group_vars/inventorycontent.yml index 72ed24f..b088f4f 100644 --- a/group_vars/inventorycontent.yml +++ b/group_vars/inventorycontent.yml @@ -1,5 +1,5 @@ [servers] -aap.lnx.demo.rd organization=RD activationkey=aap_ak +srv1.lnx.demo.rd organization=RD activationkey=aap_ak [satellite] rhs.lnx.demo.rd From 6892a640d75074304b97194df656c531b79337cb Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:30:09 -0400 Subject: [PATCH 118/149] update --- .../tasks/client_get_enable_repos.yml | 3 +++ satellite_re_subscribe.yml | 18 +++++++++--------- ... copy.yml => satellite_re_subscribe_new.yml | 0 3 files changed, 12 insertions(+), 9 deletions(-) rename satellite_re_subscribe_old copy.yml => satellite_re_subscribe_new.yml (100%) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 4718497..18ffe22 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -6,3 +6,6 @@ cmd: subscription-manager repos --list-enabled register: enable_repos +- debug: + msg: "{{ enable_repos..stdout.split('\n') | lower }}" + diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index c822239..18bb1d7 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -17,13 +17,13 @@ - name: ":::: Get repos for host ::::" include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml - - name: ":::: Unregister host ::::" - include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml - vars: - satellite: "{{ groups['old_satellite'][0] }}" +# - name: ":::: Unregister host ::::" +# include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml +# vars: +# satellite: "{{ groups['old_satellite'][0] }}" - - name: ":::: Register host ::::" - include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml - vars: - satellite: "{{ groups['satellite'][0] }}" - activationkey: "{{ groups[ak] }}" +# - name: ":::: Register host ::::" +# include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml +# vars: +# satellite: "{{ groups['satellite'][0] }}" +# activationkey: "{{ groups[ak] }}" diff --git a/satellite_re_subscribe_old copy.yml b/satellite_re_subscribe_new.yml similarity index 100% rename from satellite_re_subscribe_old copy.yml rename to satellite_re_subscribe_new.yml From 0ccd8395d5d2599dc54cdedacd689bec761eefd3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:32:10 -0400 Subject: [PATCH 119/149] update --- group_vars/secrets.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/group_vars/secrets.yml b/group_vars/secrets.yml index c4b3eae..b0d76f5 100644 --- a/group_vars/secrets.yml +++ b/group_vars/secrets.yml @@ -12,6 +12,7 @@ sat_admin_password: "Iaz6USksOy" ansible_connection: ssh ansible_user: redhat ansible_ssh_pass: redhat +ansible_sudo_pass: redhat # This is only needed if using a custom SSL certificate #openssl_passphrase: "PASSWORD-TO-USE-FOR-OPENSSL-ENCRYPTION-OF-PRIVATE-KEY" From 3ec56cee541958fdcf2ef05323e07f6f2ebd5b7a Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:50:31 -0400 Subject: [PATCH 120/149] update --- .../tasks/client_get_enable_repos.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 18ffe22..3d0c122 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -1,11 +1,16 @@ --- # tasks file for satellite-clients -- name: Clean old subscription-manager data +- name: Get current subscription repositories shell: - cmd: subscription-manager repos --list-enabled + - cmd: subscription-manager repos --list-enabled | grep -i 'Repo ID' + register: enable_repos_id + +- name: Get current subscription repositories + shell: + cmd: echo "{{ enable_repos.stdout }}" | awk -F '"' '{print $2}' register: enable_repos - debug: - msg: "{{ enable_repos..stdout.split('\n') | lower }}" + msg: "{{ enable_repos.stdout.split('\n') | lower }}" From daacd86d5f42b39ca3c361bb87422196e8a30cb3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:51:16 -0400 Subject: [PATCH 121/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 18bb1d7..6b1ea55 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -4,7 +4,7 @@ vars_files: - group_vars/satellite.yml - group_vars/secrets.yml - gather_facts: yes + gather_facts: no tasks: # create dynamic groups to define variables From 05de094f79e857c45ab0bcbddd242409d3962315 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:52:10 -0400 Subject: [PATCH 122/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 3d0c122..6045abc 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -3,7 +3,7 @@ - name: Get current subscription repositories shell: - - cmd: subscription-manager repos --list-enabled | grep -i 'Repo ID' + cmd: subscription-manager repos --list-enabled | grep -i 'Repo ID' register: enable_repos_id - name: Get current subscription repositories From e25a8749d5165b99cc6614432a19a47acf3657d6 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:53:55 -0400 Subject: [PATCH 123/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 6045abc..6150bba 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -8,7 +8,7 @@ - name: Get current subscription repositories shell: - cmd: echo "{{ enable_repos.stdout }}" | awk -F '"' '{print $2}' + cmd: echo "{{ enable_repos.stdout_lines }}" | awk -F '"' '{print $2}' register: enable_repos - debug: From 99eab72e541bd6c27c7326fa687f801cccc0a5be Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 01:54:44 -0400 Subject: [PATCH 124/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 6150bba..8e46caa 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -8,7 +8,7 @@ - name: Get current subscription repositories shell: - cmd: echo "{{ enable_repos.stdout_lines }}" | awk -F '"' '{print $2}' + cmd: echo "{{ enable_repos_id.stdout_lines }}" | awk -F '"' '{print $2}' register: enable_repos - debug: From 890fc0c1d6d40872bc0639bb312d09a543e66ee4 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:06:12 -0400 Subject: [PATCH 125/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 8e46caa..52f764b 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -6,10 +6,8 @@ cmd: subscription-manager repos --list-enabled | grep -i 'Repo ID' register: enable_repos_id -- name: Get current subscription repositories - shell: - cmd: echo "{{ enable_repos_id.stdout_lines }}" | awk -F '"' '{print $2}' - register: enable_repos +- set_fact: + enable_repos: "{{ enable_repos.stdout | regex_replace('Repo ID', '') }}" - debug: msg: "{{ enable_repos.stdout.split('\n') | lower }}" From bab0af45219c80a214de27ce5c86970f5b6eb78e Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:06:52 -0400 Subject: [PATCH 126/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 52f764b..d42d498 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -7,7 +7,7 @@ register: enable_repos_id - set_fact: - enable_repos: "{{ enable_repos.stdout | regex_replace('Repo ID', '') }}" + enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID', '') }}" - debug: msg: "{{ enable_repos.stdout.split('\n') | lower }}" From e39a1a6193dc62e45875a1770b18bd4bbcf713af Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:08:16 -0400 Subject: [PATCH 127/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index d42d498..7671a33 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -9,6 +9,6 @@ - set_fact: enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID', '') }}" -- debug: - msg: "{{ enable_repos.stdout.split('\n') | lower }}" +- set_fact: + enable_repos_list: "{{ enable_repos.split('\n') | lower }}" From dd788e817325c7bca83f1a8faccd36929dda76d9 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:17:40 -0400 Subject: [PATCH 128/149] update --- .../tasks/client_get_enable_repos.yml | 2 +- satellite_re_subscribe.yml | 36 +++++++++++-------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index 7671a33..e8cf9f0 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -7,7 +7,7 @@ register: enable_repos_id - set_fact: - enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID', '') }}" + enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID: ', '') }}" - set_fact: enable_repos_list: "{{ enable_repos.split('\n') | lower }}" diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 6b1ea55..4679c3a 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -8,22 +8,30 @@ tasks: # create dynamic groups to define variables -# - group_by: -# key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - -# - set_fact: -# ak: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" + - group_by: + key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - name: ":::: Get repos for host ::::" include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml + + - name: Copy a new "ntp.conf" file into place, backing up the original if it differs from the copied version + ansible.builtin.copy: + src: /redhat.repo/redhat.repo + dest: /redhat.repo/redhat.repo."{{ ansible_date_time.date }}" + backup: yes -# - name: ":::: Unregister host ::::" -# include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml -# vars: -# satellite: "{{ groups['old_satellite'][0] }}" + - name: ":::: Unregister host ::::" + include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + vars: + satellite: "{{ groups['old_satellite'][0] }}" -# - name: ":::: Register host ::::" -# include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml -# vars: -# satellite: "{{ groups['satellite'][0] }}" -# activationkey: "{{ groups[ak] }}" + - name: ":::: Register host ::::" + include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml + vars: + satellite: "{{ groups['satellite'][0] }}" + activationkey: "{{ groups[ak] }}" + + - name: ":::: Enable repos ::::" + community.general.rhsm_repository: + name: "{{ enable_repos_list }}" + state: enabled From f0a37ecfe929b243c76f89b693390eba1fc4de24 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:20:57 -0400 Subject: [PATCH 129/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 4679c3a..80cd969 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -32,6 +32,6 @@ activationkey: "{{ groups[ak] }}" - name: ":::: Enable repos ::::" - community.general.rhsm_repository: + rhsm_repository: name: "{{ enable_repos_list }}" state: enabled From 7dc05778788eab59d4cf4a6a77e17ed18980a56b Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:27:09 -0400 Subject: [PATCH 130/149] update --- group_vars/inventorycontent.yml | 2 +- .../satellite-clients/tasks/client_enable_repo.yml | 9 +++++++++ .../tasks/client_subscribe_by_act_key.yml | 2 +- satellite_re_subscribe.yml | 13 ++++++++----- 4 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 roles/satellite-clients/tasks/client_enable_repo.yml diff --git a/group_vars/inventorycontent.yml b/group_vars/inventorycontent.yml index b088f4f..4a9e4e6 100644 --- a/group_vars/inventorycontent.yml +++ b/group_vars/inventorycontent.yml @@ -1,5 +1,5 @@ [servers] -srv1.lnx.demo.rd organization=RD activationkey=aap_ak +srv1.lnx.demo.rd organization=RD activationkey=aap_ak [satellite] rhs.lnx.demo.rd diff --git a/roles/satellite-clients/tasks/client_enable_repo.yml b/roles/satellite-clients/tasks/client_enable_repo.yml new file mode 100644 index 0000000..706b64c --- /dev/null +++ b/roles/satellite-clients/tasks/client_enable_repo.yml @@ -0,0 +1,9 @@ +--- +# tasks file for satellite-clients + +- name: Get current subscription repositories + shell: + cmd: subscription-manager repos --enable="{{ repo }}" + register: enable_repo + + diff --git a/roles/satellite-clients/tasks/client_subscribe_by_act_key.yml b/roles/satellite-clients/tasks/client_subscribe_by_act_key.yml index 0eec5ff..cd2ed84 100644 --- a/roles/satellite-clients/tasks/client_subscribe_by_act_key.yml +++ b/roles/satellite-clients/tasks/client_subscribe_by_act_key.yml @@ -5,7 +5,7 @@ shell: "/usr/bin/yum localinstall -e 0 -y http://{{ groups['satellite'][0] }}/pub/katello-ca-consumer-latest.noarch.rpm" - name: Subscribe to Satellite - shell: "/usr/bin/subscription-manager register --org={{ org }} --activationkey={{ activationkey }}" + shell: "/usr/bin/subscription-manager register --org={{ organization }} --activationkey={{ activationkey }}" register: subscription_result # ignore_errors: True diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 80cd969..487ea17 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -29,9 +29,12 @@ include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml vars: satellite: "{{ groups['satellite'][0] }}" - activationkey: "{{ groups[ak] }}" - - name: ":::: Enable repos ::::" - rhsm_repository: - name: "{{ enable_repos_list }}" - state: enabled + - name: ":::: Register repos ::::" + include_tasks: ./roles/satellite-clients/tasks/client_enable_repo.yml + vars: + repo: "{{ item }}" + with_items: "{{ enable_repos_list }}" + + + From f9361b18e419584d4e3d855a3ed97f75c1b4a8fb Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:28:54 -0400 Subject: [PATCH 131/149] update --- satellite_re_subscribe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 487ea17..ca18f13 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -4,7 +4,7 @@ vars_files: - group_vars/satellite.yml - group_vars/secrets.yml - gather_facts: no + gather_facts: yes tasks: # create dynamic groups to define variables From 22a83f31dad86331e217296d90770da9a9c1415a Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:30:41 -0400 Subject: [PATCH 132/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index e8cf9f0..f057bca 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -7,7 +7,7 @@ register: enable_repos_id - set_fact: - enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID: ', '') }}" + enable_repos: "{{ enable_repos_id.stdout_lines | regex_replace('Repo ID: ', '') }}" - set_fact: enable_repos_list: "{{ enable_repos.split('\n') | lower }}" From 93f89bc380dedfdbe4b597e0b474e33a7cadedd7 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:33:13 -0400 Subject: [PATCH 133/149] update --- satellite_re_subscribe.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index ca18f13..b1b94c6 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -8,8 +8,8 @@ tasks: # create dynamic groups to define variables - - group_by: - key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" +# - group_by: +# key: "{{ ansible_distribution }}-{{ ansible_distribution_version | truncate(1, True, '') }}" - name: ":::: Get repos for host ::::" include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml From faaa10c5f6b42f47cf6d1a6cb34ef98ff9e5d550 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:36:26 -0400 Subject: [PATCH 134/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index f057bca..e8cf9f0 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -7,7 +7,7 @@ register: enable_repos_id - set_fact: - enable_repos: "{{ enable_repos_id.stdout_lines | regex_replace('Repo ID: ', '') }}" + enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID: ', '') }}" - set_fact: enable_repos_list: "{{ enable_repos.split('\n') | lower }}" From 73935c51e0760aee9595d055e760c33f48be77f1 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:41:11 -0400 Subject: [PATCH 135/149] update --- satellite_re_subscribe.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index b1b94c6..079e0d6 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -17,8 +17,10 @@ - name: Copy a new "ntp.conf" file into place, backing up the original if it differs from the copied version ansible.builtin.copy: src: /redhat.repo/redhat.repo - dest: /redhat.repo/redhat.repo."{{ ansible_date_time.date }}" + dest: /redhat.repo/redhat.repo."{{ date }}" backup: yes + vars: + date: "{{ ansible_date_time.date }}" - name: ":::: Unregister host ::::" include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml From 97b4ef28e1e1331cde98a4a07a9d9b38cdfbb1a6 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:43:50 -0400 Subject: [PATCH 136/149] update --- satellite_re_subscribe.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 079e0d6..597d54c 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -16,11 +16,9 @@ - name: Copy a new "ntp.conf" file into place, backing up the original if it differs from the copied version ansible.builtin.copy: - src: /redhat.repo/redhat.repo - dest: /redhat.repo/redhat.repo."{{ date }}" + src: "/redhat.repo/redhat.repo" + dest: "/redhat.repo/redhat.repo.{{ ansible_date_time.date }}" backup: yes - vars: - date: "{{ ansible_date_time.date }}" - name: ":::: Unregister host ::::" include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml From ea764665cf13390e46b4cd2d57eeb9c9fe8b286e Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:45:57 -0400 Subject: [PATCH 137/149] update --- satellite_re_subscribe.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 597d54c..393b3d3 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -15,10 +15,11 @@ include_tasks: roles/satellite-clients/tasks/client_get_enable_repos.yml - name: Copy a new "ntp.conf" file into place, backing up the original if it differs from the copied version - ansible.builtin.copy: + copy: src: "/redhat.repo/redhat.repo" dest: "/redhat.repo/redhat.repo.{{ ansible_date_time.date }}" backup: yes + remote_src: yes - name: ":::: Unregister host ::::" include_tasks: ./roles/satellite-clients/tasks/client_unsubscribe.yml From 16b17547843b78c4b17691d2d5eaefa22876ab0d Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:47:46 -0400 Subject: [PATCH 138/149] update --- satellite_re_subscribe.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/satellite_re_subscribe.yml b/satellite_re_subscribe.yml index 393b3d3..4d271ed 100644 --- a/satellite_re_subscribe.yml +++ b/satellite_re_subscribe.yml @@ -16,8 +16,8 @@ - name: Copy a new "ntp.conf" file into place, backing up the original if it differs from the copied version copy: - src: "/redhat.repo/redhat.repo" - dest: "/redhat.repo/redhat.repo.{{ ansible_date_time.date }}" + src: "/etc/yum.repos.d/redhat.repo" + dest: "/etc/yum.repos.d/redhat.repo.{{ ansible_date_time.date }}" backup: yes remote_src: yes From c586d3b6e66a3995dc5455a1b22d14a8580fc5ff Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:48:56 -0400 Subject: [PATCH 139/149] update --- roles/satellite-clients/tasks/client_enable_repo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-clients/tasks/client_enable_repo.yml b/roles/satellite-clients/tasks/client_enable_repo.yml index 706b64c..ff58614 100644 --- a/roles/satellite-clients/tasks/client_enable_repo.yml +++ b/roles/satellite-clients/tasks/client_enable_repo.yml @@ -3,7 +3,7 @@ - name: Get current subscription repositories shell: - cmd: subscription-manager repos --enable="{{ repo }}" + cmd: "subscription-manager repos --enable={{ repo }}" register: enable_repo From 072957e91baf6856508f642ff46c8a43942d91e2 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 02:56:12 -0400 Subject: [PATCH 140/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index e8cf9f0..f9d7081 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -9,6 +9,9 @@ - set_fact: enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID: ', '') }}" +- set_fact: + enable_repos: "{{ enable_repos_id.stdout | regex_replace(' ', '') }}" + - set_fact: enable_repos_list: "{{ enable_repos.split('\n') | lower }}" From d3cec85601f167bb7ba26fd697ab6c327800cbc9 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 10:10:08 -0400 Subject: [PATCH 141/149] update --- ansible-datellite.tar | Bin 0 -> 307200 bytes create_inventory.yml | 8 ++++---- ec2_content_hosts_cleanup.yml | 6 +++--- ec2_content_hosts_report.yml | 4 ++-- group_vars/inventory_content.yml | 1 - group_vars/inventorycontent.yml | 7 +++---- group_vars/secrets.yml | 1 - roles/satellite-auth/tasks/ldap.yml | 2 +- roles/satellite-auth/tasks/ldap_refresh.yml | 6 +++--- .../tasks/client_get_enable_repos.yml | 4 ++-- .../tasks/get_activation_keys.yml | 2 +- .../tasks/get_nodes_for_key.yml | 2 +- roles/satellite-content/tasks/get_orgs.yml | 2 +- .../templates/ansible_satellite_answers.yml.j2 | 2 +- .../tasks/content_views-auto_update.yml | 6 +++--- .../tasks/content_views-prod_promo.yml | 2 +- .../templates/cli_config.yml.j2 | 2 +- 17 files changed, 27 insertions(+), 30 deletions(-) create mode 100644 ansible-datellite.tar diff --git a/ansible-datellite.tar b/ansible-datellite.tar new file mode 100644 index 0000000000000000000000000000000000000000..0aab3c0db28dc749011dd9105ffa95cd68ff0aff GIT binary patch literal 307200 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

N1^)`%+RIQO6-hY%#uw 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 VAOR8}0TLhq5+DH*Ac3nO@C&%7YPJ9X literal 0 HcmV?d00001 diff --git a/create_inventory.yml b/create_inventory.yml index 7fa0d16..8a010f7 100644 --- a/create_inventory.yml +++ b/create_inventory.yml @@ -19,7 +19,7 @@ with_items: "{{ organizations_list }}" vars: node: - organization: "{{ item|upper }}" + organization: "{{ item }}" - set_fact: inventory_satellite: "{{ inventory_content }}" @@ -50,9 +50,9 @@ include_tasks: ./roles/satellite-content/tasks/create_content_inventory_file.yml vars: inventory_content: "{{ inventory_satellite }}" - ansible_user: "mahernan" - ansible_ssh_pass: "L3b1r4m4r1@#" - ansible_sudo_pass: "L3b1r4m4r1@#" +# ansible_user: "redhat" +# ansible_ssh_pass: "redhat123" +# ansible_sudo_pass: "redhat123" with_items: "{{ inventory_satellite }}" - hosts: localhost diff --git a/ec2_content_hosts_cleanup.yml b/ec2_content_hosts_cleanup.yml index 34c6f2e..8774e28 100644 --- a/ec2_content_hosts_cleanup.yml +++ b/ec2_content_hosts_cleanup.yml @@ -14,7 +14,7 @@ prompt: "Enter your username. (Required, defaults to admin)" default: "admin" private: no - - name: "sat_admin_password" + - name: "rhn_pass" prompt: "Enter your password. (Required)" private: yes - name: "satellite_organization_id" @@ -33,7 +33,7 @@ body_format: json method: GET user: "{{ sat_admin_user }}" - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/katello/api/systems?organization_id={{ satellite_organization_id | default(1) }}&per_page=5000" validate_certs: no @@ -52,7 +52,7 @@ body_format: json method: DELETE user: "{{ sat_admin_user }}" - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201, 204 ] url: "https://{{ satellite_server }}/katello/api/systems/{{ item.uuid }}" validate_certs: no diff --git a/ec2_content_hosts_report.yml b/ec2_content_hosts_report.yml index 439f7fe..a007109 100644 --- a/ec2_content_hosts_report.yml +++ b/ec2_content_hosts_report.yml @@ -14,7 +14,7 @@ prompt: "Enter your username. (Required, defaults to admin)" default: "admin" private: no - - name: "sat_admin_password" + - name: "rhn_pass" prompt: "Enter your password. (Required)" private: yes - name: "satellite_organization_id" @@ -33,7 +33,7 @@ body_format: json method: GET user: "{{ sat_admin_user }}" - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/katello/api/systems?organization_id={{ satellite_organization_id | default(1) }}&per_page=5000" validate_certs: no diff --git a/group_vars/inventory_content.yml b/group_vars/inventory_content.yml index 7fe4a63..e69de29 100644 --- a/group_vars/inventory_content.yml +++ b/group_vars/inventory_content.yml @@ -1 +0,0 @@ -{activationkey: 'aap_ak ', host: aap.lnx.demo.rd, organization: 'RD '} diff --git a/group_vars/inventorycontent.yml b/group_vars/inventorycontent.yml index 4a9e4e6..a2e9640 100644 --- a/group_vars/inventorycontent.yml +++ b/group_vars/inventorycontent.yml @@ -1,8 +1,7 @@ -[servers] -srv1.lnx.demo.rd organization=RD activationkey=aap_ak - [satellite] rhs.lnx.demo.rd [old_satellite] -srv1.lnx.demo.rd \ No newline at end of file +srv1.lnx.demo.rd + +[servers] diff --git a/group_vars/secrets.yml b/group_vars/secrets.yml index b0d76f5..3d80578 100644 --- a/group_vars/secrets.yml +++ b/group_vars/secrets.yml @@ -7,7 +7,6 @@ rhn_user: "admin" rhn_pass: "Iaz6USksOy" rhn_pool_id: "" -sat_admin_password: "Iaz6USksOy" ansible_connection: ssh ansible_user: redhat diff --git a/roles/satellite-auth/tasks/ldap.yml b/roles/satellite-auth/tasks/ldap.yml index 9820ac1..4fcbbd4 100644 --- a/roles/satellite-auth/tasks/ldap.yml +++ b/roles/satellite-auth/tasks/ldap.yml @@ -72,7 +72,7 @@ body_format: json method: GET user: admin - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/api/v2/auth_source_ldaps/{{ item.name }}" validate_certs: no diff --git a/roles/satellite-auth/tasks/ldap_refresh.yml b/roles/satellite-auth/tasks/ldap_refresh.yml index 0ed629f..eb58578 100644 --- a/roles/satellite-auth/tasks/ldap_refresh.yml +++ b/roles/satellite-auth/tasks/ldap_refresh.yml @@ -9,7 +9,7 @@ body_format: json method: GET user: admin - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/api/v2/users" validate_certs: no @@ -24,7 +24,7 @@ body_format: json method: GET user: admin - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/api/v2/usergroups" validate_certs: no @@ -39,7 +39,7 @@ body_format: json method: GET user: admin - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/api/v2/usergroups/{{ item.name }}" validate_certs: no diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index f9d7081..ff25684 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -10,8 +10,8 @@ enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID: ', '') }}" - set_fact: - enable_repos: "{{ enable_repos_id.stdout | regex_replace(' ', '') }}" + enable_repos: "{{ enable_repos_id.stdout | rejectattr('') }}" - set_fact: - enable_repos_list: "{{ enable_repos.split('\n') | lower }}" + enable_repos_list: "{{ enable_repos.split('\n') }}" diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 73c15c2..8c05ad1 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -8,7 +8,7 @@ register: activation_keys - set_fact: - activation_keys_list: "{{ activation_keys.stdout.split('\n') | lower }}" + activation_keys_list: "{{ activation_keys.stdout.split('\n') | rejectattr('')}}" - set_fact: separators: "{{ activation_keys_list[0] }}" diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index 1ddc191..f496de5 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -8,7 +8,7 @@ register: host_for_key - set_fact: - host_for_key_list: "{{ host_for_key.stdout.split('\n') | lower }}" + host_for_key_list: "{{ host_for_key.stdout.split('\n') | rejectattr('') }}" - set_fact: separators: "{{ host_for_key_list[0] }}" diff --git a/roles/satellite-content/tasks/get_orgs.yml b/roles/satellite-content/tasks/get_orgs.yml index e99637c..44b4df2 100644 --- a/roles/satellite-content/tasks/get_orgs.yml +++ b/roles/satellite-content/tasks/get_orgs.yml @@ -8,7 +8,7 @@ register: organizations - set_fact: - organizations_list: "{{ organizations.stdout.split('\n') | lower }}" + organizations_list: "{{ organizations.stdout.split('\n') |rejectattr('') }}" - set_fact: separators: "{{ organizations_list[0] }}" diff --git a/roles/satellite-install/templates/ansible_satellite_answers.yml.j2 b/roles/satellite-install/templates/ansible_satellite_answers.yml.j2 index 46aab32..4d5160f 100644 --- a/roles/satellite-install/templates/ansible_satellite_answers.yml.j2 +++ b/roles/satellite-install/templates/ansible_satellite_answers.yml.j2 @@ -10,7 +10,7 @@ katello: true foreman: admin_username: admin admin_email: "{{ sat_admin_email }}" - admin_password: "{{ sat_admin_password }}" + admin_password: "{{ rhn_pass }}" admin_first_name: "{{ sat_admin_firstname }}" admin_last_name: "{{ sat_admin_lastname }}" organizations_enabled: true diff --git a/roles/satellite-maintenance/tasks/content_views-auto_update.yml b/roles/satellite-maintenance/tasks/content_views-auto_update.yml index d533c81..fa92114 100644 --- a/roles/satellite-maintenance/tasks/content_views-auto_update.yml +++ b/roles/satellite-maintenance/tasks/content_views-auto_update.yml @@ -10,7 +10,7 @@ body_format: json method: GET user: admin - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/katello/api/v2/content_views?per_page=5000" validate_certs: no @@ -25,7 +25,7 @@ body_format: json method: GET user: admin - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/katello/api/v2/content_views/{{ item.id }}/filters" validate_certs: no @@ -66,7 +66,7 @@ body_format: json method: DELETE user: admin - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201, 204 ] url: "https://{{ satellite_server }}/katello/api/v2/content_views/{{ item.viewid }}/filters/{{ item.filterid }}" validate_certs: no diff --git a/roles/satellite-maintenance/tasks/content_views-prod_promo.yml b/roles/satellite-maintenance/tasks/content_views-prod_promo.yml index ddb0f14..a704019 100644 --- a/roles/satellite-maintenance/tasks/content_views-prod_promo.yml +++ b/roles/satellite-maintenance/tasks/content_views-prod_promo.yml @@ -9,7 +9,7 @@ body_format: json method: GET user: admin - password: "{{ sat_admin_password }}" + password: "{{ rhn_pass }}" status_code: [ 200, 201 ] url: "https://{{ satellite_server }}/katello/api/v2/content_views?per_page=5000" validate_certs: no diff --git a/roles/satellite-setup/templates/cli_config.yml.j2 b/roles/satellite-setup/templates/cli_config.yml.j2 index 0004027..8fb0683 100644 --- a/roles/satellite-setup/templates/cli_config.yml.j2 +++ b/roles/satellite-setup/templates/cli_config.yml.j2 @@ -8,7 +8,7 @@ :foreman: :host: "https://localhost/" :username: "admin" - :password: "{{ sat_admin_password }}" + :password: "{{ rhn_pass }}" :request_timeout: -1 :log_dir: '~/.foreman/log' From be68e045bea8b71e27853b2d1f2430fa90916df1 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 10:10:25 -0400 Subject: [PATCH 142/149] update --- ansible-datellite.tar | Bin 307200 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ansible-datellite.tar diff --git a/ansible-datellite.tar b/ansible-datellite.tar deleted file mode 100644 index 0aab3c0db28dc749011dd9105ffa95cd68ff0aff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307200 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

N1^)`%+RIQO6-hY%#uw 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 VAOR8}0TLhq5+DH*Ac3nO@C&%7YPJ9X From bbe81c864c403dff2412b1907c36d3a44845f3b3 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 11:18:54 -0400 Subject: [PATCH 143/149] update --- roles/satellite-clients/tasks/client_get_enable_repos.yml | 2 +- roles/satellite-content/tasks/get_activation_keys.yml | 2 +- roles/satellite-content/tasks/get_nodes_for_key.yml | 2 +- roles/satellite-content/tasks/get_orgs.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/roles/satellite-clients/tasks/client_get_enable_repos.yml b/roles/satellite-clients/tasks/client_get_enable_repos.yml index ff25684..f579115 100644 --- a/roles/satellite-clients/tasks/client_get_enable_repos.yml +++ b/roles/satellite-clients/tasks/client_get_enable_repos.yml @@ -10,7 +10,7 @@ enable_repos: "{{ enable_repos_id.stdout | regex_replace('Repo ID: ', '') }}" - set_fact: - enable_repos: "{{ enable_repos_id.stdout | rejectattr('') }}" + enable_repos: "{{ enable_repos_id.stdout | regex_replace(' ', '') }}" - set_fact: enable_repos_list: "{{ enable_repos.split('\n') }}" diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 8c05ad1..e489460 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -8,7 +8,7 @@ register: activation_keys - set_fact: - activation_keys_list: "{{ activation_keys.stdout.split('\n') | rejectattr('')}}" + activation_keys_list: "{{ activation_keys.stdout.split('\n') | regex_replace(' ', '') }}" - set_fact: separators: "{{ activation_keys_list[0] }}" diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index f496de5..741e1f6 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -8,7 +8,7 @@ register: host_for_key - set_fact: - host_for_key_list: "{{ host_for_key.stdout.split('\n') | rejectattr('') }}" + host_for_key_list: "{{ host_for_key.stdout.split('\n') | regex_replace(' ', '') }}" - set_fact: separators: "{{ host_for_key_list[0] }}" diff --git a/roles/satellite-content/tasks/get_orgs.yml b/roles/satellite-content/tasks/get_orgs.yml index 44b4df2..f7cb143 100644 --- a/roles/satellite-content/tasks/get_orgs.yml +++ b/roles/satellite-content/tasks/get_orgs.yml @@ -8,7 +8,7 @@ register: organizations - set_fact: - organizations_list: "{{ organizations.stdout.split('\n') |rejectattr('') }}" + organizations_list: "{{ organizations.stdout.split('\n') | regex_replace(' ', '')}}" - set_fact: separators: "{{ organizations_list[0] }}" From 533012eb411e3ecb73661b07688f0141d1b25645 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 11:37:28 -0400 Subject: [PATCH 144/149] update --- roles/satellite-content/tasks/get_orgs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/satellite-content/tasks/get_orgs.yml b/roles/satellite-content/tasks/get_orgs.yml index f7cb143..05feb49 100644 --- a/roles/satellite-content/tasks/get_orgs.yml +++ b/roles/satellite-content/tasks/get_orgs.yml @@ -8,7 +8,7 @@ register: organizations - set_fact: - organizations_list: "{{ organizations.stdout.split('\n') | regex_replace(' ', '')}}" + organizations_list: "{{ organizations.stdout.split('\n') | regex_replace('[ \f\t\v]+$', '')}}" - set_fact: separators: "{{ organizations_list[0] }}" From 1cfedec808c12f38d31cc58507eeeb729ecd29c1 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 15:05:53 -0400 Subject: [PATCH 145/149] documentation --- .gitignore | 3 ++- group_vars/inventory | 12 ----------- group_vars/inventory.template | 21 +------------------ group_vars/inventorycontent.yml | 6 +++--- group_vars/satellite.yml | 11 +++++----- .../bash-recreate_subscriptions.sh | 0 .../bash-refresh_subscriptions.sh | 0 7 files changed, 11 insertions(+), 42 deletions(-) delete mode 100644 group_vars/inventory rename bash-recreate_subscriptions.sh => scripts/bash-recreate_subscriptions.sh (100%) rename bash-refresh_subscriptions.sh => scripts/bash-refresh_subscriptions.sh (100%) diff --git a/.gitignore b/.gitignore index 94cddc5..2157f1a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.inv .vagrant -.git \ No newline at end of file +.git +*.pdf \ No newline at end of file diff --git a/group_vars/inventory b/group_vars/inventory deleted file mode 100644 index c5dda34..0000000 --- a/group_vars/inventory +++ /dev/null @@ -1,12 +0,0 @@ -[satellite] -rhs.lnx.demo.rd - -[old_satellite] -rhs.lnx.demo.rd - -[satellite6-server-prod] -#3.144.121.168 -student1.twsfd.example.opentlc.com - -# [localhost] -# localhost ansible_connection=ssh ansible_user=redhat ansible_ssh_pass=L3b1r4m4r1@# \ No newline at end of file diff --git a/group_vars/inventory.template b/group_vars/inventory.template index 913374d..1864469 100644 --- a/group_vars/inventory.template +++ b/group_vars/inventory.template @@ -4,23 +4,4 @@ satellite.example.com [old_satellite] satellite.example.com -[puppet_master] -satellite.example.com - -[puppet_ca] -satellite.example.com - -[satellite6-server-prod] -node.example.com - -[6RedHatEnterpriseServer:vars] -activationkey='server,6epel' - -[6RedHatEnterpriseWorkstation:vars] -activationkey='workstation,6epel' - -[7RedHatEnterpriseServer:vars] -activationkey='server,7epel' - -[7RedHatEnterpriseWorkstation:vars] -activationkey='workstation,7epel' \ No newline at end of file +[nodes] diff --git a/group_vars/inventorycontent.yml b/group_vars/inventorycontent.yml index a2e9640..1864469 100644 --- a/group_vars/inventorycontent.yml +++ b/group_vars/inventorycontent.yml @@ -1,7 +1,7 @@ [satellite] -rhs.lnx.demo.rd +satellite.example.com [old_satellite] -srv1.lnx.demo.rd +satellite.example.com -[servers] +[nodes] diff --git a/group_vars/satellite.yml b/group_vars/satellite.yml index 7f0db14..ee8abba 100644 --- a/group_vars/satellite.yml +++ b/group_vars/satellite.yml @@ -1,11 +1,10 @@ --- # ansible-satellite group vars - -initial_loc: "MX" -initial_user: "admin" -sat_admin_email: "psehgaft@redhat.com" -sat_admin_firstname: "Admin" -sat_admin_lastname: "RedHat" +initial_loc: "" +initial_user: "" +sat_admin_email: "" +sat_admin_firstname: "" +sat_admin_lastname: "" # Place the file with this name in the roles/satellite-setup/files folder sat_manifest: "manifest.zip" diff --git a/bash-recreate_subscriptions.sh b/scripts/bash-recreate_subscriptions.sh similarity index 100% rename from bash-recreate_subscriptions.sh rename to scripts/bash-recreate_subscriptions.sh diff --git a/bash-refresh_subscriptions.sh b/scripts/bash-refresh_subscriptions.sh similarity index 100% rename from bash-refresh_subscriptions.sh rename to scripts/bash-refresh_subscriptions.sh From e2a6c53384e59a72964251b8e497bd5a39edf977 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 15:06:50 -0400 Subject: [PATCH 146/149] documentation --- README.md | 50 +++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index d5203b0..23b6e26 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Reference [standup.yml](standup.yml), which is the installation playbook, to see ### **ansible-satellite roles:** _The following roles are called by several playbooks to orchestrate tasks on the Satellite server. Please review the playbooks to see how these come together to work._ +1. [create_inventory](#create_inventory) 1. [satellite-auth](#satellite-authentication-satellite-auth) 1. [satellite-content](#satellite-content-satellite-content) 1. [satellite-install](#satellite-installation-satellite-install) @@ -43,29 +44,6 @@ _These scripts are written to aid in refreshing subscriptions on all the hosts, # Roles -## Satellite Authentication (**satellite-auth**) -_This role sets up the Satellite Server with authenticated local users, or ties it into a central LDAP server for authentication._ - -Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-auth/vars/main.yml](roles/satellite-auth/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml). - -```yaml ---- -- hosts: satellite6-server-prod - become: yes - vars_files: - - group_vars/satellite.yml - - group_vars/secrets.yml - gather_facts: yes - # satellite-auth | Define users and assign them roles - - role: satellite-auth - # local_users: yes - # ldap_users: yes - # ldap_refresh: yes -``` - -## Ansible Satellite Transition -This playbook will move nodes registered in one Satellite host to another. *It will not install satellite/katello server for you.* Use this after you have set up a new Satellite server and want to move all your existing nodes from one server to another. - ### Configure Playbook Copy the hosts.template file and fill it out with information for your infrastructure. Add systems to [nodes] for hosts you want tasks to run on. @@ -111,6 +89,32 @@ After the tasks complete you should have new unmanaged hosts in satellite. Edit Once the hosts have been moved you may need to reinstall the katello-agent. Do that with `ansible all -i hosts -m yum -a "state=absent name=katello-agent"` and then `ansible all -i hosts -m yum -a "state=present name=katello-agent"` +## Satellite Authentication (**satellite-auth**) +_This role sets up the Satellite Server with authenticated local users, or ties it into a central LDAP server for authentication._ + +Invoke the role in the following way. Please note the configuration values specified in [roles/satellite-auth/vars/main.yml](roles/satellite-auth/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml). + +```yaml +--- +- hosts: satellite6-server-prod + become: yes + vars_files: + - group_vars/satellite.yml + - group_vars/secrets.yml + gather_facts: yes + # satellite-auth | Define users and assign them roles + - role: satellite-auth + # local_users: yes + # ldap_users: yes + # ldap_refresh: yes +``` + +## Ansible Satellite create inventory (**satellite-inventory**) + +## Ansible Satellite Transition (**satellite-transition**) +This playbook will move nodes registered in one Satellite host to another. *It will not install satellite/katello server for you.* Use this after you have set up a new Satellite server and want to move all your existing nodes from one server to another. + +# ## Satellite Content (**satellite-content**) _This role creates lifecycle environments on the Satellite Server, creates content views and filters them, then sets up activation keys pointing to each, and a release version with wich to activate RHEL systems._ From 39f2fe7f6a1bb448528ae5893ba46c5bec6f6872 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 17:16:11 -0400 Subject: [PATCH 147/149] update documentations --- README.md | 57 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 23b6e26..968e649 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Reference [standup.yml](standup.yml), which is the installation playbook, to see ### **ansible-satellite roles:** _The following roles are called by several playbooks to orchestrate tasks on the Satellite server. Please review the playbooks to see how these come together to work._ -1. [create_inventory](#create_inventory) +1. [satellite-clients](#create-clients-tools-for-register) 1. [satellite-auth](#satellite-authentication-satellite-auth) 1. [satellite-content](#satellite-content-satellite-content) 1. [satellite-install](#satellite-installation-satellite-install) @@ -40,14 +40,13 @@ _These scripts are written to aid in refreshing subscriptions on all the hosts, 1. [bash-refresh_subscriptions.sh](#bash-refresh_subscriptionssh) 1. [bash-recreate_subscriptions.sh](#bash-recreate_subscriptionssh) ---- - -# Roles - ### Configure Playbook -Copy the hosts.template file and fill it out with information for your infrastructure. Add systems to [nodes] for hosts you want tasks to run on. +Copy the inventory.template file and fill it out with information for your infrastructure. Add systems to [nodes] for hosts you want tasks to run on. -```[satellite] +or create a current host inventory on */goup_vars/inventorycontent.yml* + +```inventorycontext.yml +[satellite] satellite.example.com [old_satellite] @@ -59,15 +58,17 @@ satellite.example.com [puppet_ca] satellite.example.com -[nodes] -node1.example.com -node2.example.com - [6RedHatEnterpriseServer:vars] activationkey='server,6epel' [7RedHatEnterpriseServec:vars] activationkey='workstation,6epel' + +[nodes] +node1.example.com activationkey= organization= +node2.example.com activationkey= organization= + + ``` Use activation keys to register the hosts so make sure your activation keys are set up in satellite before running. @@ -77,18 +78,30 @@ Enable the satellite settings create_new_host_when_facts_are_uploaded and create To run on all of your nodes (defined in hosts) make sure you update the activationkey variables (in hosts) and then use. -`ansible-playbook -i inventory satellite-playbook.yaml` +`ansible-playbook -i inventorycontext.yml satellite-playbook.yaml` Add `-k` (ssh) or `-K` (sudo) if you need password prompts. You can also run just the puppet registration tasks with -`ansible-playbook -i inventory satellite-playbook.yaml --tags puppet` +`ansible-playbook -i inventorycontext.yml satellite-playbook.yaml --tags puppet` After the tasks complete you should have new unmanaged hosts in satellite. Edit the host and add any configuration you need (host groups, network, puppet). Unfortunately, I could not find a way to automate those steps yet. Your best bet is probably [hammer](https://github.com/theforeman/hammer-cli). Once the hosts have been moved you may need to reinstall the katello-agent. Do that with `ansible all -i hosts -m yum -a "state=absent name=katello-agent"` and then `ansible all -i hosts -m yum -a "state=present name=katello-agent"` +NOTE: For create a Satellite inventory from de old-satellite in a Satellite migration you need to use: + +`ansible-playbook -i inventorycontext.yml create_inventory.yml` + +For resubscribe nodes in a new satellite based in your inventory context elments + +`ansible-playbook -i inventorycontext.yml satellite_re_subscribe.yml` + +--- + +# Roles + ## Satellite Authentication (**satellite-auth**) _This role sets up the Satellite Server with authenticated local users, or ties it into a central LDAP server for authentication._ @@ -109,12 +122,22 @@ Invoke the role in the following way. Please note the configuration values speci # ldap_refresh: yes ``` -## Ansible Satellite create inventory (**satellite-inventory**) +## Ansible Satellite Clients (**satellite-clients**) +_This role include tools for subscribe and unsubscribe nodes on your satellite. -## Ansible Satellite Transition (**satellite-transition**) -This playbook will move nodes registered in one Satellite host to another. *It will not install satellite/katello server for you.* Use this after you have set up a new Satellite server and want to move all your existing nodes from one server to another. +nvoke the role/tasks in the following way. Please note the configuration values specified in [roles/satellite-content/vars/main.yml](roles/satellite-content/vars/main.yml), [satellite.yml](group_vars/satellite.yml) and [secrets.yml](group_vars/secrets.yml). -# +```yaml +--- +- hosts: satellite6-server-prod + become: yes + vars_files: + - group_vars/satellite.yml + - group_vars/secrets.yml + gather_facts: yes + tasks: + - include_tasks: ./roles/satellite-clients/tasks/[task].yml +``` ## Satellite Content (**satellite-content**) _This role creates lifecycle environments on the Satellite Server, creates content views and filters them, then sets up activation keys pointing to each, and a release version with wich to activate RHEL systems._ From 3f6a1886ae26fa89f541cfdd0876573df5253b85 Mon Sep 17 00:00:00 2001 From: Heber Romero Date: Thu, 4 May 2023 17:22:52 -0400 Subject: [PATCH 148/149] docs --- ansible-datellite.tar | Bin 0 -> 307200 bytes .../tasks/get_activation_keys.yml | 2 +- .../tasks/get_nodes_for_key.yml | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 ansible-datellite.tar diff --git a/ansible-datellite.tar b/ansible-datellite.tar new file mode 100644 index 0000000000000000000000000000000000000000..516a73b92d2ead4be75aab19af145fdc72f9ee75 GIT binary patch literal 307200 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

=OXn8CRVMkX}4dgu~LHA2yb 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 W5P$##AOHafKmY;|fB*#6PT&P-HI Date: Thu, 11 May 2023 09:52:27 -0400 Subject: [PATCH 149/149] documentation ready --- README.md | 7 +++++++ create_inventory.yml | 3 --- group_vars/inventory.template | 1 + .../tasks/create_content_inventory_file.yml | 4 ++-- roles/satellite-content/tasks/get_activation_keys.yml | 2 +- roles/satellite-content/tasks/get_nodes_for_key.yml | 3 ++- roles/satellite-content/tasks/get_nodes_for_keys.yml | 10 ++++++++++ 7 files changed, 23 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 968e649..516fb20 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,14 @@ activationkey='workstation,6epel' node1.example.com activationkey= organization= node2.example.com activationkey= organization= +[satellite] +satellite.example.com + +[old_satellite] +satellite.example.com +#[nodes] +# host.example.com organization=EXAMPLE activationkey=rhel_activation_key" ``` Use activation keys to register the hosts so make sure your activation keys are set up in satellite before running. diff --git a/create_inventory.yml b/create_inventory.yml index 8a010f7..8d5451f 100644 --- a/create_inventory.yml +++ b/create_inventory.yml @@ -50,9 +50,6 @@ include_tasks: ./roles/satellite-content/tasks/create_content_inventory_file.yml vars: inventory_content: "{{ inventory_satellite }}" -# ansible_user: "redhat" -# ansible_ssh_pass: "redhat123" -# ansible_sudo_pass: "redhat123" with_items: "{{ inventory_satellite }}" - hosts: localhost diff --git a/group_vars/inventory.template b/group_vars/inventory.template index 1864469..eaafbb4 100644 --- a/group_vars/inventory.template +++ b/group_vars/inventory.template @@ -5,3 +5,4 @@ satellite.example.com satellite.example.com [nodes] +# host.example.com organization=EXAMPLE activationkey=rhel_activation_key" \ No newline at end of file diff --git a/roles/satellite-content/tasks/create_content_inventory_file.yml b/roles/satellite-content/tasks/create_content_inventory_file.yml index 5f94a09..d67a0b8 100644 --- a/roles/satellite-content/tasks/create_content_inventory_file.yml +++ b/roles/satellite-content/tasks/create_content_inventory_file.yml @@ -3,7 +3,7 @@ - name: create inventory file lineinfile: - path: "{{ path_vars }}/inventorycontent.yml" + path: "{{ path_vars }}/inventorycontent-{{ ansible_date_time.date }}.yml" line: "{{ item.host }} organization={{ item.organization }} activationkey={{ item.activationkey }}" create: yes delegate_to: localhost @@ -12,7 +12,7 @@ - name: create inventory file copy: content: "{{ item | to_yaml }}" - dest: "{{ path_vars }}/inventory_content.yml" + dest: "{{ path_vars }}/inventorycontent-{{ ansible_date_time.date }}.json" delegate_to: localhost connection: local \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_activation_keys.yml b/roles/satellite-content/tasks/get_activation_keys.yml index 8e83cd8..edb0a6c 100644 --- a/roles/satellite-content/tasks/get_activation_keys.yml +++ b/roles/satellite-content/tasks/get_activation_keys.yml @@ -4,7 +4,7 @@ # Get all activation Keys - name: Get list of all activation keys shell: - cmd: 'hammer activation-key list --organization {{ organization }} --fields name' + cmd: 'hammer activation-key list --organization "{{ organization }}" --fields name' register: activation_keys - set_fact: diff --git a/roles/satellite-content/tasks/get_nodes_for_key.yml b/roles/satellite-content/tasks/get_nodes_for_key.yml index ac86721..26d33b0 100644 --- a/roles/satellite-content/tasks/get_nodes_for_key.yml +++ b/roles/satellite-content/tasks/get_nodes_for_key.yml @@ -4,7 +4,7 @@ # Get all activation Keys - name: Get node for specific key shell: - cmd: 'hammer host list --search activation_key={{ activation_key }} --fields name' + cmd: 'hammer host list --search activation_key="{{ activation_key }}" --fields name' register: host_for_key - set_fact: @@ -29,4 +29,5 @@ + \ No newline at end of file diff --git a/roles/satellite-content/tasks/get_nodes_for_keys.yml b/roles/satellite-content/tasks/get_nodes_for_keys.yml index 5f72c8e..a5a58ac 100644 --- a/roles/satellite-content/tasks/get_nodes_for_keys.yml +++ b/roles/satellite-content/tasks/get_nodes_for_keys.yml @@ -18,4 +18,14 @@ host: "{{ item }}" when: host_for_key_list[0].list is defined and ( host_for_key_list[0].list|length>0 ) +- name: create inventory file + lineinfile: + path: "{{ path_vars }}/inventorycontent{{ ansible_date_time.date }}.yml" + line: "{{ item }} organization={{ host_for_key_list[0].org }} activationkey={{ host_for_key_list[0].ak }}" + create: yes + with_items: "{{ host_for_key_list[0].list }}" + when: host_for_key_list[0].list is defined and ( host_for_key_list[0].list|length>0 ) + delegate_to: localhost + connection: local + \ No newline at end of file