Design

Die Architektur entspricht der klassischen Schicht-Architektur, wie sie viele andere Anwendungen auch zeigen. Zuunterst liegt die Datenbasis in Form des opsi-Servers, darauf eine vergleichsweise dünne Abstraktionsschicht, die die die…

Server

Das server-Modul kapselt die Kommunikation mit opsi-Servern.

Die Kommunikation über das JSON-RPC-Backend übernimmt die Klasse opus.server.Server, sie agiert quasi als DB-Schicht.

class opus.server.Server(url: str, username: str, password: str)[Quellcode]

Server-Verbindung.

Eine Server-Instanz hält die Zugangsdaten für einen JSONRPC-Aufruf, öffnet allerdings keine Verbindung. Dies erfolgt in den jeweiligen Methoden, die eine Payload vorbereiten und an __rpc_request übergeben.

server = Server(url, username, password)
client_ids = server.clients()
addClientToGroup(client_id, group_id)[Quellcode]

add a client to a group

Parameter
  • client_id (str) – client id

  • group_id (str) – group id

Rückgabe

JSONRPC result

clientGroupMembers(group_id)[Quellcode]

return a list with clients in a group

Parameter

group_id (str) – group id

Rückgabe

list of ObjectToGroup instances (these a Client instances)

Relevant attributes:

  • objectId: id of the Client instance

clientGroups(group_id='')[Quellcode]

return a list of client groups

Parameter

group_id (str) – group id

Rückgabe

list of HostGroup instances

Relevant attributes/methods:

  • id: id of the group; index 0 is the main clientdirectory

  • description: group description

clients()[Quellcode]

return a list with all client ids

Rückgabe

list with opsi client infos

fireEvent(client_ids, event='on_demand')[Quellcode]

fire the given event for given clients

Parameter
  • client_ids (list) – list with client ids

  • event (str) – event (default: on_demand); values are: panic, software_on_demand, sync_completed, on_shutdown, silent_install, gui_startup

Rückgabe

JSONRPC result

installProductOnClient(client_id, product_id)[Quellcode]

install a product on a client

Parameter
  • client_id (str) – client id

  • product_id (str) – product id

Rückgabe

JSONRPC result

productGroupMembers(group_id='')[Quellcode]

return a list with products of a group

Parameter

group_id (str) – product group name

Rückgabe

list with product ids

productGroups()[Quellcode]

return a list of known product groups

Rückgabe

list with ProductGroup instances

products()[Quellcode]

return a list of all available products

Rückgabe

list of LocalbootProduct products

productsOnClient(client_id='')[Quellcode]

return a list with all products installed on client(s)

Parameter

client_id (str) – client id; leave empty for all clients

Rückgabe

list with ProductOnClient instances

Helpful attributes:

  • productId: product id, needed for installProductOnClient

  • version: product version with packet version

  • productVersion: product version alone

productsOnDepot()[Quellcode]

list with available products

Rückgabe

list with available products in depot

reboot(client_ids)[Quellcode]

reboot clients

Parameter

client_ids (list) – list with client ids

Rückgabe

JSONRPC result

setProductOnClientStatus(client_id, product_id, status='installed')[Quellcode]

set the product status on a client; default: installed

Parameter
  • client_id (str) – client id

  • product_id (str) – product id

  • status (str) – status to set

Rückgabe

JSONRPC result

shutdown(client_ids)[Quellcode]

shutdown clients

Parameter

client_ids – list with client ids

Rückgabe

JSONRPC result

softwareOnClient(client_id)[Quellcode]

get all installed products on given client

Parameter

client_id (str) – client id

Rückgabe

JSONRPC result

uninstallProductOnClient(client_id, product_id)[Quellcode]

remove a product from a client

Parameter
  • client_id (str) – client id

  • product_id (str) – product id

Rückgabe

JSONRPC result

Backend

Das backend-Modul definiert mit der Klasse Backend die grundlegenden Methoden für die Anwendung, ist dabei aber eine vergleichsweise dünne Abstraktionsschicht, die sich die Funktionalität von opus.server.Server zunutze macht.

class opus.backend.Backend(url, username, password)[Quellcode]

Die Backend-Klasse hält die Verbindungsdaten zum Server vor und stellt die grundlegenden Methoden für die Arbeit mit opsi-Clients bereit.

