Web service / API methods
object oriented methods
Since opsi 4 we have to different kinds of API methods:
-
'object oriented' methods
-
'action oriented' methods
opsi has a python library which provides an API for opsi configuration. Documentation for this API regarding python-opsi https://docs.opsi.org/python-docs/python-opsi and opsicommon https://docs.opsi.org/python-docs/python-opsi-common is at docs.opsi.org.
Overview
The opsi4 backends are based on objects. An object has a set of attributes.
As an example serves here the object 'Product'. The object of type 'Product' which describes the opsi package 'javavm' looks for example like this:
"ident": "javavm;1.6.0.20;2"
"id": "javavm"
"description": "Java 1.6"
"changelog": ""
"advice": ""
"userLoginScript": ""
"name": "SunJavaRuntimeEnvironment"
"priority": 0
"packageVersion": "2"
"productVersion": "1.6.0.20"
"windowsSoftwareIds": null
"productClassIds": null
"type": "LocalbootProduct"
"licenseRequired": false
"setupScript": "javavm.ins"
"updateScript": ""
"uninstallScript": "deljvm.ins"
"alwaysScript": ""
"onceScript": ""
"customScript": ""
For each object there is a set of operations. Usually these are:
-
'getObjects': returns a list of objects that match the specified filter. If a list of attributes is specified, only these will be populated from the backend.
-
'getHashes': Like 'getObjects', except that unchecked raw data from the backend is delivered directly. Works more performant than 'getObjects', but should be used with caution.
-
'getIdents' Returns a list of object IDs that match the specified filter. The 'returnType' can be used to select the data structure of the elements in the result. Possible values are: 'unicode', 'list' and 'hash'.
-
insertObject': Creates a new object. If the object already exists, it will be completely overwritten with the new values. Attributes that are not passed (or passed with the value 'null') will be set to 'null' in the backend.
-
updateObject': Updates an object. Attributes that are not passed (or passed with the value 'null'), will not be changed in the backend. If the object does not exist, no change takes place, no object is created.
-
'createObjects': An object or a list of objects can be passed. Each object is passed internally to 'insertObject'.
-
'updateObjects': An object or a list of objects can be passed. Each object is passed internally to 'insertObject' if it does not exist yet, otherwise to 'updateObject'.
-
'create': Creates a new object and takes all possible attributes as single parameters. Internally 'createObjects' is used. Existing objects will be overwritten completely.
-
'deleteObjects': Deletes a list of objects. It is mandatory to pass a list. Only the attributes identifying the object ('type'/'id'/'ident') are used to select the objects to be deleted.
-
'delete': Deletes the object identified by the specified parameters.
To update an object, it is usually a good idea to use the 'updateObjects' method. For example, 'productOnClient_updateObjects' can be used to update the state of a package on a client. Whether the object already exists or not is then irrelevant. |
The names of the methods are composed of:
'<object-type>_<operation>'
Thus they differ from the 'legacy' methods from opsi 3.x which usually start with 'get', 'set' or 'create'.
The 'getObjects' methods have two optional parameters:
-
'attributes'
-
'filter'
The 'attributes' parameter is used to query only certain attributes of the object, which can provide speed advantages. If a list of attributes is specified, only these are read from the backend. The remaining attributes are returned with the value 'null'. Attributes that identify the object ('type'/'id'/'ident') are always filled. If all attributes should be read (default), 'null' or '[]' can be passed as 'attributes'.
Example for the method 'product_getObjects', parameterized with 'attributes:["name"]' for the package ('Product') 'javavm':
"onceScript": null,
"ident": "javavm;1.6.0.20;2",
"windowsSoftwareIds": null,
"description": null,
"setupScript": null,
"changelog": null,
"customScript": null,
"advice": null,
"uninstallScript": null,
"userLoginScript": null,
"name": "Sun Java Runtime Environment",
"priority": null,
"packageVersion": "2",
"productVersion": "1.6.0.20",
"updateScript": null,
"productClassIds": null,
"alwaysScript": null,
"type": "LocalbootProduct",
"id": "javavm",
"licenseRequired": null
If you don’t want to ask for attributes but instead you need to use the second parameter 'filter' you have to pass the attribute parameter as '[]'.
The parameter filter is used to define which objects you want to get. For example if you are using the filter '{"id":"javavm"}' on the method 'product_getObjects' the backend will return the 'Product' object 'javavm' only.
The 'filter' parameter can be used to filter the list of objects. For example, for 'product_getObjects' the filter '{"id": "javavm"}' restricts the return to the object with the ID 'javavm'. Multiple passed filter attributes are 'AND'-linked here. If a list of values is passed for an attribute, this results in an 'OR' operation. For strings, a '*' can be used as a placeholder. If you do not want to filter (default), you can pass 'null' or '{}' as 'filter'.
Example for 'product_getIdents' with filter '{"id":["opsi-client-agent", "opsi-script"], "productVersion": "4.1*"}' ('returnType' = 'hash'):
[
{
"id": "opsi-client-agent",
"productVersion": "4.1.0.0",
"packageVersion": "47"
},
{
"id": "opsi-client-agent",
"productVersion": "4.1.1.40",
"packageVersion": "1"
},
{
"id": "opsi-script",
"productVersion": "4.12.4.21",
"packageVersion": "1"
},
{
"id": "opsi-script",
"productVersion": "4.12.4.23",
"packageVersion": "1"
}
]
For the methods to which one or more objects are passed, this must be done as a JSON object or a list of JSON objects.
The most important objects are:
-
'auditHardwareOnHost' (client specific hardware information)
-
'auditHardware' (client independent hardware information)
-
'auditSoftwareOnClient' (client specific software information)
-
'auditSoftware' (client independent software information)
-
'auditSoftwareToLicensePool' (license management)
-
'configState' (administration of client host parameters)
-
'config' (administration of host parameter defaults)
-
'group' (group administration)
-
'host' (server and clients)
-
'licenseContract' (license management)
-
'licenseOnClient' (license management)
-
'licensePool' (license management)
-
'objectToGroup' (group administration)
-
'productDependency' (product dependencies)
-
'productOnClient' (client specific information to a product e.g. installation state)
-
'productOnDepot' (depot specific information to a product)
-
'productPropertyState' (depot or client specific product property settings)
-
'productProperty' (definition of product properties)
-
'product' (product meta data)
-
'softwareLicenseToLicensePool' (license management)
-
'softwareLicense' (license management)
In addition to the described objects and methods there are some more for special operations.
This design:
-
is created to transfer information about clients (severals) faster
-
filter data with a unified syntax
-
allows to check all input for correct syntax
This results in improved stability and higher performance.
'Host' (server and clients)
Example of a OpsiClient:
method host_getObjects [] {"id":"xpclient.vmnat.local"}
[
{
"ident" : "xpclient.vmnat.local",
"description" : "",
"created" : "2012-03-22 12:13:52",
"inventoryNumber" : "",
"ipAddress" : "172.16.166.101",
"notes" : "Created by opsi-deploy-client-agent at Wed, 24 Aug 2011 10:24:36",
"oneTimePassword" : "",
"lastSeen" : "2012-03-30 16:20:04",
"hardwareAddress" : "00:0c:29:35:70:a7",
"opsiHostKey" : "1234567890abcef1234567890abcdef",
"type" : "OpsiClient",
"id" : "xpclient.vmnat.local"
}
]
Most of this data is displayed on the 'clients' tab of the opsi-configed.
Possible types are:
-
'OpsiClient'
-
'OpsiConfigserver' (which means implicit this is also a 'OpsiDepotserver')
-
'OpsiDepotserver'
The server type have different and additional data.
Example of a server:
method host_getObjects [] {"id":"sepiolina.vmnat.local"}
[
{
"masterDepotId" : null,
"ident" : "sepiolina.vmnat.local",
"networkAddress" : "172.16.166.0/255.255.255.128",
"description" : "",
"inventoryNumber" : "",
"ipAddress" : "172.16.166.1",
"repositoryRemoteUrl" : "webdavs://sepiolina.vmnat.local:4447/repository",
"depotLocalUrl" : "file:///var/lib/opsi/depot",
"isMasterDepot" : true,
"notes" : "",
"hardwareAddress" : null,
"maxBandwidth" : 0,
"repositoryLocalUrl" : "file:///var/lib/opsi/repository",
"opsiHostKey" : "1234567890abcef1234567890abcdef",
"type" : "OpsiConfigserver",
"id" : "sepiolina.vmnat.local",
"depotWebdavUrl" : "webdavs://sepiolina:4447/depot",
"depotRemoteUrl" : "smb://sepiolina/opsi_depot"
}
]
Most of this data is displayed on the 'depot configuration' of the opsi-configed.
'Group' (group administration)
Describes groups and their hierarchical structure. The types 'HostGroup' and 'ProductGroup' exist.
Example of a 'Group' object:
method group_getObjects
[
{
"ident" : "sub2",
"description" : "sub2",
"notes" : "",
"parentGroupId" : null,
"type" : "HostGroup",
"id" : "sub2"
},
{
"ident" : "subsub",
"description" : "subsub",
"notes" : "",
"parentGroupId" : "sub2",
"type" : "HostGroup",
"id" : "subsub"
}
]
'ObjectToGroup' (group membership administration)
Describes the membership of an object in a group. Example of 'ObjectToGroup' objects:
method objectToGroup_getObjects
[
{
"groupType" : "HostGroup",
"ident" : "HostGroup;sub2;win7.vmnat.local",
"type" : "ObjectToGroup",
"groupId" : "sub2",
"objectId" : "win7.vmnat.local"
},
{
"groupType" : "HostGroup",
"ident" : "HostGroup;subsub;win7x64.vmnat.local",
"type" : "ObjectToGroup",
"groupId" : "subsub",
"objectId" : "win7x64.vmnat.local"
},
{
"groupType" : "ProductGroup",
"ident" : "ProductGroup;opsiessentials;opsi-client-agent",
"type" : "ObjectToGroup",
"groupId" : "opsiessentials",
"objectId" : "opsi-client-agent"
},
{
"groupType" : "ProductGroup",
"ident" : "ProductGroup;opsiessentials;opsi-winst",
"type" : "ObjectToGroup",
"groupId" : "opsiessentials",
"objectId" : "opsi-winst"
}
]
'Product' (package meta data)
Describes the meta data of a product which are defined while creating the package.
Example of a product object:
method product_getObjects [] {"id":"jedit","productVersion":"4.5"}
[
{
"onceScript" : "",
"ident" : "jedit;4.5;3",
"windowsSoftwareIds" :
[
],
"description" : "jEdit with opsi-winst Syntax-Highlighting",
"setupScript" : "setup.ins",
"changelog" : "",
"customScript" : "",
"advice" : "",
"uninstallScript" : "uninstall.ins",
"userLoginScript" : "",
"name" : "jEdit programmer's text editor",
"priority" : 0,
"packageVersion" : "3",
"productVersion" : "4.5",
"updateScript" : "update.ins",
"productClassIds" :
[
],
"alwaysScript" : "",
"type" : "LocalbootProduct",
"id" : "jedit",
"licenseRequired" : false
}
]
If you have multiple depot servers, you may have different versions of one product. |
The attributes 'productClassIds' and 'windowsSoftwareIds' are currently unused.
'ProductProperty' (definition of product properties)
Describes the properties of a 'Product'' which are defined while creating the package.
Example of a 'ProductProperty' object:
method productProperty_getObjects [] {"productId":"jedit","productVersion":"4.5"}
[
{
"ident" : "jedit;4.5;3;start_server",
"description" : "Should the jedit server be started at every startup ?",
"editable" : false,
"defaultValues" :
[
false
],
"multiValue" : false,
"productVersion" : "4.5",
"possibleValues" :
[
false,
true
],
"packageVersion" : "3",
"type" : "BoolProductProperty",
"propertyId" : "start_server",
"productId" : "jedit"
}
]
The real default values are stored in the context of the depot in a productPropertyState object. |
'productPropertyState' (depot or client specific package settings)
Describes:
-
The default value for a 'ProductProperty' on a depot
-
The client specific settings of a 'ProductProperty'.
Example for 'ProductPropertyState' objects:
method productPropertyState_getObjects [] {"productId":"jedit"}
[
{
"ident" : "jedit;start_server;sepiolina.vmnat.local",
"objectId" : "sepiolina.vmnat.local",
"values" :
[
false
],
"type" : "ProductPropertyState",
"propertyId" : "start_server",
"productId" : "jedit"
},
{
"ident" : "jedit;start_server;xpclient.vmnat.local",
"objectId" : "xpclient.vmnat.local",
"values" :
[
true
],
"type" : "ProductPropertyState",
"propertyId" : "start_server",
"productId" : "jedit"
}
]
'ProductDependency' (product dependencies)
Describes the dependencies of a package to another package as it is defined while creating the package.
Example of a 'ProductDependency' object:
method productDependency_getObjects [] {"productId":"jedit","productVersion":"4.5"}
[
{
"ident" : "jedit;4.5;3;setup;javavm",
"productAction" : "setup",
"requiredPackageVersion" : null,
"requirementType" : "before",
"requiredInstallationStatus" : "installed",
"productVersion" : "4.5",
"requiredProductId" : "javavm",
"requiredAction" : null,
"requiredProductVersion" : null,
"type" : "ProductDependency",
"packageVersion" : "3",
"productId" : "jedit"
}
]
'productOnClient' (client specific information of a package like the installation status)
Describes which packages and versions are installed on which client.
Example of a 'ProductOnClient' object:
method productOnClient_getObjects [] {"productId":"jedit","clientId":"xpclient.vmnat.local"}
[
{
"ident" : "jedit;LocalbootProduct;xpclient.vmnat.local",
"actionProgress" : "",
"actionResult" : "successful",
"clientId" : "xpclient.vmnat.local",
"modificationTime" : "2012-03-30 15:49:04",
"actionRequest" : "none",
"targetConfiguration" : "installed",
"productVersion" : "4.5",
"productType" : "LocalbootProduct",
"lastAction" : "setup",
"packageVersion" : "3",
"actionSequence" : -1,
"type" : "ProductOnClient",
"installationStatus" : "installed",
"productId" : "jedit"
}
]
'ProductOnDepot' (depot specific package information)
Describes which product is installed in which version on a given depot..
Example of 'ProductOnDepot' objects:
method productOnDepot_getObjects [] {"productId":"jedit"}
[
{
"ident" : "jedit;LocalbootProduct;4.4.1;2;depotserver.vmnat.local",
"locked" : false,
"productVersion" : "4.4.1",
"productType" : "LocalbootProduct",
"depotId" : "depotserver.vmnat.local",
"type" : "ProductOnDepot",
"packageVersion" : "2",
"productId" : "jedit"
},
{
"ident" : "jedit;LocalbootProduct;4.5;3;sepiolina.vmnat.local",
"locked" : false,
"productVersion" : "4.5",
"productType" : "LocalbootProduct",
"depotId" : "sepiolina.vmnat.local",
"type" : "ProductOnDepot",
"packageVersion" : "3",
"productId" : "jedit"
}
]
If you have multiple depot server, you may have different versions of one product. |
'Config' (administration of configurations)
Describes the available configurations.
Example of a 'Config' object:
method config_getObjects [] {"id":"opsiclientd.event_gui_startup.active"}
[
{
"ident" : "opsiclientd.event_gui_startup.active",
"description" : "gui_startup active",
"defaultValues" :
[
true
],
"editable" : false,
"multiValue" : false,
"possibleValues" :
[
false,
true
],
"type" : "BoolConfig",
"id" : "opsiclientd.event_gui_startup.active"
}
]
'ConfigState' (administration of client specific configurations)
Describes the client specific state of a configuration.
Example of an 'ConfigState' object:
method configState_getObjects [] {"configId":"opsiclientd.event_gui_startup.active"}
[
{
"configId" : "opsiclientd.event_gui_startup.active",
"ident" : "opsiclientd.event_gui_startup.active;wanclient.vmnat.local",
"values" :
[
false
],
"objectId" : "wanclient.vmnat.local",
"type" : "ConfigState"
}
]
A 'ConfigState' object can’t be created without an existing 'Config' object to refer to. |
'AuditHardwareOnHost' (client specific hardware information)
Describes the detected hardware types (including the client specific values). The idea is that you can see here the client specific data and in auditHardware
only one entry for a network card which is used in all your computers.
Unfortunately in reality this doesn’t work as you might expect.
The attribute 'state' describes if this is current (value = '1') or historic (value = '0') data.
Example of 'AuditHardwareOnHost' objects:
method auditHardwareOnHost_getObjects [] {"hostId":"xpclient.vmnat.local","hardwareClass":"NETWORK_CONTROLLER","ipAddress":"172.16.166.101"}
[
{
"vendorId" : "1022",
"macAddress" : "00:0C:29:35:70:A7",
"hardwareClass" : "NETWORK_CONTROLLER",
"state" : 1,
"deviceType" : "PCI",
"subsystemVendorId" : "2000",
"ipEnabled" : "True",
"type" : "AuditHardwareOnHost",
"firstseen" : "2012-03-30 15:48:15",
"revision" : "10",
"hostId" : "xpclient.vmnat.local",
"vendor" : "Advanced Micro Devices (AMD)",
"description" : "Ethernetadapter der AMD-PCNET-Familie",
"subsystemDeviceId" : "1022",
"deviceId" : "2000",
"autoSense" : null,
"netConnectionStatus" : "Connected",
"maxSpeed" : null,
"name" : "Ethernetadapter der AMD-PCNET-Familie",
"serialNumber" : null,
"lastseen" : "2012-03-30 15:48:15",
"model" : null,
"ipAddress" : "172.16.166.101",
"adapterType" : "Ethernet 802.3"
},
{
"vendorId" : "1022",
"macAddress" : "00:0C:29:35:70:A7",
"hardwareClass" : "NETWORK_CONTROLLER",
"state" : 0,
"deviceType" : "PCI",
"subsystemVendorId" : "2000",
"ipEnabled" : "True",
"type" : "AuditHardwareOnHost",
"firstseen" : "2012-03-08 14:26:14",
"revision" : "10",
"hostId" : "xpclient.vmnat.local",
"vendor" : "VMware, Inc.",
"description" : "VMware Accelerated AMD PCNet Adapter",
"subsystemDeviceId" : "1022",
"deviceId" : "2000",
"autoSense" : null,
"netConnectionStatus" : "Connected",
"maxSpeed" : null,
"name" : "VMware Accelerated AMD PCNet Adapter",
"serialNumber" : null,
"lastseen" : "2012-03-10 14:47:15",
"model" : null,
"ipAddress" : "172.16.166.101",
"adapterType" : "Ethernet 802.3"
},
{
"vendorId" : "1022",
"macAddress" : "00:0c:29:35:70:a7",
"hardwareClass" : "NETWORK_CONTROLLER",
"state" : 0,
"deviceType" : null,
"subsystemVendorId" : "1022",
"ipEnabled" : null,
"type" : "AuditHardwareOnHost",
"firstseen" : "2012-02-29 15:43:21",
"revision" : "10",
"hostId" : "xpclient.vmnat.local",
"vendor" : "Advanced Micro Devices [AMD]",
"description" : "Ethernet interface",
"subsystemDeviceId" : "2000",
"deviceId" : "2000",
"autoSense" : "",
"netConnectionStatus" : "yes",
"maxSpeed" : null,
"name" : "79c970 [PCnet32 LANCE]",
"serialNumber" : "00:0c:29:35:70:a7",
"lastseen" : "2012-03-30 14:58:30",
"model" : "79c970 [PCnet32 LANCE]",
"ipAddress" : "172.16.166.101",
"adapterType" : ""
}
]
'AuditHardware' (client independent hardware information)
Describes the detected hardware types (independent from client specific values). The idea in this object is to see client specific data and in AuditHardware
only the generic. That way, for example, you can see here only one entry for a network card, which is used in all your computers.
Unfortunately in reality this idea doesn’t work as you might expect.
Example of 'AuditHardware' objects:
method auditHardware_getObjects [] {"hardwareClass":"NETWORK_CONTROLLER","vendorId":"1022"}
[
{
"vendorId" : "1022",
"deviceId" : "2000",
"maxSpeed" : null,
"vendor" : "Advanced Micro Devices [AMD]",
"name" : "79c970 [PCnet32 LANCE]",
"subsystemDeviceId" : "2000",
"deviceType" : null,
"subsystemVendorId" : "1022",
"autoSense" : "",
"model" : "79c970 [PCnet32 LANCE]",
"revision" : "10",
"type" : "AuditHardware",
"hardwareClass" : "NETWORK_CONTROLLER",
"adapterType" : "",
"description" : "Ethernet interface"
},
{
"vendorId" : "1022",
"deviceId" : "2000",
"maxSpeed" : null,
"vendor" : "VMware, Inc.",
"name" : "VMware Accelerated AMD PCNet Adapter",
"subsystemDeviceId" : "1022",
"deviceType" : "PCI",
"subsystemVendorId" : "2000",
"autoSense" : null,
"model" : null,
"revision" : "10",
"type" : "AuditHardware",
"hardwareClass" : "NETWORK_CONTROLLER",
"adapterType" : "Ethernet 802.3",
"description" : "VMware Accelerated AMD PCNet Adapter"
},
{
"vendorId" : "1022",
"deviceId" : "2000",
"maxSpeed" : null,
"vendor" : "Advanced Micro Devices (AMD)",
"name" : "Ethernetadapter der AMD-PCNET-Familie",
"subsystemDeviceId" : "1022",
"deviceType" : "PCI",
"subsystemVendorId" : "2000",
"autoSense" : null,
"model" : null,
"revision" : "10",
"type" : "AuditHardware",
"hardwareClass" : "NETWORK_CONTROLLER",
"adapterType" : "Ethernet 802.3",
"description" : "Ethernetadapter der AMD-PCNET-Familie"
},
{
"vendorId" : "1022",
"deviceId" : "2000",
"maxSpeed" : null,
"vendor" : "Advanced Micro Devices (AMD)",
"name" : "Ethernetadapter der AMD-PCNET-Familie",
"subsystemDeviceId" : "1022",
"deviceType" : "PCI",
"subsystemVendorId" : "2000",
"autoSense" : null,
"model" : null,
"revision" : "10",
"type" : "AuditHardware",
"hardwareClass" : "NETWORK_CONTROLLER",
"adapterType" : "Ethernet 802.3",
"description" : "Ethernetadapter der AMD-PCNET-Familie"
},
{
"vendorId" : "1022",
"deviceId" : "2000",
"maxSpeed" : null,
"vendor" : "Advanced Micro Devices (AMD)",
"name" : null,
"subsystemDeviceId" : "2000",
"deviceType" : "PCI",
"subsystemVendorId" : "1022",
"autoSense" : null,
"model" : "",
"revision" : null,
"type" : "AuditHardware",
"hardwareClass" : "NETWORK_CONTROLLER",
"adapterType" : null,
"description" : "Ethernetadapter der AMD-PCNET-Familie"
},
(....)
[
'AuditSoftwareOnClient' (client specific software information)
Describes the detected software types (including the client specific values). The idea is that you will see here the client specific data and in auditSoftware
only one entry for a office software which is used in all your computers.
Example of 'AuditSoftwareOnClient' objects:
method auditSoftwareOnClient_getObjects [] {"name":"jEdit 4.5.0","clientId":"xpclient.vmnat.local"}
[
{
"ident" : "jEdit 4.5.0;4.5.0;;;x86;xpclient.vmnat.local",
"licenseKey" : "",
"name" : "jEdit 4.5.0",
"uninstallString" : "\\\"C:\\\\Programme\\\\jEdit\\\\unins000.exe\\\"",
"usageFrequency" : -1,
"clientId" : "xpclient.vmnat.local",
"lastUsed" : "0000-00-00 00:00:00",
"subVersion" : "",
"language" : "",
"state" : 1,
"version" : "4.5.0",
"lastseen" : "2012-03-30 16:19:55",
"binaryName" : "",
"type" : "AuditSoftwareOnClient",
"firstseen" : "2012-03-30 16:19:55",
"architecture" : "x86"
}
]
'AuditSoftware' (client independent software information)
Describes the detected software types (independent from the client specific values). The idea is that you will see here only one entry for a office software which is used in all your computers.
Example of 'AuditSoftware' objects:
method auditSoftware_getObjects [] {"name":"jEdit 4.5.0"}
[
{
"windowsDisplayVersion" : "4.5.0",
"ident" : "jEdit 4.5.0;4.5.0;;;x64",
"name" : "jEdit 4.5.0",
"windowsSoftwareId" : "jedit_is1",
"windowsDisplayName" : "jEdit 4.5.0",
"installSize" : -1,
"subVersion" : "",
"language" : "",
"version" : "4.5.0",
"architecture" : "x64",
"type" : "AuditSoftware"
},
{
"windowsDisplayVersion" : "4.5.0",
"ident" : "jEdit 4.5.0;4.5.0;;;x86",
"name" : "jEdit 4.5.0",
"windowsSoftwareId" : "jedit_is1",
"windowsDisplayName" : "jEdit 4.5.0",
"installSize" : -1,
"subVersion" : "",
"language" : "",
"version" : "4.5.0",
"architecture" : "x86",
"type" : "AuditSoftware"
}
]
'AuditSoftwareToLicensePool' (license management)
Describes which license pools are assingned to which 'AuditSoftware' patterns.
Example of 'AuditSoftwareToLicensePool' objects:
method auditSoftwareToLicensePool_getObjects [] {"licensePoolId":"win7-msdn-prof"}
[
{
"ident" : "Windows 7 Professional N;6.1;00376-165;de-DE;x64;win7-msdn-prof",
"name" : "Windows 7 Professional N",
"language" : "de-DE",
"subVersion" : "00376-165",
"licensePoolId" : "win7-msdn-prof",
"version" : "6.1",
"architecture" : "x64",
"type" : "AuditSoftwareToLicensePool"
},
{
"ident" : "Windows 7 Professional N;6.1;00376-165;de-DE;x86;win7-msdn-prof",
"name" : "Windows 7 Professional N",
"language" : "de-DE",
"subVersion" : "00376-165",
"licensePoolId" : "win7-msdn-prof",
"version" : "6.1",
"architecture" : "x86",
"type" : "AuditSoftwareToLicensePool"
}
]
'SoftwareLicenseToLicensePool' (license management)
Describes which 'softwareLicenseId' is assingned to which 'licensePoolId'.
Example of a 'SoftwareLicenseToLicensePool' object:
method softwareLicenseToLicensePool_getObjects [] {"licensePoolId":"win7-msdn-prof"}
[
{
"licensePoolId" : "win7-msdn-prof",
"softwareLicenseId" : "uib-msdn-win7-vol",
"ident" : "uib-msdn-win7-vol;win7-msdn-prof",
"licenseKey" : "12345-12345-12345-12345-3dbv6",
"type" : "SoftwareLicenseToLicensePool"
}
]
'SoftwareLicense' (license management)
Describes the existing software licenses and their meta data.
Example of a 'softwareLicense' object:S
method softwareLicense_getObjects [] {"id":"uib-msdn-win7-vol"}
[
{
"ident" : "uib-msdn-win7-vol;msdn-uib",
"maxInstallations" : 0,
"boundToHost" : null,
"expirationDate" : "0000-00-00 00:00:00",
"licenseContractId" : "msdn-uib",
"type" : "VolumeSoftwareLicense",
"id" : "uib-msdn-win7-vol"
}
]
'LicenseContract' (license management)
Describes the existing licenses contracts and their meta data.
Example of a 'LicenseContract' object:
method licenseContract_getObjects [] {"id":"msdn-uib"}
[
{
"ident" : "msdn-uib",
"description" : "",
"conclusionDate" : "2011-04-22 00:00:00",
"notificationDate" : "0000-00-00 00:00:00",
"notes" : "",
"expirationDate" : "0000-00-00 00:00:00",
"partner" : "Microsoft",
"type" : "LicenseContract",
"id" : "msdn-uib"
}
]
'LicenseOnClient' (license management)
Describes which license is used by which client.
Example of a 'LicenseOnClient' object:
method licenseOnClient_getObjects [] {"clientId":"win7client.vmnat.local"}
[
{
"softwareLicenseId" : "uib-msdn-win7-vol",
"ident" : "uib-msdn-win7-vol;win7-msdn-prof;win7client.vmnat.local",
"licenseKey" : "12345-12345-12345-12345-3dbv6",
"notes" : "",
"clientId" : "win7client.vmnat.local",
"licensePoolId" : "win7-msdn-prof",
"type" : "LicenseOnClient"
}
]
'LicensePool' (license management)
Describes the license pool and to which opsi product the license pool is assigned.
Example of a 'LicensePool' object:
method licensePool_getObjects [] {"id":"win7-msdn-prof"}
[
{
"ident" : "win7-msdn-prof",
"type" : "LicensePool",
"description" : "MSDN Keys",
"productIds" :
[
"win7",
"win7-x64"
],
"id" : "win7-msdn-prof"
}
]
Special methods
Opsi has some special methods. This chapter will introduce some of the more important ones.
'configState_getClientToDepotserver'
This is in fact also a storage object, but it’s a little aside of the standard. It tells us to which depot a client is currently assigned.
The syntax is
method configState_getClientToDepotserver *depotIds *clientIds
*masterOnly *productIds
Example:
method configState_getClientToDepotserver [] "pcbon4.uib.local"
[
{
"depotId" : "bonifax.uib.local",
"alternativeDepotIds" :
[
],
"clientId" : "pcbon4.uib.local"
}
]
Communication with hosts
The 'hostControl' methods are used to communicate and control the clients.
Since opsi 4.0.3 we strongly recommend to use the 'hostControlSafe' methods.
All 'hostControlSafe' or 'hostControl' Methods have as last parameter the hostIds
. The hostIds
are the list of clients this method should work on.
In all 'hostControlSafe' methods this parameter is not optional, if you want to send a method to all clients you have to give a "*"
. In the older 'hostControl' methods it is allowed to omit this parameter, which means 'send to all'. This has caused some trouble to people which tried this with methods like
'hostControl_reboot'. So with opsi 4.0.3 we broke the backward compatibility and now an empty hostIds
is not any more allowed for the 'hostControl_reboot' and 'hostControl_shutdown' methods.
-
hostControlSafe_execute
Excute a command on the client.
Connect to the opsiclientd of the givenhostIds
and tell them to startcommand
.
Parameters:command hostIds
-
hostControlSafe_fireEvent
Starts a opsiclientd event on the client.
Connect the opsiclientd of the givenhostIds
and tell them to start theevent
.
In case the client is currently processing another event which is in a cancelable state, it will cancel this event execution and instead fire the new event. A cancelable state is a state where either no data was changed and no actions were executed, or it is a waiting state of an event which hasprocessActions = False
(e.g.sync
,sync_completed
).
Parameters: event hostIds
-
hostControlSafe_getActiveSessions
Get information of the logged on users on the client.
Connect the opsiclientd of the givenhostIds
and ask for the active sessions.
Parameters:hostIds
-
hostControlSafe_opsiclientdRpc
Run the web servicemethod
of the opsiclientd.
Connect the opsiclientd of the givenhostIds
and tell them to run the web servicemethod
using the givenparameters
. This is the most generic 'hostControlSafe' method, because you may start any possible method. The best way to find out what is possible, is to have a look at control interface https://<clientId>:4441
Parameters:method *params hostIds
-
hostControlSafe_reachable
Checks if the opsiclientd is reachable.
Connect the opsiclientd of the givenhostIds
but do not login.
Parameters:hostIds
-
hostControlSafe_reboot
Reboot the clients.
Connect the opsiclientd of the givenhostIds
and starts a reboot.
Parameters:hostIds
-
hostControlSafe_showPopup
Shows a pop up message on the clients.
Connect the opsiclientd of the givenhostIds
and starts a pop up windows with themessage
.
Parameters:message hostIds
-
hostControlSafe_shutdown
Shutdown the clients.
Connect the opsiclientd of the givenhostIds
and starts a shutdown.
Parameters:hostIds
-
hostControlSafe_start
Sends a 'wakeOnLan' signal the clients.
This is the only 'hostControlSafe' method that is not use by the opsiclientd from a client.
Parameters:hostIds
-
hostControlSafe_uptime
Asks for the clients uptime.
Connect the opsiclientd of the givenhostIds
and get the clients uptime in seconds.
Parameters:hostIds
'log_read' / 'log_write'
-
log_read
Reads a opsi log file from the server.
Parameters:logType *objectId *maxSize
Possible logTypes are 'instlog' (opsi-winst), 'clientconnect' (opsiclientd), 'userlogin', 'bootimage', 'opsiconfd'. The 'objectId' is normally the 'clientId' to which the log belongs. -
log_write
Writes a opsi log file to the server.
Parameters:logType data *objectId *append
Logtypes and objectId see above,append
(true/false) (Default = false) should the log be appended to an existing log.
Tutorial: Working with groups
The following tutorial will show how to use the opsi interface from the commandline and work with groups of hosts in opsi.
We want to work with group objects and therefore need to work with those functions whose names start with 'group'. Opsi does distinguish between groups of the type 'ProductGroup' and 'HostGroup'. The first is used for product groupings and the last is used for grouping hosts.
Creating a group of hosts is possible through the method group_createHostGroup. The parameters of the method are 'id', a 'description', 'notes' and the 'parentGroupId' (ID of the parent group). Only the ID is required - everything else is optional. The ID is also the name of the group.
In opsi 4.0 groups are identified by their ID. This ID must be unique throughout the opsi groups. |
To create a first group from the commandline we can now issue the following command:
opsi-admin -d method group_createHostGroup rechner_wenselowski "Nikos computer"
To check if our group was created we use group_getObjects.
opsi-admin -d method group_getObjects '' '{"id": "rechner_*", "type": "HostGroup"}'
To create some hierarchy we need to also specify the ID of the parent group.
opsi-admin -d method group_createHostGroup "rechner_wenselowski2" "Undergroup" "" "rechner_wenselowski"
We can use the call to group_getObjects from earlier to see that our group was indeed created.
Opsi has a default group that behaves like a directory service - i.e. OpenLDAP - that means, that a client can only be member of one group. There is a root group with the ID clientdirectory that assumes that exact behavior for any group / client inside. Any client not in a subgroup of clientdirectory will be moved to another special group with the ID NOT_ASSIGNED. Anyone working with that groups is responsible that clients are not member of multiple subgroups of clientdirectory.
Working with the clients is easy now. You probably have noticed that our earlier query to opsi did not show us any signs of clients. That is because the assignment from a client to a group is taken care of another type of object: objectToGroup.
To have a client at hand we will first create one:
opsi-admin -d method host_createOpsiClient "wenselowski-test.uib.local"
This client we now want to add to the group we created previously.
opsi-admin -d method objectToGroup_create "HostGroup" "rechner_wenselowski2" "wenselowski-test.uib.local"
Noticed the HostGroup as the first parameter? That is again our group type. To check if the creation was successful we can execute the following command:
opsi-admin -d method objectToGroup_getObjects '' '{"groupType": "HostGroup", "groupId": "rechner_wenselowski2"}'
If for some reason we want to remove a client we can do this as well. Just execute the following:
opsi-admin -d method objectToGroup_delete "HostGroup" "rechner_wenselowski2" "wenselowski-test.uib.local"
Finally you may want to clean up the groups we created earlier. The following statements will do this for you:
opsi-admin -d method group_delete "rechner_wenselowski"
Action oriented methods
The action oriented methods where introduced in opsi 3. These methods are still available and will still be maintained. Technically methods are mapped to the 'object oriented' methods internally.
Here comes a short list of some methods with a short description. This is meant mainly for orientation and not as a complete reference. The short description does not necessarily provide all information you need to use this method.
method authenticated
Check whether the authentication on the server was successful or not.
method createClient clientName domain
Creates a new client.
method createGroup groupId, members = [], description = ""
Creates a group of clients (as used by the opsi-Configed).
method createLicenseKey productId licenseKey
Assigns an (additional) license key to the product 'productId'.
method createLocalBootProduct productId name productVersion packageVersion licenseRequired=0 setupScript="" uninstallScript="" updateScript="" alwaysScript="" onceScript="" priority=10 description="" advice="" productClassNames=('localBoot')
Creates a new localBoot product (opsi-winst product).
method createNetBootProduct productId name productVersion packageVersion licenseRequired=0 setupScript="" uninstallScript="" updateScript="" alwaysScript="" onceScript="" priority=10 description="" advice="" productClassNames=('netboot')
Creates a new netBoot (boot image) product.
method createProduct productType productId name productVersion packageVersion licenseRequired=0 setupScript="" uninstallScript="" updateScript="" alwaysScript="" onceScript="" priority=10 description="" advice="" productClassNames=""
Creates a new product.
method createProductDependency productId action requiredProductId="" requiredProductClassId="" requiredAction="" requiredInstallationStatus="" requirementType=""
Creates product dependencies.
method createProductPropertyDefinition productId name description=None defaultValue=None possibleValues=[]
Creates product properties.
method deleteClient clientId
Deletes a client.
method deleteGeneralConfig objectId
Deletes a client configuration or domain configuration.
method deleteGroup groupId
Deletes a client group.
method deleteHardwareInformation hostId
Deletes all hardware information for the computer <hostid>.
method deleteLicenseKey productId licenseKey
Deletes a license key for product <productId>.
method deleteProduct productId
Deletes a product from the data base.
method deleteProductDependency productId action requiredProductId="" requiredProductClassId="" requirementType=""
Deletes product dependencies.
method deleteProductPropertyDefinition productId name
method deleteProductPropertyDefinitions productId
Deletes a single property or all properties from the product <productId>.
method deleteServer serverId
Deletes a server configuration
method exit
Quit 'opsi-admin'.
method getBackendInfos_listOfHashes
Supplies information about the available backends of the opsi depot server and which of them are activated.
method getClientIds_list
Supplies a list of clients which meet the assigned criteria.
method getClients_listOfHashes
Supplies an extended list of clients which meet the assigned criteria (with description, notes and 'last seen' for each client).
method getDomain hostId
Supplies the computer domain.
method getGeneralConfig_hash objectId
Supplies the general configuration of a client or a domain.
method getGroupIds_list
Supplies the list of saved client groups.
method auditHardwareOnHost_getObjects '[]' '{"hostId":"<hostId>"}'
Supplies the hardware information of the specified computer.
method getHostId hostname
Supplies the hostid of the specified host name.
method getHost_hash hostId
List of properties of the specified computer.
method getHostname hostId
Supplies the host name of the specified host id.
method getInstallableLocalBootProductIds_list clientId
Supplies a list of all localBoot products that could be installed on the client.
method getInstallableNetBootProductIds_list clientId
Supplies a list of all netBoot products that could be installed on the client.
method getInstallableProductIds_list clientId
Supplies a list of all products that could be installed on the client.
method getInstalledLocalBootProductIds_list hostId
Supplies a list of all localBoot products that are installed on the client.
method getInstalledNetBootProductIds_list hostId
Supplies a list of the installed netBoot products of a client or server.
method getInstalledProductIds_list hostId
Supplies a list of the installed products for a client or server.
method getIpAddress hostId
Supplies the IP address of a host.
method getLicenseKey productId, clientId
Supplies an available license key of the specified product or the product license key which is assigned to the client.
method getLicenseKeys_listOfHashes productId
Supplies a list of all license keys for the specified product.
method getLocalBootProductIds_list
Supplies a list of all known localBoot products.
method getLocalBootProductStates_hash clientIds = []
Supplies for all clients the installation status and action request of all localBoot products.
method getMacAddresses_list hostId
Supplies the MAC address of the specified computer.
method getNetBootProductIds_list
Supplies a list of all NetBoot products.
method getNetBootProductStates_hash clientIds = []
Supplies for all clients the installation status and action request of all netBoot products.
method getNetworkConfig_hash objectId
Supplies the network specific configurations of a client or a domain.
method getOpsiHostKey hostId
Supplies the pckey of the specified hostid.
method getPcpatchPassword hostId
Supplies the password of 'pcpatch' (encrypted with the 'pckey' of 'hostId').
method getPossibleMethods_listOfHashes
Supplies the list of callable methods (approximately like in this chapter).
method getPossibleProductActionRequests_list
Lists the available action requests of opsi.
method getPossibleProductActions_hash
Supplies the available actions for each product ('setup', 'uninstall' , ….).
method getPossibleProductActions_list productId=softprod
Supplies the list of all actions ('setup', 'uninstall',….).
method getPossibleProductInstallationStatus_list
Supplies the list of all installation states ('installed', 'not_installed',… )
method getPossibleRequirementTypes_list
Supplies the list of types of product requirement ('before', 'after', … )
method getProductActionRequests_listOfHashes clientId
Supplies the list of upcoming actions of the specified client.
method getProductDependencies_listOfHashes
Supplies the list of product dependencies of all or the specified product.
method getProductIds_list
Supplies a list of products which meet the specified criteria.
method getProductInstallationStatus_hash productId hostId
Supplies the installation status for the specified client and product.
method getProductInstallationStatus_listOfHashes hostId
Supplies the installation status of the specified client.
method getProductProperties_hash productId
Supplies the product properties of the specified product and client.
method getProductPropertyDefinitions_hash
Supplies all known product properties with description, allowed values,…
method getProductPropertyDefinitions_listOfHashes productId
Supplies the product properties of the specified product with description, allowed values,… .
method getProductStates_hash clientIds = []
Supplies installation status and action requests of all products (for the specified clients).
method getProduct_hash productId
Supplies the meta data (description, version, …) of the product
method getProvidedLocalBootProductIds_list serverId
Supplies a list of available localBoot products on the specified server.
method getProvidedNetBootProductIds_list serverId
Supplies a list of available netBoot products on the specified server.
method getServerId clientId
Supplies the opsi-configserver in charge of the specified client.
method getServerIds_list
Supplies a list of the known opsi-configserver.
method powerOnHost mac
Send a WakeOnLan signal to the specified MAC address.
method setGeneralConfig config
Set for client or domain the generalConfig
method setHostDescription hostId
Set a description for a client.
method setHostLastSeen hostId timestamp
Set the 'last seen' time stamp of a client.
method setHostNotes hostId notes
Set the notes for a client.
method setMacAddresses hostId macs
Set the client MAC address in the data base.
method setOpsiHostKey hostId opsiHostKey
Set the 'pckey' for a computer.
method setPcpatchPassword hostId password
Set the encrypted (!) 'password' for 'hostId'
method setProductActionRequest productId clientId actionRequest
Set an action request for the specified client and product.
method setProductInstallationStatus productId hostId installationStatus policyId="" licenseKey=""
Set an installation status for the specified client and product.
method setProductProperties productId properties
Set the product properties for the specified product (and the specified client).
method unsetProductActionRequest productId clientId
Set the Action-Request to 'none'.
Backend extensions
opsi 4 brings the feature of a backend extender that allows to extend to core functionality through additional methods that will be served as an extension to the API.
The set of standard API methods will be created through 'opsiconfd'
by overlaying the in the .conf
-files in '/etc/opsi/backendManager/extend.d'
defined methods.
Backend extensions can be used to implement specific tasks for additional features.
These extensions have to be written as Python code.
Extensions are loaded "on to" an BackendManager-instance and can
reference it with self
.
Accessing the API
The API uses JSON-RPC 2.0 over HTTPS for communication. We use basic authentication.
To use this interface POST your calls to the path rpc
of your opsi
server, i.e. https://<opsi-server-address>:4447/rpc
.