[PYTHON] Ein Skript, das eine Liste der Benutzer des SoftLayer-Portals ausgibt

SoftLayer Portal Benutzerverwaltung

SoftLayer verwaltet das System in der Cloud über Portal. SoftLayer Customer Portal

Sie benötigen eine Benutzer-ID, um auf das Portal zugreifen zu können. Die erste Benutzer-ID, die beim Erstellen eines SoftLayer-Kontos erstellt wurde, wird als Hauptbenutzer bezeichnet und verfügt über alle Systemberechtigungen für dieses Konto.

Da es für einen Hauptbenutzer nicht praktisch ist, alle Systeme zu verwalten, erstellt der Hauptbenutzer normalerweise untergeordnete Benutzer und delegiert die Verwaltungsberechtigung über einige Systeme. Der untergeordnete Benutzer erstellt ferner einen untergeordneten Benutzer und delegiert die Berechtigung und delegiert die Entwicklungs- und Betriebsverwaltung auf dem System an den Entwickler und die für den Betrieb verantwortliche Person.

Die Figur ist wie folgt. sl_users.png

Der Hauptbenutzer weist untergeordneten Benutzern Berechtigungen zu und gibt an, auf welche Geräte sie zugreifen können. Der untergeordnete Benutzer weist dem Enkelkind die Berechtigung zum Delegieren der Verwaltung zu und gibt die Geräte an, die darauf zugreifen können.

Skript

Auf diese Weise haben Benutzer eine hierarchische Struktur. Sie können die Liste der Benutzer in Portal anzeigen, aber die Eltern-Kind-Beziehung der Benutzer in der Liste in Portal oder CLI nicht. Dies ist für die Benutzerverwaltung unpraktisch. Daher habe ich ein Skript erstellt, das die SoftLayer-API verwendet, um eine Liste der Benutzer und eine Eltern-Kind-Beziehung abzurufen.

sluser.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

SL_USERNAME = <SL User Name>
SL_API_KEY = <SL API Key>

sl_getUser.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'takechika'

import sys
from prettytable import PrettyTable
import SoftLayer
import sluser

SL_USERNAME = sluser.SL_USERNAME
SL_API_KEY = sluser.SL_API_KEY

_userMask = '''
    id,
    accountId,
    parentId,
    firstName,
    lastName,
    email
    '''
_userTableHeader = [
    'ParentID',
    'ParentName',
    'UserID',
    'UserName',
    'EMail'
    ]

def getChildren(parent, users):
    """Get children of the parent from the user list /Holen Sie den untergeordneten Benutzer, dass dieser Benutzer ein übergeordneter Benutzer ist, aus der Liste.

    parent:Übergeordnetes Benutzerobjekt(User_Customer)
    users:Liste der zu durchsuchenden untergeordneten Benutzer(an array of User_Customer)
    """

    a = {}
    b = []

    for u in users:
        if u.get('parentId') == parent.get('id'):
            a = {
                "ParentID": u.get('parentId'),
                "ParentName": parent.get('lastName') + " " + parent.get('firstName'),
                "ChildID": u.get('id'),
                "ChildName": u.get('lastName') + " " + u.get('firstName'),
                "Email": u.get('email')
            }
            b.append(a)
    return(b)

client = SoftLayer.Client(username=SL_USERNAME, api_key=SL_API_KEY)
users = client['Account'].getUsers(mask=_userMask)

# Find the master user id
for u in users:
    if u.get('parentId') == '':
        masterUser = u
        print("Master user is \"%s %s\" (id: %s)" % (masterUser.get('lastName'), masterUser.get('firstName'), masterUser.get('id')))

# Table definition
table = PrettyTable(_userTableHeader)
table.padding_width = 1

# Get user list
count = 0
for parent in users:
    userList = getChildren(parent, users)
    for x in userList[0:]:
        table.add_row(
            [
                x['ParentID'],
                x['ParentName'],
                x['ChildID'],
                x['ChildName'],
                x['Email']
            ]
        )
        count = count + 1

print(table)
print(count, "users")

exit()

Die Ausgabe sieht folgendermaßen aus (Benutzername und E-Mail-Adresse sind fiktiv): Der untergeordnete Benutzer und der entsprechende übergeordnete Benutzer werden in einer Liste angezeigt.

Master user is "Jedi Master" (id: 182178)
+----------+--------------------+--------+-----------------------+--------------------------+
| ParentID |     ParentName     | UserID |        UserName       |          EMail           |
+----------+--------------------+--------+-----------------------+--------------------------+
|  182178  |    Jedi Master     | 183358 |    Obi-Wan Kenobi     |    [email protected]    |
|  182178  |    Jedi Master     | 183362 |        R2 D2          |     [email protected]     |
|  182178  |    Jedi Master     | 183372 |        C 3PO          |     [email protected]     |
|  182178  |    Jedi Master     | 183376 |    Luke Skywalker     |     [email protected]      |
|  183362  |    Jedi Master     | 183378 |       Chew Bacca      |   [email protected]   |
|  183358  |   Obi-Wan Kenobi   | 183360 |   Anakin Skywalker    |     [email protected]    |
+----------+--------------------+--------+-----------------------+--------------------------+
6 users

Recommended Posts

Ein Skript, das eine Liste der Benutzer des SoftLayer-Portals ausgibt
CLI-Tool, das schnell eine Liste von Präfekturen ausgibt
Holen Sie sich eine Liste der IAM-Benutzer mit Boto3
[Linux] Liste der Linux-Befehle, die Anfänger kennen sollten
Ein Skript, das eine Momentaufnahme eines EBS-Volumes erstellt
Eine Reihe von Skriptdateien, die Wordcloud mit Python3 ausführen
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Shell-Skript (Linux, macOS), das das Datum der letzten Woche ausgibt
Generieren Sie eine Liste aufeinanderfolgender Zeichen
Einführung des Befehls lsix, mit dem eine Liste von Bildern angezeigt werden kann
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
Python-Skript, das alle Datensätze der Oracle-Tabelle in eine CSV-Datei ausgibt
Zeigen Sie eine Liste der Alphabete in Python 3 an
[Python] Ruft eine Liste der Instanzvariablen ab
String-Konvertierung einer Liste mit Zahlen
Skript, das die angegebene URL morphologisch analysiert
[Python] Nur eine Liste der Ordner abrufen
Holen Sie sich eine Liste der Artikel, die von Benutzern mit Python 3 Qiita API v2 veröffentlicht wurden
[Linux] Praktische, aber unerwartet unbekannte ursprüngliche Auswahlliste für Befehle
Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
Ein Skript, das nur einen RSS-Feed erhält
Anzeige der Ausgabe einer Liste von Gleitkommazahlen
Liste der Links, die Anfänger des maschinellen Lernens lernen
"Python Kit", das Python-Skripte von Swift aufruft
Holen Sie sich Qiitas "Gefällt mir" -Liste durch Schaben
Ein Liner, der mit Python ein Umfangsverhältnis von 10000 Stellen ausgibt
Ein Python-Skript, das die Anzahl der Jobs für eine bestimmte Bedingung von Indeed.com abruft
Ein Skript, das Ränder kombiniert, wenn mehrere Diagramme mit Gnuplot auf Kacheln eingefügt werden
Ein Skript, das mehrere Seiten einer PDF-Datei zu einer Seite ohne Ränder kombiniert
Ein Skript, das Stresstests entsprechend der Anzahl der CPU-Kerne durchführen kann