Red Hat Satellite 6 が Satellite 5 と大きく違う点の 1 つに API が挙げられます。Satellite 5 は XMLRPC ベースの API を使用しますが、Satellite 6 は REST ベースの API を使用します。この基本的な違いにより、Satellite 6 REST API を使用する前に、Satellite 5 API と統合した既存のスクリプトまたはツールを確認するか、少なくても部分的に書き直す必要があります。
本セクションは、各製品内で同じユースケースを実現するための比較を紹介します。このチュートリアルは、特定のプログラミング言語を対象にしておらず、どのスクリプトも HTTPS で安全を確保していません。ここでは、Satellite 6 API への移行を開始するために Satellite 5 API スクリプトをメンテナンスするところから説明します。
重要
Satellite 6 移行ツールでは、Satellite 5 API またはスクリプトは Satellite 6 に移行されません。移行プロセスを開始するには、このセクションから始めてください。
詳しい情報
API の詳しい情報は『 API ガイド』 を参照してください。お使いの Satellite Server では、以下の場所で参照できます。
Define Satellite location and login details
Authenticate and get session key
Get list of systems available to user
Logout
#!/usr/bin/python
import xmlrpclib
# Define Satellite location and login details
SATELLITE_URL = "http://localhost/rpc/api"
SATELLITE_LOGIN = "admin"
SATELLITE_PASSWORD = "password"
client = xmlrpclib.Server(SATELLITE_URL, verbose=0)
# Authenticate and get session key
key = client.auth.login(SATELLITE_LOGIN, SATELLITE_PASSWORD)
# Get list of systems available to user
list = client.system.listSystems(key)
for system in list:
print system.get('id')
print system.get('name')
# Logout
client.auth.logout(key)
Copy to ClipboardCopied!Toggle word wrapToggle overflow
#!/usr/bin/python
import json
import requests
# Define Satellite location and login details
SAT_API = "https://localhost/api/v2/"
USERNAME = "admin"
PASSWORD = "changeme"
SSL_VERIFY = False
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 main():
# List all hosts available to the user
hosts = get_json(SAT_API + "hosts/")
# Pretty Print the returned JSON of Hosts
print json.dumps(hosts, sort_keys=True, indent=4)
if __name__ == "__main__":
main()
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Satellite 5 でコマンドラインを使用して利用可能なシステムを一覧表示
Satellite 5 で以下のコマンドを使用して、利用なシステムを一覧表示します。
spacecmd -u username -p password system_list
# spacecmd -u username -p password system_list
Copy to ClipboardCopied!Toggle word wrapToggle overflow
セッションは以下のようになります。
spacecmd -u admin -p password system_list
# spacecmd -u admin -p password system_list
INFO: Spacewalk Username: admin
INFO: Connected to https://localhost/rpc/api as admin
test_02.example.com
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Satellite 6 でコマンドラインを使用して利用可能なホストを一覧表示
Satellite 6 で以下のコマンドを使用して、利用可能なホストを一覧表示します。
hammer host list
# hammer host list
Copy to ClipboardCopied!Toggle word wrapToggle overflow
セッションは以下のようになります。
hammer host list
# hammer host list
[Foreman] password for admin:
---|-----------------|-------------------|------------|--------------|------------------
ID | NAME | OPERATING SYSTEM | HOST GROUP | IP | MAC
---|-----------------|-------------------|------------|--------------|------------------
1 | test.example.com | RHEL Server 6.5 | | 10.34.34.235 | e4:1f:13:6b:ed:0c
Copy to ClipboardCopied!Toggle word wrapToggle overflow
この例では、Python スクリプトを使用して Satellite 5 Server に接続し、認証する方法を説明します。ここでは、特定ユーザー (example) を検索し、そのユーザーが存在する場合は削除して再作成し、管理者権限を付与する方法を説明します。
Define Satellite location and login details
Authenticate and get session key
Get list of users
Look for user example and if found, delete the user
Create a user called example
Logout
#!/usr/bin/python
import xmlrpclib
# Define Satellite location and login details
SATELLITE_URL = "http://localhost/rpc/api"
SATELLITE_LOGIN = "admin"
SATELLITE_PASSWORD = "password"
client = xmlrpclib.Server(SATELLITE_URL, verbose=0)
# Authenticate and get session key
key = client.auth.login(SATELLITE_LOGIN, SATELLITE_PASSWORD)
# Get list of users
list = client.user.list_users(key)
print "Existing users in Satellite:"
for user in list:
print user.get('login')
# Look for user example and if found, delete the user
for user in list:
if user.get('login') == 'example':
deleteuser = client.user.delete(key, 'example')
if deleteuser == 1:
print "User example deleted"
# Create a user called example
createuser = client.user.create(key, 'example', 'password', 'Example', 'User', "root@localhost")
if createuser == 1:
print "User example created"
# Admin Org Admin role to the example user
adminrole = client.user.addRole(key, 'example', 'org_admin')
if adminrole == 1:
print "Made example an Org Admin"
# Logout
client.auth.logout(key)
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Satellite 6 での Python を使用したユーザー管理
ここでは、先ほどの例と同じタスクを行います。つまり、Python スクリプトを使用して Satellite 6 Server サーバーに接続し、認証する方法を説明します。特定のユーザーを検索し、そのユーザーが存在する場合は削除して再作成し、管理者権限を付与する方法を説明します。
Define Satellite location and login details
#!/usr/bin/python
import json
import requests
# Define Satellite location and login details
SAT_API = "https://localhost/api/v2/"
POST_HEADERS = {'content-type': 'application/json'}
USERNAME = "admin"
PASSWORD = "changeme"
SSL_VERIFY = False
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 delete_json(location):
"""
Performs a DELETE and passes the id to the URL location
"""
result = requests.delete(
location,
auth=(USERNAME, PASSWORD),
verify=SSL_VERIFY)
return result.json()
def main():
# List all users within the Satellite
users = get_json(SAT_API + "users/")
#print json.dumps(users, indent=4)
print "Users known are:"
for login in users['results']:
print login['login']
# Look for user example and if found, delete the user
for delete in users['results']:
if delete['login'] == 'example':
id = delete ['id']
id = str(id)
delete = delete_json(SAT_API + "/users/" + id)
#print json.dumps(delete, indent=4)
print "User example deleted"
# Create a user called example as admin role
createuser = post_json(SAT_API + "/users/", json.dumps({ "mail": "root@localhost", "firstname": "Example", "lastname": "User", "login": "example", "password": "redhat", "admin": 'true', "auth_source_id": 1 }))
#print json.dumps(createuser, indent=4)
print "Admin user example created"
if __name__ == "__main__":
main()
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Satellite 6 での Ruby を使用したユーザー管理
次に、Ruby を使用して、先ほどの例と同じタスクを実行します。
List all users within the Satellite
Look for user example and if found, delete the user
Create a user called example as admin role
#!/usr/bin/env ruby
require 'json'
require 'rest-client'
url = 'https://localhost/api/v2/'
$username = 'admin'
$password = 'changeme'
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
def delete_json(location)
response = RestClient::Request.new(
:method => :delete,
:url => location,
:user => $username,
:password => $password,
:headers => { :accept => :json,
:content_type => :json }
).execute
results = JSON.parse(response.to_str)
end
# List all users within the Satellite
users = get_json(url+"users/")
#puts JSON.pretty_generate(users)
puts "Users known are:"
users['results'].each do |name|
puts name['login']
end
# Look for user example and if found, delete the user
users['results'].each do |name|
if name['login'] == 'example'
id = name['id']
delete = delete_json(url+"users/"+id.to_s)
#puts JSON.pretty_generate(delete)
puts "User example deleted"
end
end
# Create a user called example as admin role
data = JSON.generate({ :mail => "root@localhost", :firstname => "Example", :lastname => "User", :login => "example", :password => "password", :admin => 'true', :auth_source_id => 1})
createuser = post_json(url+"users/", data)
#puts JSON.pretty_generate(createuser)
puts "Admin user example created"
exit()
Copy to ClipboardCopied!Toggle word wrapToggle overflow
# spacecmd -u admin -p password user_list
INFO: Spacewalk Username: admin
INFO: Connected to https://localhost/rpc/api as admin
admin
example
# spacecmd -u admin -p password user_delete example
INFO: Spacewalk Username: admin
INFO: Connected to https://localhost/rpc/api as admin
Delete this user [y/N]: y
# spacecmd -u admin -p password user_list
INFO: Spacewalk Username: admin
INFO: Connected to https://localhost/rpc/api as admin
admin
# spacecmd -u admin -p password user_create
INFO: Spacewalk Username: admin
INFO: Connected to https://localhost/rpc/api as admin
Username: example
First Name: Example
Last Name: User
Email: root@localhost
PAM Authentication [y/N]: n
Password:
Repeat Password:
# spacecmd -u admin -p password user_list
INFO: Spacewalk Username: admin
INFO: Connected to https://localhost/rpc/api as admin
admin
example
# spacecmd -u admin -p password user_addrole example org_admin
INFO: Spacewalk Username: admin
INFO: Connected to https://localhost/rpc/api as admin
# spacecmd -u admin -p password user_details example
INFO: Spacewalk Username: admin
INFO: Connected to https://localhost/rpc/api as admin
Username: example
First Name: Example
Last Name: User
Email Address: root@localhost
Organization: MY ORG
Last Login:
Created: 8/19/14 8:42:52 AM EDT
Enabled: True
Roles
-----
activation_key_admin
channel_admin
config_admin
monitoring_admin
org_admin
system_group_admin
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Satellite 6 でコマンドラインを使用してユーザーを管理
ここでは、 hammer コマンドを使用して、上の例と同じタスクを実行します。
hammer shell
user list
user delete --id 4 --login example
user create --admin true --firstname Example --lastname User --login example --mail root@localhost --password redhat --auth-source-id 1
# hammer shell
> user list
> user delete --id 4 --login example
> user create --admin true --firstname Example --lastname User --login example --mail root@localhost --password redhat --auth-source-id 1
Copy to ClipboardCopied!Toggle word wrapToggle overflow
セッションは以下のようになります。
hammer shell
# hammer shell
[Foreman] password for admin:
Welcome to the hammer interactive shell
Type 'help' for usage information
hammer> user list
---|---------|--------------|---------------
ID | LOGIN | NAME | EMAIL
---|---------|--------------|---------------
4 | example | Example User | root@localhost
3 | admin | Admin User | root@localhost
---|---------|--------------|---------------
hammer> user delete --id 4 --login example
User deleted
hammer> user list
---|-------|------------|---------------
ID | LOGIN | NAME | EMAIL
---|-------|------------|---------------
3 | admin | Admin User | root@localhost
---|-------|------------|---------------
hammer> user create --admin true --firstname Example --lastname User --login example --mail root@localhost --password redhat --auth-source-id 1
User created
hammer> user list
---|----------|--------------|---------------
ID | LOGIN | NAME | EMAIL
---|----------|--------------|---------------
3 | admin | Admin User | root@localhost
5 | example | Example User | root@localhost
---|----------|--------------|---------------
hammer>
Copy to ClipboardCopied!Toggle word wrapToggle overflow