16 Oracle Linux Manager XML/RPC API

WARNING:

The software described in this documentation is supported for a limited period under Extended Support. Oracle Linux 7 is now in Extended Support. See Oracle Linux Extended Support and Oracle Open Source Support Policies for more information.

Consider using OS Management Hub to manage operating system infrastructure. See OS Management Hub for more information.

If you are an advanced user, you can use Oracle Linux Manager XML/RPC API to create web interfaces and scripts to perform or automate tasks. More information about the API is available at https://olmsvr_FQDN/rpc/api on an Oracle Linux Manager server.

For example, the following get-channel-summaries Python script uses the API to obtain a list of channels, the numbers of packages in each channel, and the number of systems that are subscribed to each channel:

#!/usr/bin/python
#
#  get-channel-summaries [--server URL <url>] [--username <user>] [--password <passwd>]

import getopt, struct, sys, xmlrpclib
from array import *

# Insert default values for Oracle Linux Manager server API URL,
# Oracle Linux Manager admin user name, and Oracle Linux Manager admin password
url = "https://olmsvr.mydom.com/rpc/api"
username = "swadmin"
password = "swadmin"

usage1 = "Usage: get-channel-summaries [--serverUrl <url>] \\\n"
usage2 = "         [--username <user>] [--password <passwd>]"

try:
    opts,args = getopt.getopt(sys.argv[1:],"s:u:p:",["serverUrl=","username=","password="])
except getopt.GetoptError as err:
    print(usage1+usage2)
    sys.exit(1)

for o,a in opts:
    if o in ("-s", "--serverUrl"):
        url = a
    elif o in ("-u", "--username"):
        username = a
    elif o in ("-p", "--password"):
        password = a
    else:
        assert False, "Unknown option"

# Connect to Oracle Linux Manager
client = xmlrpclib.Server(url,verbose=0)
session = client.auth.login(username,password)

# Get channel list
channels = client.channel.listAllChannels(session)

# Build channel arrays indexed by channel ID
channel_label = {}
channel_packages = {}
channel_systems = {}

for channel in channels:
    channel_label[channel['id']] =  channel['label']
    channel_packages[channel['id']] =  channel['packages']
    channel_systems[channel['id']] =  channel['systems']

# Print output header
fmt1 = '{0:<40s}{1:<10s}{2:<10s}'
print fmt1.format('Channel label','Packages','Systems')
print fmt1.format('-------------','--------','-------')

# Print channel label, package count, and system count -- sorted by label
fmt2 = '{0:<40s}{1:<10d}{2:<10d}'
for key,value in sorted(channel_label.iteritems(),key=lambda(k,v): (v,k)):
    id = int(key)
    print fmt2.format(value,channel_packages[id],channel_systems[id])

# Disconnect from Oracle Linux Manager
client.auth.logout(session)

The following is sample output from running this script:

Channel label                           Packages  Systems   
-------------                           --------  ------- 
base-channel                            0         0
epel6-channel-label                     68        0
epel6-channel1-label                    3         0
epel6-channel2-label                    1         0
ol5-i386-channel-label                  44        0
ol5-i386-test-label                     34        0
ol5-x64-channel-label                   44        0
ol6-i386-channel-label                  45        0
ol6-x64-channel-label                   45        1
ol7-channel-label                       45        1
oraclelinux6-x86_64                      0        0
oraclelinux6-x86_64-addons               0        0
oraclelinux6-x86_64-spacewalk22-client   0        0
oraclelinux6-x86_64-spacewalk22-server   0        0
oraclelinux6-x86_64-spacewalk24-client   0        0
oraclelinux6-x86_64-spacewalk24-server   0        0
oraclelinux6-x86_64-spacewalk26-client   0        0
oraclelinux6-x86_64-spacewalk26-server   0        0
oraclelinux6-x86_64-spacewalk27-server   0        0
uln-channel-label                        173      0

The following example shows the get-reposync-list script, which displays the schedules for synchronizing repositories.

#!/usr/bin/python
#
#  get-reposync-list [--serverUrl <url>] [--username <user>] [--password <passwd>]

import getopt, struct, sys, xmlrpclib
from array import *

# Insert default values for Oracle Linux Manager server API URL,
# Oracle Linux Manager admin user name, and Oracle Linux Manager admin password
url = "https://olmsvr.mydom.com/rpc/api"
username = "swadmin"
password = "swadmin"

usage1 = "Usage: get-reposync-list [--serverUrl <url>] \\\n"
usage2 = "         [--username <user>] [--password <passwd>]"

try:
    opts,args = getopt.getopt(sys.argv[1:],"s:u:p:",["serverUrl=","username=","password="])
except getopt.GetoptError as err:
    print(usage1+usage2)
    sys.exit(1)

for o,a in opts:
    if o in ("-s", "--serverUrl"):
        url = a
    elif o in ("-u", "--username"):
        username = a
    elif o in ("-p", "--password"):
        password = a
    else:
        assert False, "Unknown option"

# Connect to Oracle Linux Manager
client = xmlrpclib.Server(url,verbose=0)
session = client.auth.login(username,password)

# Get channel list
channels = client.channel.listAllChannels(session)

# Build channel name array indexed by channel ID
channel_label = {}
channel_schedule = {}

for channel in channels:
    id = int(channel['id'])
    channel_label[id] =  channel['label']
    channel_schedule[id] = ''

# Get repository synchronization list
schedules = client.taskomatic.org.listActiveSchedulesByBunch(session,'repo-sync-bunch')

# Construct schedule array indexed by channel ID
for schedule in schedules:
    channel_schedule[int(schedule['data_map']['channel_id'])] = schedule['cron_expr']

# Print output header
fmt = '{0:<40s}{1:<40s}'
print fmt.format('Channel label','Schedule')
print fmt.format('-------------','--------')

# Print channel labels and repository synchronization schedule (if defined)
for key,value in sorted(channel_label.iteritems(),key=lambda(k,v):(v,k)):
    id = int(key)
    sched = channel_schedule[id]
    if (len(sched) > 0):
        print fmt.format(value,sched)
    else:
        print fmt.format(value,"Sync not scheduled")

# Disconnect from Oracle Linux Manager
client.auth.logout(session)

The following example shows what the output of this command might look like:

Channel label                           Schedule                                
-------------                           --------                                
oraclelinux6-x86_64                     0 30 0 ? * *                     
oraclelinux6-x86_64-addons              0 30 2 ? * *                      
oraclelinux6-x86_64-mysql               0 30 4 ? * *                      
oraclelinux6-x86_64-playground          0 30 3 ? * *                      
oraclelinux6-x86_64-spacewalk24-client  0 0 5 ? * *                      
oraclelinux6-x86_64-spacewalk24-server  0 30 5 ? * *                      
oraclelinux6-x86_64-spacewalk26-client  0 0 2 ? * *                    
oraclelinux6-x86_64-spacewalk26-server  0 0 3 ? * * 
oraclelinux6-x86_64-spacewalk27-server  0 0 4 ? * *                       
oraclelinux6-x86_64-uek                 0 0 5 ? * *                      
oraclelinux6-x86_64-uek-r3              0 30 1 ? * *                      
...