API Guide Red Hat Satellite 6.15 Develop custom applications or integrations by using the Satellite REST API Red Hat Satellite Documentation Team satellite-doc-list@redhat.com

Commands:
HTTP_VERB API_ROUTE
curl --request HTTP_VERB \ 1 --insecure \ 2 --user sat_username:sat_password \ 3 --data @ file .json \ 4 --header "Accept:application/json" \ 5 --header "Content-Type:application/json" \ 6 --output file 7 API_ROUTE \ 8 | python -m json.tool 9
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/hosts | python -m json.tool
{ "total": 2, "subtotal": 2, "page": 1, "per_page": 20, "search": null, "sort": { "by": null, "order": null }, "results": output truncated
organization_id: 1
name: TestKey
description: Just for testing
curl --header "Accept:application/json" --header "Content-Type:application/json" --request POST --user sat_username:sat_password --insecure --data @activation-key.json https:// satellite.example.com /katello/api/activation_keys | python -m json.tool
{ "id": 2, "name": "TestKey", "description": "Just for testing", "unlimited_hosts": true, "auto_attach": true, "content_view_id": null, "environment_id": null, "usage_count": 0, "user_id": 3, "max_hosts": null, "release_version": null, "service_level": null, "content_overrides": [ ], "organization": { "name": "Default Organization", "label": "Default_Organization", "id": 1 }, "created_at": "2017-02-16 12:37:47 UTC", "updated_at": "2017-02-16 12:37:48 UTC", "content_view": null, "environment": null, "products": null, "host_collections": [ ], "permissions": { "view_activation_keys": true, "edit_activation_keys": true, "destroy_activation_keys": true } }
organization_id: 1
name: TestKey
description: Just for testing
max_hosts: 10
curl --header "Accept:application/json" --header "Content-Type:application/json" --request PUT --user sat_username:sat_password --insecure --data @activation-key.json https:// satellite.example.com /katello/api/activation_keys/2 | python -m json.tool
{ "id": 2, "name": "TestKey", "description": "Just for testing", "unlimited_hosts": false, "auto_attach": true, "content_view_id": null, "environment_id": null, "usage_count": 0, "user_id": 3, "max_hosts": 10, "release_version": null, "service_level": null, "content_overrides": [ ], "organization": { "name": "Default Organization", "label": "Default_Organization", "id": 1 }, "created_at": "2017-02-16 12:37:47 UTC", "updated_at": "2017-02-16 12:46:17 UTC", "content_view": null, "environment": null, "products": null, "host_collections": [ ], "permissions": { "view_activation_keys": true, "edit_activation_keys": true, "destroy_activation_keys": true } }
curl --header "Accept:application/json" --header "Content-Type:application/json" --request DELETE --user sat_username:sat_password --insecure https:// satellite.example.com /katello/api/activation_keys/2 | python -m json.tool
output omitted "started_at": "2017-02-16 12:58:17 UTC", "ended_at": "2017-02-16 12:58:18 UTC", "state": "stopped", "result": "success", "progress": 1.0, "input": { "activation_key": { "id": 2, "name": "TestKey" output truncated
Nested_Resource . Attribute_Name
Resource [ Nested_Resource_attributes ][ Attribute_Name_id ]
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/domains/23 | python -m json.tool
id: 23
name: qa.lab.example.com
fullname: QA
dns_id: 10
created_at: 2013-08-13T09:02:31Z
updated_at: 2013-08-13T09:02:31Z
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/domains | python -m json.tool
{ "total": 3, "subtotal": 3, "page": 1, "per_page": 20, "search": null, "sort": { "by": null, "order": null }, "results": [ { "id": 23, "name": "qa.lab.example.com", "fullname": "QA", "dns_id": 10, "created_at": "2013-08-13T09:02:31Z", "updated_at": "2013-08-13T09:02:31Z" }, { "id": 25, "name": "sat.lab.example.com", "fullname": "SATLAB", "dns_id": 8, "created_at": "2013-08-13T08:32:48Z", "updated_at": "2013-08-14T07:04:03Z" }, { "id": 32, "name": "hr.lab.example.com", "fullname": "HR", "dns_id": 8, "created_at": "2013-08-16T08:32:48Z", "updated_at": "2013-08-16T07:04:03Z" } ] }
scp root@ satellite.example.com :/var/www/html/pub/katello-server-ca.crt /etc/pki/ca-trust/source/anchors/ satellite.example.com -katello-server-ca.crt
cp /var/www/html/pub/katello-server-ca.crt /etc/pki/ca-trust/source/anchors/ satellite.example.com -katello-server-ca.crt
update-ca-trust extract
curl --request GET --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts
curl https:// satellite.example.com /api/status --user My_Username : My_Personal_Access_Token
satellite_version: 6.15.0
result: ok
status: 200
version: 3.5.1.10
api_version: 2
curl https:// satellite.example.com /api/status --user My_Username : My_Personal_Access_Token
{ "error": {"message":"Unable to authenticate user My_Username "} }
satellite-installer --full-help | grep oauth
satellite-installer --foreman-oauth-map-users true
--header 'FOREMAN-USER: sat_username ' --header 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key=" secretkey ",oauth_signature_method="hmac-sha1",oauth_timestamp= timestamp ,oauth_signature= signature '
curl 'https:// satellite.example.com /api/architectures' --header 'Content-Type: application/json' --header 'Accept:application/json' --header 'FOREMAN-USER: sat_username ' --header 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key=" secretkey ",oauth_signature_method="hmac-sha1",oauth_timestamp= 1321473112 ,oauth_signature= Il8hR8/ogj/XVuOqMPB9qNjSy6E= '
--header "Accept:application/json" --header "Content-Type:application/json"
--data {"id":44, "smart_class_parameter":{"override":"true", "parameter_type":"json", "default_value":"{\"GRUB_CMDLINE_LINUX\": {\"audit\":\"1\",\"crashkernel\":\"true\"}}"}}
--data @ file .json
json_verify < test_file .json
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/users | python -m json.tool
{ "page": 1, "per_page": 20, "results": [ { "admin": false, "auth_source_id": 1, "auth_source_name": "Internal", "created_at": "2018-09-21 08:59:22 UTC", "default_location": null, "default_organization": null, "description": "", "effective_admin": false, "firstname": "", "id": 5, "last_login_on": "2018-09-21 09:03:25 UTC", "lastname": "", "locale": null, "locations": [], "login": "test", "mail": "example@domain.com", "organizations": [ { "id": 1, "name": "Default Organization" } ], "ssh_keys": [], "timezone": null, "updated_at": "2018-09-21 09:04:45 UTC" }, { "admin": true, "auth_source_id": 1, "auth_source_name": "Internal", "created_at": "2018-09-20 07:09:41 UTC", "default_location": null, "default_organization": { "description": null, "id": 1, "name": "Default Organization", "title": "Default Organization" }, "description": "", "effective_admin": true, "firstname": "Admin", "id": 4, "last_login_on": "2018-12-07 07:31:09 UTC", "lastname": "User", "locale": null, "locations": [ { "id": 2, "name": "Default Location" } ], "login": "admin", "mail": "root@example.com", "organizations": [ { "id": 1, "name": "Default Organization" } ], "ssh_keys": [], "timezone": null, "updated_at": "2018-11-14 08:19:46 UTC" } ], "search": null, "sort": { "by": null, "order": null }, "subtotal": 2, "total": 2 }
curl --header "Accept:application/json" --header "Content-Type:application/json" --request POST --user sat_username:sat_password --insecure --data "{\"firstname\":\" Test Name \",\"mail\":\" test@example.com \",\"login\":\" test_user \",\"password\":\" password123 \",\"auth_source_id\": 1 }" https:// satellite.example.com /api/users | python -m json.tool
curl --header "Accept:application/json" --header "Content-Type:application/json" --request PUT --user sat_username:sat_password --insecure --data "{\"firstname\":\" New Test Name \",\"mail\":\" test@example.com \",\"login\":\" new_test_user \",\"password\":\" password123 \",\"auth_source_id\": 1 }" https:// satellite.example.com /api/users/ 8 | python -m json.tool
#!/usr/bin/ruby require 'rest-client' require 'json' url = 'https://satellite.example.com/api/v2/' katello_url = "#{url}/katello/api/v2/" USDusername = 'admin' USDpassword = 'changeme' org_name = "MyOrg" environments = [ "Development", "Testing", "Production" ] Performs a GET using the passed URL location def get_json(location) response = RestClient::Request.new( :method => :get, :url => location, :user => USDusername, :password => USDpassword, :headers => { :accept => :json, :content_type => :json } ).execute JSON.parse(response.to_str) end Performs a POST and passes the data to the URL location def post_json(location, json_data) response = RestClient::Request.new( :method => :post, :url => location, :user => USDusername, :password => USDpassword, :headers => { :accept => :json, :content_type => :json}, :payload => json_data ).execute JSON.parse(response.to_str) end Creates a hash with ids mapping to names for an array of records def id_name_map(records) records.inject({}) do |map, record| map.update(record['id'] => record['name']) end end Get list of existing organizations orgs = get_json("#{katello_url}/organizations") org_list = id_name_map(orgs['results']) if !org_list.has_value?(org_name) # If our organization is not found, create it puts "Creating organization: \t#{org_name}" org_id = post_json("#{katello_url}/organizations", JSON.generate({"name"=> org_name}))["id"] else # Our organization exists, so let's grab it org_id = org_list.key(org_name) puts "Organization \"#{org_name}\" exists" end Get list of organization's lifecycle environments envs = get_json("#{katello_url}/organizations/#{org_id}/environments") env_list = id_name_map(envs['results']) prior_env_id = env_list.key("Library") Exit the script if at least one life cycle environment already exists environments.each do |e| if env_list.has_value?(e) puts "ERROR: One of the Environments is not unique to organization" exit end end # Create life cycle environments environments.each do |environment| puts "Creating environment: \t#{environment}" prior_env_id = post_json("#{katello_url}/organizations/#{org_id}/environments", JSON.generate({"name" => environment, "organization_id" => org_id, "prior_id" => prior_env_id}))["id"] end
#!/usr/bin/tfm-ruby require 'apipie-bindings' org_name = "MyOrg" environments = [ "Development", "Testing", "Production" ] Create an instance of apipie bindings @api = ApipieBindings::API.new({ :uri => 'https://satellite.example.com/', :username => 'admin', :password => 'changeme', :api_version => 2 }) Performs an API call with default options def call_api(resource_name, action_name, params = {}) http_headers = {} apipie_options = { :skip_validation => true } @api.resource(resource_name).call(action_name, params, http_headers, apipie_options) end Creates a hash with IDs mapping to names for an array of records def id_name_map(records) records.inject({}) do |map, record| map.update(record['id'] => record['name']) end end Get list of existing organizations orgs = call_api(:organizations, :index) org_list = id_name_map(orgs['results']) if !org_list.has_value?(org_name) # If our organization is not found, create it puts "Creating organization: \t#{org_name}" org_id = call_api(:organizations, :create, {'organization' => { :name => org_name }})['id'] else # Our organization exists, so let's grab it org_id = org_list.key(org_name) puts "Organization \"#{org_name}\" exists" end Get list of organization's life cycle environments envs = call_api(:lifecycle_environments, :index, {'organization_id' => org_id}) env_list = id_name_map(envs['results']) prior_env_id = env_list.key("Library") Exit the script if at least one life cycle environment already exists environments.each do |e| if env_list.has_value?(e) puts "ERROR: One of the Environments is not unique to organization" exit end end # Create life cycle environments environments.each do |environment| puts "Creating environment: \t#{environment}" prior_env_id = call_api(:lifecycle_environments, :create, {"name" => environment, "organization_id" => org_id, "prior_id" => prior_env_id })['id'] end
#!/usr/bin/python import json import sys try: import requests except ImportError: print "Please install the python-requests module." sys.exit(-1) URL to your Satellite 6 server URL = "https://satellite.example.com" URL for the API to your deployed Satellite 6 server SAT_API = "%s/katello/api/v2/" % URL Katello-specific API KATELLO_API = "%s/katello/api/" % URL POST_HEADERS = {'content-type': 'application/json'} Default credentials to login to Satellite 6 USERNAME = "admin" PASSWORD = "changeme" Ignore SSL for now SSL_VERIFY = False Name of the organization to be either created or used ORG_NAME = "MyOrg" Name for life cycle environments to be either created or used ENVIRONMENTS = ["Development", "Testing", "Production"] def get_json(location): """ Performs a GET using the passed URL location """ r = requests.get(location, auth=(USERNAME, PASSWORD), verify=SSL_VERIFY) return r.json() def post_json(location, json_data): """ Performs a POST and passes the data to the URL location """ result = requests.post( location, data=json_data, auth=(USERNAME, PASSWORD), verify=SSL_VERIFY, headers=POST_HEADERS) return result.json() def main(): """ Main routine that creates or re-uses an organization and life cycle environments. If life cycle environments already exist, exit out. """ # Check if our organization already exists org = get_json(SAT_API + "organizations/" + ORG_NAME) # If our organization is not found, create it if org.get('error', None): org_id = post_json( SAT_API + "organizations/", json.dumps({"name": ORG_NAME}))["id"] print "Creating organization: \t" + ORG_NAME else: # Our organization exists, so let's grab it org_id = org['id'] print "Organization '%s' exists." % ORG_NAME # Now, let's fetch all available life cycle environments for this org envs = get_json( SAT_API + "organizations/" + str(org_id) + "/environments/") # ... and add them to a dictionary, with respective 'Prior' environment prior_env_id = 0 env_list = {} for env in envs['results']: env_list[env['id']] = env['name'] prior_env_id = env['id'] if env['name'] == "Library" else prior_env_id # Exit the script if at least one life cycle environment already exists if all(environment in env_list.values() for environment in ENVIRONMENTS): print "ERROR: One of the Environments is not unique to organization" sys.exit(-1) # Create life cycle environments for environment in ENVIRONMENTS: new_env_id = post_json( SAT_API + "organizations/" + str(org_id) + "/environments/", json.dumps( { "name": environment, "organization_id": org_id, "prior": prior_env_id} ))["id"] print "Creating environment: \t" + environment prior_env_id = new_env_id if __name__ == "__main__": main()
#!/usr/bin/python import json import sys try: import requests except ImportError: print "Please install the python-requests module." sys.exit(-1) SAT_API = 'https://satellite.example.com/api/v2/' USERNAME = "admin" PASSWORD = "password" SSL_VERIFY = False # Ignore SSL for now def get_json(url): # Performs a GET using the passed URL location r = requests.get(url, auth=(USERNAME, PASSWORD), verify=SSL_VERIFY) return r.json() def get_results(url): jsn = get_json(url) if jsn.get('error'): print "Error: " + jsn['error']['message'] else: if jsn.get('results'): return jsn['results'] elif 'results' not in jsn: return jsn else: print "No results found" return None def display_all_results(url): results = get_results(url) if results: print json.dumps(results, indent=4, sort_keys=True) def display_info_for_hosts(url): hosts = get_results(url) if hosts: for host in hosts: print "ID: %-10d Name: %-30s IP: %-20s OS: %-30s" % (host['id'], host['name'], host['ip'], host['operatingsystem_name']) def main(): host = 'satellite.example.com' print "Displaying all info for host %s ..." % host display_all_results(SAT_API + 'hosts/' + host) print "Displaying all facts for host %s ..." % host display_all_results(SAT_API + 'hosts/%s/facts' % host) host_pattern = 'example' print "Displaying basic info for hosts matching pattern '%s'..." % host_pattern display_info_for_hosts(SAT_API + 'hosts?search=' + host_pattern) environment = 'production' print "Displaying basic info for hosts in environment %s..." % environment display_info_for_hosts(SAT_API + 'hosts?search=environment=' + environment) model = 'RHEV Hypervisor' print "Displaying basic info for hosts with model name %s..." % model display_info_for_hosts(SAT_API + 'hosts?search=model="' + model + '"') if __name__ == "__main__": main()
#!/usr/bin/env python3 import json import sys try: import requests except ImportError: print("Please install the python-requests module.") sys.exit(-1) SAT = "satellite.example.com" URL for the API to your deployed Satellite 6 server SAT_API = f"https://{SAT}/api/" KATELLO_API = f"https://{SAT}/katello/api/v2/" POST_HEADERS = {'content-type': 'application/json'} Default credentials to login to Satellite 6 USERNAME = "admin" PASSWORD = "password" Ignore SSL for now SSL_VERIFY = False #SSL_VERIFY = "./path/to/CA-certificate.crt" # Put the path to your CA certificate here to allow SSL_VERIFY def get_json(url): # Performs a GET using the passed URL location r = requests.get(url, auth=(USERNAME, PASSWORD), verify=SSL_VERIFY) return r.json() def get_results(url): jsn = get_json(url) if jsn.get('error'): print("Error: " + jsn['error']['message']) else: if jsn.get('results'): return jsn['results'] elif 'results' not in jsn: return jsn else: print("No results found") return None def display_all_results(url): results = get_results(url) if results: print(json.dumps(results, indent=4, sort_keys=True)) def display_info_for_hosts(url): hosts = get_results(url) if hosts: print(f"{'ID':10}{'Name':40}{'IP':30}{'Operating System':30}") for host in hosts: print(f"{str(host['id']):10}{host['name']:40}{str(host['ip']):30}{str(host['operatingsystem_name']):30}") def display_info_for_subs(url): subs = get_results(url) if subs: print(f"{'ID':10}{'Name':90}{'Start Date':30}") for sub in subs: print(f"{str(sub['id']):10}{sub['name']:90}{str(sub['start_date']):30}") def main(): host = SAT print(f"Displaying all info for host {host} ...") display_all_results(SAT_API + 'hosts/' + host) print(f"Displaying all facts for host {host} ...") display_all_results(SAT_API + f'hosts/{host}/facts') host_pattern = 'example' print(f"Displaying basic info for hosts matching pattern '{host_pattern}'...") display_info_for_hosts(SAT_API + 'hosts?per_page=1&search=name~' + host_pattern) print(f"Displaying basic info for subscriptions") display_info_for_subs(KATELLO_API + 'subscriptions') environment = 'production' print(f"Displaying basic info for hosts in environment {environment}...") display_info_for_hosts(SAT_API + 'hosts?search=environment=' + environment) if __name__ == "__main__": main()
url = 'https:// satellite.example.com /api/v2/' capsule_url = 'https:// capsule.example.com :8443/api/v2/' katello_url = 'https:// satellite.example.com /katello/api/v2/'
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts | python3 -m json.tool
{ "total" => 2, "subtotal" => 2, "page" => 1, "per_page" => 1000, "search" => nil, "sort" => { "by" => nil, "order" => nil }, "results" => [ }
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts/ satellite.example.com | python -m json.tool
{ "all_puppetclasses": [], "architecture_id": 1, "architecture_name": "x86_64", "build": false, "capabilities": [ "build" ], "certname": " satellite.example.com ", "comment": null, "compute_profile_id": null, }
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts/ satellite.example.com /facts | python -m json.tool
{ "results": { " satellite.example.com ": { "augeasversion": "1.0.0", "bios_release_date": "01/01/2007", "bios_version": "0.5.1", "blockdevice_sr0_size": "1073741312", "facterversion": "1.7.6", }
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts?search=example | python -m json.tool
{ "results": [ { "name": " satellite.example.com ", } ], "search": "example", }
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts?search=environment=production | python -m json.tool
{ "results": [ { "environment_name": "production", "name": " satellite.example.com ", } ], "search": "environment=production", }
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts?search=model=\"RHEV+Hypervisor\" | python -m json.tool
{ "results": [ { "model_id": 1, "model_name": "RHEV Hypervisor", "name": " satellite.example.com ", } ], "search": "model=\"RHEV Hypervisor\"", }
curl --request DELETE --insecure --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts/ host1.example.com | python -m json.tool
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/bootdisk/hosts/ host_ID ?full=true --output image .iso
curl --header "Accept:application/json" --header "Content-Type:application/json" --request GET --user sat_username:sat_password --insecure https:// satellite.example.com /katello/api/organizations/1/environments | python -m json.tool`
output omitted "description": null, "id": 1, "label": "Library", "library": true, "name": "Library", "organization": { "id": 1, "label": "Default_Organization", "name": "Default Organization" }, "permissions": { "destroy_lifecycle_environments": false, "edit_lifecycle_environments": true, "promote_or_remove_content_views_to_environments": true, "view_lifecycle_environments": true }, "prior": null, "successor": null, output truncated
curl --request GET --user sat_username:sat_password --insecure https:// satellite.example.com /katello/api/environments/1 | python -m json.tool
output omitted "id": 1, "label": "Library", output omitted "prior": null, "successor": null, output truncated
organization_id: 1
label: api-dev
name: API Development
prior: 1
curl --header "Accept:application/json" --header "Content-Type:application/json" --request POST --user sat_username:sat_password --insecure --data @life-cycle.json https:// satellite.example.com /katello/api/environments | python -m json.tool
output omitted "description": null, "id": 2, "label": "api-dev", "library": false, "name": "API Development", "organization": { "id": 1, "label": "Default_Organization", "name": "Default Organization" }, "permissions": { "destroy_lifecycle_environments": true, "edit_lifecycle_environments": true, "promote_or_remove_content_views_to_environments": true, "view_lifecycle_environments": true }, "prior": { "id": 1, "name": "Library" }, output truncated
organization_id: 1
label: api-qa
name: API QA
prior: 2
curl --header "Accept:application/json" --header "Content-Type:application/json" --request POST --user sat_username:sat_password --insecure --data @life-cycle.json https:// satellite.example.com /katello/api/environments | python -m json.tool
output omitted "description": null, "id": 3, "label": "api-qa", "library": false, "name": "API QA", "organization": { "id": 1, "label": "Default_Organization", "name": "Default Organization" }, "permissions": { "destroy_lifecycle_environments": true, "edit_lifecycle_environments": true, "promote_or_remove_content_views_to_environments": true, "view_lifecycle_environments": true }, "prior": { "id": 2, "name": "API Development" }, "successor": null, output truncated
curl --header "Accept:application/json" --header "Content-Type:application/json" --request POST --user sat_username:sat_password --insecure --data '{"description":"Quality Acceptance Testing"}' https:// satellite.example.com /katello/api/environments/3 | python -m json.tool
output omitted "description": "Quality Acceptance Testing", "id": 3, "label": "api-qa", "library": false, "name": "API QA", "organization": { "id": 1, "label": "Default_Organization", "name": "Default Organization" }, "permissions": { "destroy_lifecycle_environments": true, "edit_lifecycle_environments": true, "promote_or_remove_content_views_to_environments": true, "view_lifecycle_environments": true }, "prior": { "id": 2, "name": "API Development" }, output truncated
curl --request DELETE --user sat_username:sat_password --insecure https:// satellite.example.com /katello/api/environments/ :id
export name=jq-1.6-2.el7.x86_64.rpm
export checksum=USD(sha256sum USDname|cut -c 1-65)
export size=USD(du -bs USDname|cut -f 1)
curl -H 'Content-Type: application/json' -X POST -k -u sat_username:sat_password -d "{\"size\": \"USDsize\", \"checksum\":\"USDchecksum\"}" https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads
upload_id: 37eb5900-597e-4ac3-9bc5-2250c302fdc4
export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
export path=/root/jq/jq-1.6-2.el7.x86_64.rpm
curl -u sat_username:sat_password -H Accept:application/json -H Content-Type:multipart/form-data -X PUT --data-urlencode size=USDsize --data-urlencode offset=0 --data-urlencode content@USD{path} https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads/USDupload_id
curl -H "Content-Type:application/json" -X PUT -u sat_username:sat_password -k -d "{\"uploads\":[{\"id\": \"USDupload_id\", \"name\": \"USDname\", \"checksum\": \"USDchecksum\" }]}" https://USD(hostname -f)/katello/api/v2/repositories/76/import_uploads
curl -H 'Content-Type: application/json' -X DELETE -k -u sat_username:sat_password -d "{}" https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads/USDupload_id
export name=bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm
export checksum=USD(sha256sum USDname|cut -c 1-65)
export size=USD(du -bs USDname|cut -f 1)
curl -H 'Content-Type: application/json' -X POST -k -u sat_username:sat_password -d "{\"size\": \"USDsize\", \"checksum\":\"USDchecksum\"}" https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads
upload_id: 37eb5900-597e-4ac3-9bc5-2250c302fdc4
export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
split --bytes 2MB --numeric-suffixes --suffix-length=1 bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm bpftool
ls bpftool[0-9] -l -rw-r--r--. 1 root root 2000000 Mar 31 14:15 bpftool0 -rw-r--r--. 1 root root 2000000 Mar 31 14:15 bpftool1 -rw-r--r--. 1 root root 2000000 Mar 31 14:15 bpftool2 -rw-r--r--. 1 root root 2000000 Mar 31 14:15 bpftool3 -rw-r--r--. 1 root root 868648 Mar 31 14:15 bpftool4
export path=/root/tmp/bpftool
curl -u sat_username:sat_password -H Accept:application/json -H Content-Type:multipart/form-data -X PUT --data-urlencode size=USDsize --data-urlencode offset=0 --data-urlencode content@USD{path}0 https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads/USDupload_id curl -u sat_username:sat_password -H Accept:application/json -H Content-Type:multipart/form-data -X PUT --data-urlencode size=USDsize --data-urlencode offset=2000000 --data-urlencode content@USD{path}1 https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads/USDupload_id curl -u sat_username:sat_password -H Accept:application/json -H Content-Type:multipart/form-data -X PUT --data-urlencode size=USDsize --data-urlencode offset=4000000 --data-urlencode content@USD{path}2 https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads/USDupload_id USDcurl -u sat_username:sat_password -H Accept:application/json -H Content-Type:multipart/form-data -X PUT --data-urlencode size=USDsize --data-urlencode offset=6000000 --data-urlencode content@USD{path}3 https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads/USDupload_id curl -u sat_username:sat_password -H Accept:application/json -H Content-Type:multipart/form-data -X PUT --data-urlencode size=USDsize --data-urlencode offset=8000000 --data-urlencode content@USD{path}4 https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads/USDupload_id
curl -H "Content-Type:application/json" -X PUT -u sat_username:sat_password -k -d "{\"uploads\":[{\"id\": \"USDupload_id\", \"name\": \"USDname\", \"checksum\": \"USDchecksum\" }]}" https://USD(hostname -f)/katello/api/v2/repositories/76/import_uploads
curl -H 'Content-Type: application/json' -X DELETE -k -u sat_username:sat_password -d "{}" https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads/USDupload_id
curl -H 'Content-Type: application/json' -X POST -k -u sat_username:sat_password -d "{\"size\": \"USDsize\", \"checksum\":\"USDchecksum\"}" https://USD(hostname -f)/katello/api/v2/repositories/76/content_uploads
content_unit_href: /pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/
curl -H "Content-Type:application/json" -X PUT -u sat_username:sat_password -k \-d "{\"uploads\":[{\"content_unit_id\": \"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/\", \"name\": \"USDname\", \ \"checksum\": \"USDchecksum\" }]}" https://USD(hostname -f)/katello/api/v2/repositories/76/import_uploads
curl --header "Accept:application/json" --header "Content-Type:application/json" --request PUT --user sat_username:sat_password --insecure --data json-formatted-data https:// satellite7.example.com
curl --header "Accept:application/json" --header "Content-Type:application/json" --request PUT --user sat_username:sat_password --insecure --data "{\"organization_id\":1,\"included\":{\"search\":\" my-host \"},\"content_type\":\"errata\",\"content\":[\" RHBA-2016:1981 \"]}" https:// satellite.example.com /api/v2/hosts/bulk/install_content
curl --header "Accept:application/json" --header "Content-Type:application/json" --request PUT --user sat_username:sat_password --insecure --data "{\"organization_id\":1,\"included\":{\"search\":\"host_collection=\\\" my-collection \\\"\"},\"content_type\":\"errata\",\"content\":[\" RHBA-2016:1981 \"]}" https:// satellite.example.com /api/v2/hosts/bulk/install_content
curl --insecure --user sat_username:sat_password https:// satellite.example.com /api/v2/hosts?search=os_title=\"RedHat+7.7\",model=\"PowerEdge+R330\" | python -m json.tool
{ "results": [ { "model_id": 1, "model_name": "PowerEdge R330", "name": " satellite.example.com ", "operatingsystem_id": 1, "operatingsystem_name": "RedHat 7.7", } ], "search": "os_title=\"RedHat 7.7\",model=\"PowerEdge R330\"", "subtotal": 1, "total": 11 }
curl --request GET --user sat_username:sat_password https://satellite.example.com/katello/api/content_views?per_page=10&amp;page=3
curl --request GET --user sat_username:sat_password https://satellite.example.com/katello/api/activation_keys?organization_id=1&amp;per_page=30&amp;page=2
for i in seq 1 3 ; do curl --request GET --user sat_username:sat_password https://satellite.example.com/katello/api/content_views?per_page=5&amp;page=USDi; done
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/smart_class_parameters
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/puppetclasses/5/smart_class_parameters
curl --request GET --insecure --user sat_username:sat_password --data 'search=puppetclass_name = access_insights_client and key = authmethod' https:// satellite.example.com /api/smart_class_parameters
curl --request GET --insecure --user sat_username:sat_password https:// satellite.example.com /api/smart_class_parameters/ 63
curl --header "Accept:application/json" --header "Content-Type:application/json" --request PUT --insecure --user sat_username:sat_password --data '{"smart_class_parameter":{"override":true}}' https:// satellite.example.com /api/smart_class_parameters/63
curl --header "Accept:application/json" --header "Content-Type:application/json" --request PUT --insecure --user sat_username:sat_password --data '{"smart_class_parameter":{"override_value":{"match":"hostgroup=Test","value":"2.4.6"}}}' https:// satellite.example.com /api/smart_class_parameters/63
curl --request DELETE --user sat_username:sat_password https:// satellite.example.com /api/smart_class_parameters/63/override_values/3
curl --header "Accept:application/json" --header "Content-Type:application/json" --request GET --user sat_user:sat_password --insecure https:// satellite.example.com /api/smart_class_parameters?search=puppetclass_name=motd | python -m json.tool
{ "avoid_duplicates": false, "created_at": "2017-02-06 12:37:48 UTC", # Remove this line. "default_value": "", # Add a new value here. "description": "", "hidden_value": "", "hidden_value?": false, "id": 3, "merge_default": false, "merge_overrides": false, "override": false, # Set the override value to true . "override_value_order": "fqdn\nhostgroup\nos\ndomain", "override_values": [], # Remove this line. "override_values_count": 0, "parameter": "content", "parameter_type": "string", "puppetclass_id": 3, "puppetclass_name": "motd", "required": false, "updated_at": "2017-02-07 11:56:55 UTC", # Remove this line. "use_puppet_default": false, "validator_rule": null, "validator_type": "" }
curl --header "Accept:application/json" --header "Content-Type:application/json" --request GET --user sat_user:sat_password --insecure \` https:// satellite.example.com /api/smart_class_parameters/3 | python -m json.tool > output_file.json
cp output_file.json changed_file.json
{ "avoid_duplicates": false, "created_at": "2017-02-06 12:37:48 UTC", # Remove this line. "default_value": "", # Add a new value here. "description": "", "hidden_value": "", "hidden_value?": false, "id": 3, "merge_default": false, "merge_overrides": false, "override": false, # Set the override value to true . "override_value_order": "fqdn\nhostgroup\nos\ndomain", "override_values": [], # Remove this line. "override_values_count": 0, "parameter": "content", "parameter_type": "string", "puppetclass_id": 3, "puppetclass_name": "motd", "required": false, "updated_at": "2017-02-07 11:56:55 UTC", # Remove this line. "use_puppet_default": false, "validator_rule": null, "validator_type": "" }
{ "avoid_duplicates": false, "default_value": " No Unauthorized Access Allowed ", "description": "", "hidden_value": "", "hidden_value?": false, "id": 3, "merge_default": false, "merge_overrides": false, "override": true, "override_value_order": "fqdn\nhostgroup\nos\ndomain", "override_values_count": 0, "parameter": "content", "parameter_type": "string", "puppetclass_id": 3, "puppetclass_name": "motd", "required": false, "use_puppet_default": false, "validator_rule": null, "validator_type": "" }
curl --header "Accept:application/json" --header "Content-Type:application/json" --request PUT --user sat_username:sat_password --insecure --data @changed_file.json https:// satellite.example.com /api/smart_class_parameters/3
curl --insecure --user username :_password_ https:// satellite.example.com /api/v2/compliance/arf_reports/ | python -m json.tool
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3252 0 3252 0 0 4319 0 --:--:-- --:--:-- --:--:-- 4318 { "page": 1, "per_page": 20, "results": [ { "created_at": "2017-05-16 13:27:09 UTC", "failed": 0, "host": " host1.example.com ", "id": 404, "othered": 0, "passed": 0, "updated_at": "2017-05-16 13:27:09 UTC" }, { "created_at": "2017-05-16 13:26:07 UTC", "failed": 0, "host": " host2.example.com , "id": 405, "othered": 0, "passed": 0, "updated_at": "2017-05-16 13:26:07 UTC" }, { "created_at": "2017-05-16 13:25:07 UTC", "failed": 0, "host": " host3.example.com ", "id": 406, "othered": 0, "passed": 0, "updated_at": "2017-05-16 13:25:07 UTC" }, { "created_at": "2017-05-16 13:24:07 UTC", "failed": 0, "host": " host4.example.com ", "id": 407, "othered": 0, "passed": 0, "updated_at": "2017-05-16 13:24:07 UTC" }, ], "search": null, "sort": { "by": null, "order": null }, "subtotal": 29, "total": 29
curl --insecure --user username :_password_ --header "Content-Type: application/json" --request DELETE https:// satellite.example.com /api/v2/compliance/arf_reports/405
HTTP/1.1 200 OK Date: Thu, 18 May 2017 07:14:36 GMT Server: Apache/2.4.6 (Red Hat Enterprise Linux) X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Foreman_version: 1.11.0.76 Foreman_api_version: 2 Apipie-Checksum: 2d39dc59aed19120d2359f7515e10d76 Cache-Control: max-age=0, private, must-revalidate X-Request-Id: f47eb877-35c7-41fe-b866-34274b56c506 X-Runtime: 0.661831 X-Powered-By: Phusion Passenger 4.0.18 Set-Cookie: request_method=DELETE; path=/ Set-Cookie: _session_id=d58fe2649e6788b87f46eabf8a461edd; path=/; secure; HttpOnly ETag: "2574955fc0afc47cb5394ce95553f428" Status: 200 OK Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: application/json; charset=utf-8
#!/bin/bash #this script removes all the arf reports from the satellite server #settings USER= username PASS= password URI=https:// satellite.example.com #check amount of reports while [ USD(curl --insecure --user USDUSER:USDPASS USDURI/api/v2/compliance/arf_reports/ | python -m json.tool | grep \"\total\": | cut --fields=2 --delimiter":" | cut --fields=1 --delimiter"," | sed "s/ //g") -gt 0 ]; do #fetch reports for i in USD(curl --insecure --user USDUSER:USDPASS USDURI/api/v2/compliance/arf_reports/ | python -m json.tool | grep \"\id\": | cut --fields=2 --delimiter":" | cut --fields=1 --delimiter"," | sed "s/ //g") #delete reports do curl --insecure --user USDUSER:USDPASS --header "Content-Type: application/json" --request DELETE USDURI/api/v2/compliance/arf_reports/USDi done done
curl --cacert /etc/pki/katello/certs/katello-server-ca.crt --cert /etc/foreman/client_cert.pem --key /etc/foreman/client_key.pem https:// <satellite.example.com> /pulp/api/v3/repositories/ | python3 -m json.tool
{ "count": 1, "next": null, "previous": null, "results": [ { "pulp_href": "/pulp/api/v3/repositories/rpm/rpm/018cd05a-4b83-73db-b71c-587c6181d89b/", "pulp_created": "2024-01-03T17:23:47.715882Z", "versions_href": "/pulp/api/v3/repositories/rpm/rpm/018cd05a-4b83-73db-b71c-587c6181d89b/versions/", "pulp_labels": {}, "latest_version_href": "/pulp/api/v3/repositories/rpm/rpm/018cd05a-4b83-73db-b71c-587c6181d89b/versions/1/", "name": "Red_Hat_Enterprise_Linux_8_for_x86_64_-_BaseOS_Kickstart_8_9-49838", "description": null, "retain_repo_versions": null, "remote": null } ] }
pulp repository list [ { "pulp_href": "/pulp/api/v3/repositories/rpm/rpm/018cd025-c6ef-7237-a99e-70bab3d30941/", "pulp_created": "2024-01-03T16:26:25.904682Z", "versions_href": "/pulp/api/v3/repositories/rpm/rpm/018cd025-c6ef-7237-a99e-70bab3d30941/versions/", "pulp_labels": {}, "latest_version_href": "/pulp/api/v3/repositories/rpm/rpm/018cd025-c6ef-7237-a99e-70bab3d30941/versions/1/", "name": "Red_Hat_Enterprise_Linux_8_for_x86_64_-_AppStream_RPMs_8-2875", "description": null, "retain_repo_versions": null, "remote": null } ]
curl https:// <satellite.example.com> /pulp/api/v3/status/ | python3 -m json.tool
{ "versions": [ { "component": "core", "version": "3.39.4", "package": "pulpcore", "domain_compatible": true }, { "component": "rpm", "version": "3.23.0", "package": "pulp-rpm", "domain_compatible": true },
pulp status { "versions": [ { "component": "core", "version": "3.39.4", "package": "pulpcore", "domain_compatible": true }, { "component": "rpm", "version": "3.23.0", "package": "pulp-rpm", "domain_compatible": true },