Anwendungsbeispiel:

backend = Backend(url, username, password)

# known clients
clients = backend.clients
# installed products on client 'x'
products_on_client_x = client["x"].products
addClientsToGroup(client_ids, group_id)[Quellcode]

add client(s) to the given group

Parameter
  • client_ids (list) – client ids

  • group_id (str) – group id

clientGroupMembers(group_id)[Quellcode]

get members of the given client group

Parameter

group_id (str) – group id

Rückgabe

list with client ids

clientGroups(group_id='')[Quellcode]

get client groups

Parameter

group_id (str) – group id

Rückgabe

dictionary with (group) id and description

property clients

get clients

Rückgabe

dictionary with client id:data; data is a dictionary with products:[(productId, productVersion, packageVersion, installationStatus, lastAction, actionResult)]

install(client_id, product_id)[Quellcode]

install product on client

Parameter
  • client_id (str) – client id

  • product_id (str) – product id

ondemand(client_ids)[Quellcode]

trigger ondemand event on client(s)

Parameter

client_ids (list) – list with client ids

productGroupMembers(group_id)[Quellcode]

get list of members of the given product group

Parameter

group_id (str) – group id

Rückgabe

list of group member ids

productGroups()[Quellcode]

get list of known product groups

Rückgabe

dictionary with product group ids and descriptions

property products

get available products

Rückgabe

list of products (dictionaries)

reboot(client_ids)[Quellcode]

reboot client(s)

Parameter

client_ids (list) – list with client ids

setInstalled(client_id, product_id)[Quellcode]

install product on client

Parameter
  • client_id (str) – client id

  • product_id (str) – product id

setSetup(client_id, product_id)[Quellcode]

set product on client to setup

Parameter
  • client_id (str) – client id

  • product_id (str) – product id

setUninstalled(client_id, product_id)[Quellcode]

set product status to ‚uninstalled on client(s)install product on client

Parameter
  • client_id (str) – client id

  • product_id (str) – product id

shutdown(client_ids)[Quellcode]

shutdown clienti(s)

Parameter

client_ids (list) – list with client ids

softwareOnClient(client)[Quellcode]

get list of installed software (not only by opsi, but all software) on a client.

Warning: This requires a run swaudit beforehand!

Parameter

client (str) – client id

Rückgabe

list with dicts

uninstall(client_id, product_id)[Quellcode]

remove product from client

Parameter
  • client_id (str) – client id

  • product_id (str) – product id

App

Das app-Modul mit der Klasse Opus ist der Kern von opus.

class opus.app.Opus(url, username, password)[Quellcode]

Die Klasse Opus stellt die API für alle Frontends von opus bereit.

Beispiel:

app = Opus(url, username, password)

# get a list of all known clients (instances of Client)
clients = app.clients()
# get a list of all installable products
products = app.products()
addClientsToGroup(client_ids, group_id)[Quellcode]

Add Client to a group.

Parameter
  • client_ids (list) – list with client ids

  • group_id (str) – group id

clientGroupMembers(group_id)[Quellcode]

Get all members of a client group.

Parameter

group_id (str) – group id

Rückgabe

list with client ids

clientGroups(group_id='')[Quellcode]

Get all client group names.

Rückgabe

dictionary with group ids and descriptions

clients()[Quellcode]

Get all clients.

Rückgabe

dictionary with client id:data; data is a dictionary with products:[(productId, productVersion, packageVersion, installationStatus, lastAction, actionResult)]

evaluate_targets(target_string)[Quellcode]

Filter clients with given string and return the resulting list. der Liste der bekannten Clients.

Parameter

target_string (str) – filter string

Rückgabe

list with clients (dictionaries)

failedClients(client_ids)[Quellcode]

Get list of failed clients.

A failed client is a client with a failed un-/install action.

Parameter

client_ids (list) – client ids

Rückgabe

dictionary with client id:[failed products]

install(clients, packages, force, now)[Quellcode]

Install given package(s) on client(s).

Installation will be done if:

  • package is not installed

  • older version of the package installed

Parameter
  • clients (dict) – client dict with name:data

  • packages (list) – list with package ids

  • force (bool) – force installation even if package is installed

  • now (bool) – trigger ondemand to install immediately

