API Guide
Reference documentation for using Satellite's Representational State Transfer (REST) API
Edition 2
Abstract
Chapter 1. Introduction to Red Hat Satellite
1.1. The Red Hat Satellite API
Note
https://satellite6.example.com/apidoc/v2.html on your Satellite 6 server. Be aware that even though versions 1 and 2 of the Satellite 6 API are available, Red Hat only supports version 2.
- Broad client support: Any programming language, framework, or system with support for HTTP protocol can use the API;
- Self descriptive: Client applications require minimal knowledge of the Red Hat Satellite infrastructure as many details are discovered at runtime;
- Resource-based model: The resource-based REST model provides a natural way to manage a virtualization platform.
- integrate with enterprise IT systems;
- integrate with third-party applications;
- perform automated maintenance or error checking tasks; and
- automate repetitive tasks with scripts.
https://hostname/apidoc/v2.html on your Satellite 6 server.
1.2. Representational State Transfer
GET, POST, PUT, and DELETE. This provides a stateless communication between the client and server where each request acts independent of any other request and contains all necessary information to complete the request.
Chapter 2. Authentication
2.1. Using SSL Authentication
Procedure 2.1. Obtaining a Certificate
- Use
sshto connect to your Satellite server as therootuser:# ssh root@satellite.example.com
- Search your server's configuration directory for the certificate location:
# grep -r "SSLCertificateFile" /etc/httpd/conf.d
Note
The default location of self-signed certificates is usually/var/www/html/pub/katello-server-ca.crt. - Copy this certificate to your client.
# scp /path/to/ca-cert-file username@client:~/
--cacert option with the curl command as follows:
# curl -X GET -u admin:changeme -H "Accept:application/json" --cacert /path/to/ca-cert-file https://satellite.example.com/katello/api/organizations
curl CA store:
# certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "Red Hat Satellite" -i /path/to/ca-cert-file
--cacert option for each request.
2.2. HTTP Authentication
Table 2.1. Encoding Credentials for Access to an API
| Item | Value |
|---|---|
| user name | admin |
| password | changeme |
| unencoded credentials | admin:changeme |
| base64 encoded credentials | YWRtaW46Y2hhbmdlbWU= |
Example 2.1. Access to a REST API with Appropriate Credentials
HEAD [base] HTTP/1.1 Host: [host] Authorization: Basic YWRtaW46MTIzNDU2 HTTP/1.1 200 OK ...
Important
Important
Chapter 3. Common REST API Functions
3.1. Using GET to Query Resources
GET requests to query the Satellite server for various types of information. GET requests do not make any changes to Satellite resources, they only return information about resources.
3.1.1. Listing All Resources
GET request on the collection URI obtained from the entry point.
GET /api/collection HTTP/1.1 Accept: MIME type
3.1.2. Determining the State of a Resource
GET request on a URI obtained from a collection listing.
GET /api/collection/resource_id HTTP/1.1 Accept: MIME type
3.2. Using POST to Create Resources
POST requests to create Satellite resources. Special permissions might be required for some POST requests; see Appendix A, API Permissions Matrix for information about API permissions.
3.2.1. Creating a Resource
POST request to the collection URI containing a representation of the new resource.
POST request requires a Content-Type header. This informs the API of the representation MIME type in the body content as part of the request.
POST /api/collection HTTP/1.1 Accept: MIME type Content-Type: MIME type body
3.3. Using PUT to Modify Resources
PUT requests to modify Satellite resources. Special permissions might be required for some PUT requests; see Appendix A, API Permissions Matrix for information about API permissions.
3.3.1. Updating a Resource
GET request for the resource URI. Details on modifiable properties are found in the individual resource type documentation.
PUT request requires a Content-Type header. This informs the API of the representation MIME type in the body content as part of the request.
PUT /api/collection/resource_id HTTP/1.1 Accept: MIME type Content-Type: MIME type body
3.4. Using DELETE to Delete Resources
DELETE requests to delete Satellite resources. Special permissions might be required for some DELETE requests; see Appendix A, API Permissions Matrix for information about API permissions.
3.4.1. Deleting a Resource
DELETE request sent to its URI.
DELETE /api/collection/resource_id HTTP/1.1 Accept: MIME type
DELETE request to specify additional properties. A DELETE request with optional body content requires a Content-Type header to inform the API of the representation MIME type in the body content. If a DELETE request contains no body content, omit the Content-Type header.
Chapter 4. Examples
4.1. API Examples Using Ruby
Important
4.1.1. Creating Objects Using Ruby
Note
#!/usr/bin/ruby
require 'rest-client'
require 'json'
url = 'https://satellite6.example.com/api/v2/'
katello_url = 'https://satellite6.example.com/katello/api/v2/'
$username = 'admin'
$password = 'changeme'
org_name = "MyOrg"
environments = ["Development","Testing","Production"]
def get_json(location)
response = RestClient::Request.new(
:method => :get,
:url => location,
:user => $username,
:password => $password,
:headers => { :accept => :json,
:content_type => :json }
).execute
results = JSON.parse(response.to_str)
end
def post_json(location, json_data)
response = RestClient::Request.new(
:method => :post,
:url => location,
:user => $username,
:password => $password,
:headers => { :accept => :json,
:content_type => :json},
:payload => json_data
).execute
results = JSON.parse(response.to_str)
end
orgs = get_json(url+"organizations")
org_list = {}
orgs['results'].each do |org|
org_list[org['id']] = org['name']
end
if !org_list.has_value?(org_name)
org_id = post_json(url+"organizations", JSON.generate({"name"=> org_name}))["organization"]["id"]
puts "Creating organization: \t" + org_name
else
org_id = org_list.key(org_name)
puts "Organization \"" + org_name + "\" exists"
end
envs = get_json(katello_url+"organizations/" + org_id.to_s + "/environments")
env_list = {}
envs['results'].each do |env|
env_list[env['id']] = env['name']
end
prior_env_id = env_list.key("Library")
environments.each do |e|
if env_list.has_value?(e)
puts "ERROR: One of the Environments is not unique to organization"
exit()
end
end
environments.each do |environment|
new_env_id = post_json(katello_url+"organizations/" + org_id.to_s + "/environments", JSON.generate({"name" => environment, "organization_id" => org_id,"prior" => prior_env_id}))["id"]
puts "Creating environment: \t" + environment
prior_env_id = new_env_id
end
exit()
Warning
4.2. API Examples Using Python
Important
4.2.1. Creating Objects Using Python
Note
#!/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://satellite6.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}))["organization"]["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()
Warning
4.2.2. Running Queries Using Python
sat6api.py and then add the following content:
#!/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://satellite6.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 = 'satellite6.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()./sat6api.py from the command line to display the results.
4.3. API Examples Using Curl
curl to perform various tasks using the Satellite API. The first section describes simple queries, such as listing general host information, searching for facts, and using pattern matching. The second section describes how to modify Satellite resources, with examples of how to upload and import content to your Satellite server.
4.3.1. Performing Simple Queries
curl to search for information about your Satellite deployment. These examples include both the actual command and some sample output, and example values for user names and passwords. Expect different results for each deployment. These examples also use the python -mjson.tool command to format the output.
Note
-s (silent) option with curl that you will not see a progress meter or any error messages.
-k (insecure) option, you need to use HTTPS and also include the -u (user name) option. You can use the form -u username[:password] or, if you do not include the password, the command prompts you to enter it. Red Hat recommends that you do not include the password as part of the command, because it then becomes part of your shell history and might present a security risk. These examples include the password only for the sake of simplicity.
The following is a basic query that returns a list of resources. Such requests return a list of data wrapped in metadata, while other request types only return the actual object.
$ curl -X GET -s -k -u admin:password https://satellite6.example.com/api/v2/hosts | python -mjson.tool
{
"total" => 2,
"subtotal" => 2,
"page" => 1,
"per_page" => 1000,
"search" => nil,
"sort" => {
"by" => nil,
"order" => nil
},
"results" => [
.
.
.
The following query returns information for the host satellite6.example.com:
$ curl -X GET -s -k -u admin:password https://satellite6.example.com/api/v2/hosts/satellite6.example.com | python -mjson.tool
{
"all_puppetclasses": [],
"architecture_id": 1,
"architecture_name": "x86_64",
"build": false,
"capabilities": [
"build"
],
"certname": "satellite6.example.com",
"comment": null,
"compute_profile_id": null,
...
The following query returns all facts for the host satellite6.example.com:
$ curl -X GET -s -k -u admin:password https://satellite6.example.com/api/v2/hosts/satellite6.example.com/facts | python -mjson.tool
{
...
"results": {
"satellite6.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",
...
}The following query returns all hosts that match the pattern "example":
$ curl -X GET -s -k -u admin:password https://satellite6.example.com/api/v2/hosts?search=example | python -mjson.tool
{
...
"results": [
{
"name": "satellite6.example.com",
...
}
],
"search": "example",
}The following query returns all hosts in the "production" environment:
$ curl -X GET -s -k -u admin:password https://satellite6.example.com/api/v2/hosts?search=environment=production | python -mjson.tool
{
...
"results": [
{
"environment_name": "production",
"name": "satellite6.example.com",
...
}
],
"search": "environment=production",
}The following query returns all hosts with a model name "RHEV Hypervisor":
$ curl -X GET -s -k -u admin:password https://satellite6.example.com/api/v2/hosts?search=model=\"RHEV+Hypervisor\" | python -mjson.tool
{
...
"results": [
{
"model_id": 1,
"model_name": "RHEV Hypervisor",
"name": "satellite6.example.com",
...
}
],
"search": "model=\"RHEV Hypervisor\"",4.3.2. Creating and Modifying Resources
Accept:version=2 in the request header. The URL specification takes precedence.
Important
$ curl -H "Accept:application/json,version=2" -H "Content-Type:application/json" -X POST -u username[:password] [-k] -d json-formatted-data satellite-url
$ curl -H "Accept:application/json,version=2" -H "Content-Type:application/json" -X POST -u admin:changeme -k -d "{\"architecture\":{\"name\":\"i686\"}}" https://satellite6.example.com/api/architectures{"name":"i686","id":3,"created_at":"2015-10-29T13:21:09Z","updated_at":"2015-10-29T13:21:09Z","operatingsystems":[],"images":[]}$ curl -X GET -u admin:changeme -k https://satellite6.example.com/api/v2/architectures | python -mjson.tool
{
"page": 1,
"per_page": 20,
"results": [
{
"created_at": "2015-04-02T05:29:46Z",
"id": 2,
"name": "i386",
"updated_at": "2015-04-02T05:29:46Z"
},
{
"created_at": "2015-04-02T05:29:46Z",
"id": 1,
"name": "x86_64",
"updated_at": "2015-04-02T05:29:46Z"
},
{
"created_at": "2015-11-04T19:40:15Z",
"id": 3,
"name": "i686",
"updated_at": "2015-11-04T19:40:15Z"
}
],
"search": null,
"sort": {
"by": null,
"order": null
},
"subtotal": 3,
"total": 3
}hammer on the Satellite server to verify the results:
# hammer -u admin -p changeme architecture list ---|------- ID | NAME ---|------- 2 | i386 1 | x86_64 3 | i686 ---|-------
4.3.2.1. Uploading Content to the Satellite Server
curl with the Satellite 6 API to upload and import large files to your Satellite server. This process involves four steps:
- Create an upload request.
- Upload the content.
- Import the content.
- Delete the upload request.
The following example command creates an upload request that you can use to upload your content. Ensure you modify the example parameters to suit your deployment:
$ curl -H "Accept:application/json,version=2" -H "Content-Type:application/json" -X POST -u admin:changeme -k -d "{}" https://satellite6.example.com/katello/api/repositories/3/content_uploadsNote
upload_id, but no data is passed to the Satellite server to achieve this.
{"upload_id":"0be156b1-f373-4cad-89d0-924f8f4491d2","_href":"/pulp/api/v2/content/uploads/0be156b1-f373-4cad-89d0-924f8f4491d2/"}upload_id value; you need this value when you upload your content to the Satellite server.
Ensure you use the correct MIME type when you upload data. The "application/json" MIME type is used for the majority of requests to Satellite 6.
upload_id, MIME type, and other parameters to upload content:
$ curl -H "Accept:application/json,version=2" -H "Content-Type:multipart/form-data" -X PUT -u admin:changeme -k --data-urlencode "content@/home/sat6user/rpmbuild/RPMS/noarch/python-scripttest-1.1.1-1.fc21.noarch.rpm" --data-urlencode offset=0 https://satellite6.example.com/katello/api/repositories/3/content_uploads/0be156b1-f373-4cad-89d0-924f8f4491d2
split), and increment the offset in bytes.
After you have uploaded the content to the Satellite server, you need to import it into the appropriate repository. Until you complete this step, the Satellite server will not be aware of the new content.
$ curl -H "Accept:application/json,version=2" -H "Content-Type:application/json" -X PUT -u admin:changeme -k -d "{\"upload_ids\":[\"0be156b1-f373-4cad-89d0-924f8f4491d2\"]}" https://satellite6.example.com>/katello/api/repositories/3/import_uploadsAfter you have successfully uploaded and imported your content, you can delete the upload request. This frees any temporary disk space that was used during the upload.
$ curl -H "Accept:application/json,version=2" -H "Content-Type:application/json" -X DELETE -d "{}" -u admin:changeme -k https://satellite6.example.com/katello/api/repositories/3/content_uploads/0be156b1-f373-4cad-89d0-924f8f4491d24.3.2.1.1. Complete Example of Uploading Content
- Download the sample module and split it into 50.000 byte chunks.
$ wget https://forgeapi.puppetlabs.com/v3/files/theforeman-foreman-5.0.1.tar.gz?_ga=1.267255502.1792403825.1430297670 -O theforeman-foreman-5.0.1.tar.gz $ split --bytes 50000 --numeric-suffixes --suffix-length=1 theforeman-foreman-5.0.1.tar.gz foreman_module. $ ls -la theforeman-foreman-5.0.1.tar.gz foreman_module.* -rw-r--r--. 1 root root 50000 Nov 4 04:42 foreman_module.0 -rw-r--r--. 1 root root 32928 Nov 4 04:42 foreman_module.1 -rw-r--r--. 1 root root 82928 Nov 4 04:41 theforeman-foreman-5.0.1.tar.gz
- Create a new upload request (this is the equivalent of
caton the Satellite server.$ curl -H "Accept:application/json,version=2" -H "Content-Type:application/json" -X POST -u admin:changeme -k -d "{}" https://ibm-vm01.example.com/katello/api/repositories/2/content_uploads It responded with upload id: {"upload_id":"9585528f-07ad-4bb1-9c80-ccece249b2b7","_href":"/pulp/api/v2/content/uploads/9585528f-07ad-4bb1-9c80-ccece249b2b7/"} - Upload the file chunks that you created in Step 1. Notice the use of the
offsetparameter in this example and how it relates to the file size.$ curl -H "Accept:application/json,version=2" -H "Content-Type:multipart/form-data" -X PUT -u admin:changeme -k --data-urlencode "content@foreman_module.0" --data-urlencode offset=0 https://ibm-vm01.example.com/katello/api/repositories/2/content_uploads/9585528f-07ad-4bb1-9c80-ccece249b2b7 $ curl -H "Accept:application/json,version=2" -H "Content-Type:multipart/form-data" -X PUT -u admin:changeme -k --data-urlencode "content@foreman_module.1" --data-urlencode offset=50000 https://ibm-vm01.example.com/katello/api/repositories/2/content_uploads/9585528f-07ad-4bb1-9c80-ccece249b2b7
- Import the complete upload to the repository.
$ curl -H "Accept:application/json,version=2" -H "Content-Type:application/json" -X PUT -u admin:changeme -k -d "{\"upload_ids\":[\"9585528f-07ad-4bb1-9c80-ccece249b2b7\"]}" https://ibm-vm01.example.com/katello/api/repositories/2/import_uploads - Delete the upload.
$ curl -H "Accept:application/json,version=2" -H "Content-Type:application/json" -X DELETE -d "{}" -u admin:changeme -k https://ibm-vm01.example.com/katello/api/repositories/2/content_uploads/9585528f-07ad-4bb1-9c80-ccece249b2b7
$ ls -la /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gz -rw-r--r--. 1 apache apache 82928 Nov 4 04:55 /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gz $ cmp /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gz theforeman-foreman-5.0.1.tar.gz $ echo $? 0
4.4. Locating and Using Other Search Terms
os_description, which you can use in your API query as follows:
$ curl -s -k -u admin:password https://satellite6.example.com/api/v2/hosts?search=os_description=\"RHEL+Server+6.6\" | python -mjson.tool
{
...
"results": [
{
"name": "satellite6.example.com",
"operatingsystem_id": 1,
"operatingsystem_name": "RHEL Server 6.6",
...
}
],
"search": "os_description=\"RHEL Server 6.6\"",
}
Appendix A. API Permissions Matrix
Table A.1. API Permissions Matrix
| Permission Name | Actions | Resource Type |
|---|---|---|
| edit_activation_keys |
| Katello::ActivationKey |
| destroy_activation_keys |
| Katello::ActivationKey |
| create_activation_keys |
| Katello::ActivationKey |
| view_activation_keys |
| Katello::ActivationKey |
| logout |
| |
| edit_architectures |
| |
| create_architectures |
| |
| destroy_architectures |
| |
| view_architectures |
| |
| view_audit_logs |
| |
| edit_authenticators |
| |
| create_authenticators |
| |
| view_authenticators |
| |
| destroy_authenticators |
| |
| destroy_bookmarks |
| |
| edit_bookmarks |
| |
| view_bookmarks |
| |
| create_bookmarks |
| |
| download_bootdisk |
| |
| manage_capsule_content |
| SmartProxy |
| edit_compute_profiles |
| |
| destroy_compute_profiles |
| |
| view_compute_profiles |
| |
| create_compute_profiles |
| |
| create_compute_resources |
| |
| destroy_compute_resources |
| |
| view_compute_resources |
| |
| edit_compute_resources |
| |
| console_compute_resources_vms |
| |
| destroy_compute_resources_vms |
| |
| create_compute_resources_vms |
| |
| view_compute_resources_vms |
| |
| power_compute_resources_vms |
| |
| edit_compute_resources_vms |
| |
| create_config_groups |
| |
| destroy_config_groups |
| |
| edit_config_groups |
| |
| view_config_groups |
| |
| deploy_templates |
| |
| lock_templates |
| |
| edit_templates |
| |
| view_templates |
| |
| destroy_templates |
| |
| create_templates |
| |
| commit_containers |
| Container |
| destroy_containers |
| Container |
| power_compute_resources_vms |
| ComputeResource |
| view_containers |
| Container |
| create_containers |
| Container |
| destroy_content_hosts |
| Katello::System |
| view_content_hosts |
| Katello::System |
| edit_content_hosts |
| Katello::System |
| create_content_hosts |
| Katello::System |
| publish_content_views |
| Katello::ContentView |
| promote_or_remove_content_views |
| Katello::ContentView |
| destroy_content_views |
| Katello::ContentView |
| view_content_views |
| Katello::ContentView |
| create_content_views |
| Katello::ContentView |
| edit_content_views |
| Katello::ContentView |
| access_dashboard |
| |
| destroy_discovered_hosts |
| Host |
| submit_discovered_hosts |
| Host |
| view_discovered_hosts |
| Host |
| edit_discovered_hosts |
| Host |
| provision_discovered_hosts |
| Host |
| auto_provision_discovered_hosts |
| Host |
| view_discovery_rules |
| DiscoveryRule |
| destroy_discovery_rules |
| DiscoveryRule |
| execute_discovery_rules |
| DiscoveryRule |
| create_discovery_rules |
| DiscoveryRule |
| edit_discovery_rules |
| DiscoveryRule |
| view_domains |
| |
| create_domains |
| |
| edit_domains |
| |
| destroy_domains |
| |
| destroy_environments |
| |
| edit_environments |
| |
| view_environments |
| |
| create_environments |
| |
| import_environments |
| |
| edit_external_usergroups |
| |
| destroy_external_usergroups |
| |
| create_external_usergroups |
| |
| view_external_usergroups |
| |
| edit_external_variables |
| |
| destroy_external_variables |
| |
| create_external_variables |
| |
| view_external_variables |
| |
| view_facts |
| |
| upload_facts |
| |
| view_filters |
| |
| destroy_filters |
| |
| create_filters |
| |
| edit_filters |
| |
| edit_foreman_tasks |
| ForemanTasks::Task |
| view_foreman_tasks |
| ForemanTasks::Task |
| destroy_globals |
| |
| edit_globals |
| |
| view_globals |
| |
| create_globals |
| |
| edit_gpg_keys |
| Katello::GpgKey |
| view_gpg_keys |
| Katello::GpgKey |
| destroy_gpg_keys |
| Katello::GpgKey |
| create_gpg_keys |
| Katello::GpgKey |
| destroy_host_collections |
| Katello::HostCollection |
| view_host_collections |
| Katello::HostCollection |
| edit_host_collections |
| Katello::HostCollection |
| create_host_collections |
| Katello::HostCollection |
| edit_classes |
| |
| edit_params |
| |
| destroy_params |
| |
| create_params |
| |
| destroy_hostgroups |
| |
| create_hostgroups |
| |
| view_hostgroups |
| |
| edit_hostgroups |
| |
| view_hosts |
| |
| console_hosts |
| |
| destroy_hosts |
| |
| edit_hosts |
| |
| create_hosts |
| |
| power_hosts |
| |
| puppetrun_hosts |
| |
| ipmi_boot |
| |
| build_hosts |
| |
| search_repository_image_search |
| Docker/ImageSearch |
| edit_images |
| |
| create_images |
| |
| destroy_images |
| |
| view_images |
| |
| promote_or_remove_content_views_to_environments | Katello::KTEnvironment | |
| edit_lifecycle_environments |
| Katello::KTEnvironment |
| create_lifecycle_environments |
| Katello::KTEnvironment |
| destroy_lifecycle_environments |
| Katello::KTEnvironment |
| view_lifecycle_environments |
| Katello::KTEnvironment |
| assign_locations |
| |
| edit_locations |
| |
| create_locations |
| |
| destroy_locations |
| |
| view_locations |
| |
| view_mail_notifications |
| |
| view_media |
| |
| create_media |
| |
| destroy_media |
| |
| edit_media |
| |
| edit_models |
| |
| view_models |
| |
| create_models |
| |
| destroy_models |
| |
| view_operatingsystems |
| |
| destroy_operatingsystems |
| |
| create_operatingsystems |
| |
| edit_operatingsystems |
| |
| create_organizations |
| |
| view_organizations |
| |
| edit_organizations |
| |
| destroy_organizations |
| |
| assign_organizations |
| |
| view_ptables |
| |
| edit_ptables |
| |
| destroy_ptables |
| |
| create_ptables |
| |
| view_plugins |
| |
| destroy_products |
| Katello::Product |
| edit_products |
| Katello::Product |
| sync_products |
| Katello::Product |
| view_products |
| Katello::Product |
| create_products |
| Katello::Product |
| my_account |
| |
| user_logout |
| |
| create_puppetclasses |
| |
| import_puppetclasses |
| |
| destroy_puppetclasses |
| |
| edit_puppetclasses |
| |
| view_puppetclasses |
| |
| create_realms |
| |
| edit_realms |
| |
| destroy_realms |
| |
| view_realms |
| |
| rh_telemetry_configurations |
| |
| view_search |
| |
| view_log_viewer |
| |
| attachments |
| |
| rh_telemetry_view |
| |
| rh_telemetry_api |
| |
| logs |
| |
| configuration |
| |
| app_root |
| |
| view_cases |
| |
| destroy_registries |
| DockerRegistry |
| create_registries |
| DockerRegistry |
| view_registries |
| DockerRegistry |
| destroy_reports |
| |
| upload_reports |
| |
| view_reports |
| |
| edit_roles |
| |
| view_roles |
| |
| create_roles |
| |
| destroy_roles |
| |
| access_settings |
| |
| view_smart_proxies |
| |
| create_smart_proxies |
| |
| destroy_smart_proxies |
| |
| edit_smart_proxies |
| |
| destroy_smart_proxies_autosign |
| |
| view_smart_proxies_autosign |
| |
| create_smart_proxies_autosign |
| |
| view_smart_proxies_puppetca |
| |
| edit_smart_proxies_puppetca |
| |
| destroy_smart_proxies_puppetca |
| |
| view_statistics |
| |
| edit_subnets |
| |
| view_subnets |
| |
| create_subnets |
| |
| destroy_subnets |
| |
| import_subnets |
| |
| view_subscriptions |
| Organization |
| attach_subscriptions |
| Organization |
| unattach_subscriptions |
| Organization |
| import_manifest |
| Organization |
| delete_manifest |
| Organization |
| destroy_sync_plans |
| Katello::SyncPlan |
| view_sync_plans |
| Katello::SyncPlan |
| create_sync_plans |
| Katello::SyncPlan |
| edit_sync_plans |
| Katello::SyncPlan |
| view_tasks |
| |
| view_trends |
| |
| update_trends |
| |
| destroy_trends |
| |
| create_trends |
| |
| edit_trends |
| |
| my_organizations |
| |
| view_usergroups |
| |
| edit_usergroups |
| |
| destroy_usergroups |
| |
| create_usergroups |
| |
| view_users |
| |
| create_users |
| |
| edit_users |
| |
| destroy_users |
|
Appendix B. Revision History
| Revision History | ||||
|---|---|---|---|---|
| Revision 2-6 | Wed Jul 22 2015 | |||
| ||||
| Revision 2-5 | Thu Jul 16 2015 | |||
| ||||
| Revision 2-4 | Wed Jul 15 2015 | |||
| ||||
| Revision 2-3 | Sun Jun 14 2015 | |||
| ||||
| Revision 2-2 | Wed May 6 2015 | |||
| ||||
| Revision 2-1 | Wed Apr 8 2015 | |||
| ||||
| Revision 2-0 | Thu Nov 20 2014 | |||
| ||||
| Revision 1-0 | Tue Sep 9 2014 | |||
| ||||
| Revision 0-9.1 | Tue Jul 1 2014 | |||
| ||||
| Revision 0-9 | Mon Jun 30 2014 | |||
| ||||
| Revision 0-8.403 | Mon Nov 11 2013 | |||
| ||||
| Revision 0-08 | Mon Nov 11 2013 | |||
| ||||
| Revision 0-07 | Mon 11 Nov 2013 | |||
| ||||
| Revision 0-06 | Wed 09 Oct 2013 | |||
| ||||
| Revision 0-05 | Thu 26 Sep 2013 | |||
| ||||
| Revision 0-04 | Wed 25 Sep 2013 | |||
| ||||
| Revision 0-03 | Wed 25 Sep 2013 | |||
| ||||
| Revision 0-02 | Wed 14 Aug 2013 | |||
| ||||
| Revision 0-01 | Tue 28 May 2013 | |||
| ||||
