Instead of using the web interface Red Hat Satellite 6.0 offers a neat CLI utility called hammer.
In order to use it, first of all we set our default config:
# mkdir ~/.hammer
# chmod 600 ~/.hammer
# cat ~/.hammer/cli_config.yml
:foreman:
:host: 'https://xxx'
:username: 'admin'
:password: 'xxx'
And then we’re ready to hammer!
Create a new organization and user admin into it:
# hammer organization create --name=fite.cat.lab --label=fite.cat.lab
# hammer organization add-user --user=admin --name=fite.cat.lab
And a new location:
# hammer location create --name=Catalonia
# hammer location add-user --name=Catalonia --user=admin
# hammer location add-organization --name=Catalonia --organization=fite.cat.lab
Create a domain:
# hammer domain create --name='fite.cat.lab'
Create a subnet:
# hammer subnet create --domain-ids=1 --gateway='10.1.1.1' --mask='255.255.255.0' --name='10.1.1.0/24' --tftp-id=1 --network='10.1.1.0' --dns-primary='10.1.1.1'
Associate domain/subnet to our organization/location through the web portal:
# hammer organization add-subnet --subnet-id=1 --name='fite.cat.lab'
# hammer organization add-domain --domain-id=1 --name='fite.cat.lab'
Upload our manifest.zip (created in RH Portal) to our org and list our products:
# hammer subscription upload --file manifest.zip --organization=fite.cat.lab
# hammer product list --organization fite.cat.lab
---|---------------------------------|-------------|--------------|--------------|-----------
ID | NAME | DESCRIPTION | ORGANIZATION | REPOSITORIES | SYNC STATE
---|---------------------------------|-------------|--------------|--------------|-----------
8 | Oracle Java for RHEL Server | | fite.cat.lab | 0 | not_synced
9 | Red Hat Enterprise Linux Server | | fite.cat.lab | 0 | not_synced
7 | Red Hat Beta | | fite.cat.lab | 0 | not_synced
---|---------------------------------|-------------|--------------|--------------|-----------
List all repositories included in a previous imported product:
# hammer repository-set list --organization=fite.cat.lab --product 'Red Hat Enterprise Linux Server'
-----|-----------|------------------------------------------------------------------------------------------
ID | TYPE | NAME
-----|-----------|------------------------------------------------------------------------------------------
861 | file | Red Hat Enterprise Linux 5 Server Beta (Source ISOs)
3535 | yum | Red Hat Enterprise Linux 5 Server Beta - Optional Productivity Applications (Debug RPMs)
...
Enable repositories that we need, in my case all RHEL7 related ones:
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server (RPMs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server - Fastrack (RPMs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server - Optional (RPMs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server - Extras (RPMs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server - RH Common (RPMs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server - Optional Fastrack (RPMs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server - Supplementary (RPMs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'RHN Tools for Red Hat Enterprise Linux 7 Server (RPMs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server (ISOs)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Red Hat Enterprise Linux Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server (Kickstart)'
#Â hammer repository-set enable --organization fite.cat.lab --product 'Oracle Java for RHEL Server' --basearch='x86_64' --releasever='7Server' --name 'Red Hat Enterprise Linux 7 Server - Oracle Java (RPMs)'
Then we create a new product for Puppet modules in forge:
# hammer product create --name='Forge' --organization=fite.cat.lab
# hammer repository create --name='Puppet Forge' --organization=fite.cat.lab --product='Forge' --content-type='puppet' --publish-via-http=true --url=https://forge.puppetlabs.com
And finally we create a new product for EPEL packages:
# hammer product create --name='EPEL' --organization=fite.cat.lab
# hammer repository create --name='EPEL 7 - x86_64' --organization=fite.cat.lab --product='EPEL' --content-type='yum' --publish-via-http=true --url=http://dl.fedoraproject.org/pub/epel/7/x86_64/
Then we can sync all repositories that we've enabled with this simple script:
# for i in $(hammer --csv repository list --organization=fite.cat.lab | awk -F, {'print $1'} | grep -vi '^ID'); do hammer repository synchronize --id ${i} --organization=fite.cat.lab --async; done
Create 3 environments DEV->PRE->PROD:
# hammer lifecycle-environment create --name='DEV' --prior='Library' --organization=fite.cat.lab
# hammer lifecycle-environment create --name='PRE' --prior='DEV' --organization=fite.cat.lab
#Â hammer lifecycle-environment create --name='PRO' --prior='PRE' --organization=fite.cat.lab
Create a daily sync plan:
# hammer sync-plan create --interval=daily --name='Daily sync' --organization=fite.cat.lab
# hammer sync-plan list --organization=fite.cat.lab
And associate this plan to our products, it must be done by sync-plan-id, not name otherwise hammer doesn't work:
# hammer product set-sync-plan --sync-plan-id=4 --organization=fite.cat.lab --name='Oracle Java for RHEL Server'
# hammer product set-sync-plan --sync-plan-id=4 --organization=fite.cat.lab --name='Red Hat Enterprise Linux Server'
# hammer product set-sync-plan --sync-plan-id=4 --organization=fite.cat.lab --name='Forge'
# hammer product set-sync-plan --sync-plan-id=4 --organization=fite.cat.lab --name='EPEL'
Create a content view for RHEL 7 server x86_64:
# hammer content-view create --name='rhel-7-server-x86_64-cv' --organization=fite.cat.lab
# for i in $(hammer --csv repository list --organization=fite.cat.lab | awk -F, {'print $1'} | grep -vi '^ID'); do hammer content-view add-repository --name='rhel-7-server-x86_64-cv' --organization=fite.cat.lab --repository-id=${i}; done
Publish this content view to Library:
# hammer content-view publish --name="rhel-7-server-x86_64-cv" --organization=fite.cat.lab --async
Promote this content view to DEV,PRE,PRO (we need to use the IDs or hammer doesn't like it, so let's get them):
# hammer content-view list --organization=fite.cat.lab
----------------|---------------------------|---------------------------|-----------|---------------------------------------
CONTENT VIEW ID | NAME | LABEL | COMPOSITE | REPOSITORY IDS
----------------|---------------------------|---------------------------|-----------|---------------------------------------
3 | rhel-7-server-x86_64-cv | rhel-7-server-x86_64-cv | | 33, 25, 31, 27, 24, 34, 26, 23, 28, 29
...
# hammer lifecycle-environment list --organization=fite.cat.lab
---|---------|--------
ID | NAME | PRIOR
---|---------|--------
2 | Library |
5 | PRO | PRE
4 | PRE | DEV
3 | DEV | Library
---|---------|--------
# hammer content-view version promote --organization=fite.cat.lab --lifecycle-environment=3 --id=3 --async
# hammer content-view version promote --organization=fite.cat.lab --lifecycle-environment=4 --id=3 --async
# hammer content-view version promote --organization=fite.cat.lab --lifecycle-environment=5 --id=3 --async
Create a host collection for RHEL7:
# hammer host-collection create --name='RHEL 7 x86_64' --organization=fite.cat.lab
Create an activation key for our environments:
# hammer activation-key create --name='rhel-7-server-x86_64-ak-dev' --organization=fite.cat.lab --content-view='rhel-7-server-x86_64-cv' --lifecycle-environment='DEV'
# hammer activation-key create --name='rhel-7-server-x86_64-ak-pre' --organization=fite.cat.lab --content-view='rhel-7-server-x86_64-cv' --lifecycle-environment='PRE'
# hammer activation-key create --name='rhel-7-server-x86_64-ak-pro' --organization=fite.cat.lab --content-view='rhel-7-server-x86_64-cv' --lifecycle-environment='PRO'
Associate each activation key to our host collection:
# hammer activation-key add-host-collection --name='rhel-7-server-x86_64-ak-dev' --host-collection='RHEL 7 x86_64' --organization=fite.cat.lab
# hammer activation-key add-host-collection --name='rhel-7-server-x86_64-ak-pre' --host-collection='RHEL 7 x86_64' --organization=fite.cat.lab
# hammer activation-key add-host-collection --name='rhel-7-server-x86_64-ak-pro' --host-collection='RHEL 7 x86_64' --organization=fite.cat.lab
And we add all subscriptions that we have available to our keys:
# for i in $(hammer --csv activation-key list --organization=fite.cat.lab | awk -F, {'print $1'} | grep -vi '^ID'); do for j in $(hammer --csv subscription list --organization=fite.cat.lab | awk -F, {'print $8'} | grep -vi '^ID'); do hammer activation-key add-subscription --id ${i} --subscription-id ${j}; done; done
Associate a partition table to OS:
# PARTID=$(hammer --csv partition-table list | grep 'Kickstart default' | awk -F, {'print $1'})
# for i in $(hammer --csv os list | awk -F, {'print $1'} | grep -vi '^ID')
do
hammer partition-table add-operatingsystem --id="${PARTID}" --operatingsystem-id="${i}"
done
Associate kickstart PXE template to OS:
# PXEID=$(hammer --csv template list | grep 'Kickstart default PXELinux' | awk -F, {'print $1'})
# SATID=$(hammer --csv template list | grep 'Satellite Kickstart Default' | awk -F, {'print $1'})
# for i in $(hammer --csv os list | awk -F, {'print $1'} | grep -vi '^ID')
do
hammer template add-operatingsystem --id="${PXEID}" --operatingsystem-id="${i}"
hammer os set-default-template --id="${i}" --config-template-id="${PXEID}"
hammer os add-config-template --id="${i}" --config-template-id="${SATID}"
hammer os set-default-template --id="${i}" --config-template-id="${SATID}"
done
And we create a RHEL7 hostgroup:
# MEDID=$(hammer --csv medium list | grep 'Red_Hat_7_Server_Kickstart_x86_64_7Server' | awk -F, {'print $1'})
# ENVID=$(hammer --csv environment list | grep rhel_7_server_x86_64 | grep -i dev | grep -v epel | awk -F, {'print $1'})
# PARTID=$(hammer --csv partition-table list | grep 'Kickstart default' | awk -F, {'print $1'})
# OSID=$(hammer --csv os list | grep 'RedHat 7.0' | awk -F, {'print $1'})
# CAID=1
# PROXYID=1
# hammer hostgroup create --architecture="x86_64" --domain="${DOM}" --environment-id="${ENVID}" --medium-id="${MEDID}" --name="${HGRHEL6DEV}" --subnet="${NETNAME}" --ptable-id="${PARTID}" --operatingsystem-id="${OSID}" --puppet-ca-proxy-id="${CAID}" --puppet-proxy-id="${PROXYID}"
And finally creating a new host via PXE should work...or not 🙂
Later on I'll try to post a complete script via GitHub as copy/pasting this is a nightmare, stay tuned!