install_updates_on_depot_(ssh_cmd)[Quellcode]

Installiert für das Depot verfügbare Paket-Updates

is_failed(product_tuple)[Quellcode]

Get a list with failed products on a client.

Parameter

product_tuple (tuple) – product data as a tupel

Rückgabe

True if failed, False otherwise

is_fresh(client_json)[Quellcode]

Check if client is a fresh installed machine.

Parameter

client_json (dict) – client data (dict)

Rückgabe

True if fresh, False otherwise

list_migratable(client, json)[Quellcode]

Get a list of installed software with available opsi packages for a given client.

Parameter
  • client (string) – client id

  • json (dict) – client json data

Rückgabe

not installed available packages in depot, missing packages

migrate(clients, masked_pkgs)[Quellcode]

Mark software that has an opsi package as ‚installed‘.

Parameter

clients (list) – list of client ids

ondemand(clients)[Quellcode]

Trigger ondemand event on clients.

Parameter

clients (dict) – client dict with name

os_version(client)[Quellcode]

Get OS version info for a given client.

This requires a software audit beforehand.

Parameter

client – client id

Rückgabe

string with version info or None

productGroupMembers(group_id)[Quellcode]

Get a list of products of a product group

Parameter

group_id (str) – group id

Rückgabe

list with product ids and version

productGroups()[Quellcode]

Get a list with known product groups.

Rückgabe

dictionary with product group ids and description

products()[Quellcode]

Get a list all available products in the depot.

Example for product data:

product_data = {
    'name': 'Microsoft Visual C++ 2017', 'licenseRequired': False,
    'setupScript': 'setup3264.opsiscript', 'uninstallScript': '',
    'updateScript': '', 'alwaysScript': '', 'onceScript': '',
    'customScript': '', 'userLoginScript': '', 'priority': 0,
    'description': 'Microsoft Visual C++ 2017 redistributable',
    'advice': '', 'changelog': '', 'productClassIds': [],
    'windowsSoftwareIds': [], 'id': 'visualcpp-2017',
    'productVersion': '14.12.25810.0', 'packageVersion': '1',
    'type': 'LocalbootProduct',
    'ident': 'visualcpp-2017;14.12.25810.0;1'
    }
Rückgabe

dictionary with product id: product data

reboot(clients)[Quellcode]

Reboot clients.

Parameter

clients (dict) – client dict with name

set_installed(clients, packages, installed=True)[Quellcode]

Set packages to ‚installed‘ state on given clients.

Parameter
  • clients (list) – client ids

  • packages (list) – package ids

set_setup(clients, packages)[Quellcode]

Set packages to ‚setup‘ state on given clients.

Parameter
  • clients (list) – client ids

  • packages (list) – package ids

shutdown(targets)[Quellcode]

Shutdown clients.

Parameter

clients (dict) – client dict with name

uninstall(clients, packages, now)[Quellcode]

Remove package(s) from client(s).

Deinstallation only takes place if the package is installed.

Parameter
  • clients (dict) – clients with name:data

  • packages (list) – list with package ids

  • now (bool) – trigger ondemand to uninstall immediately

unpackaged(client, json)[Quellcode]

Get a list of installed, but unpackaged software on a client.

This is a somewhat manual approach as it requires a custom list of software names (‚_mapping‘). Helpful for migration into opsi.

Parameter
  • client (str) – client id

  • json (dict) – client json data

Rückgabe

dictionary with name:list of unpackaged software

updatable(product_triple, products_in_depot)[Quellcode]

Check if a product can be updated.

Parameter

product_triple (tuple) – triple of product data

Rückgabe

new version (package version incl.) if available, otherwise False

update(clients, packages, now)[Quellcode]

Update package(s) on client(s).

Warning: windomain can break AD joins, if Rejoin is forbidden!

Parameter
  • clients (dict) – dict with name:data

  • packages (list) – list with package names. If this is empty, then all possible updates will be installed.

  • now (bool) – trigger ondemand on clients

updates_(ssh_cmd)[Quellcode]

Listet für das Depot verfügbare Paket-Updates auf

UI

Das ui-Modul stellt eine Konsolen-Schnittstelle zu opus bereit. Es nutzt das click-Paket, um die auf der Befehlszeile übergebenen Parameter auszuwerten.