[PYTHON] Un script qui génère une liste d'utilisateurs du portail SoftLayer

Gestion des utilisateurs du portail SoftLayer

SoftLayer gère le système sur le cloud à partir de Portal. SoftLayer Customer Portal

Vous avez besoin d'un ID utilisateur pour accéder au portail. Le premier ID utilisateur créé lors de la création d'un compte SoftLayer est appelé l'utilisateur principal et dispose de tous les privilèges sur le système pour ce compte.

Puisqu'il n'est pas pratique pour un utilisateur principal de gérer tous les systèmes, l'utilisateur principal crée généralement des utilisateurs enfants et délègue l'autorité administrative sur certains systèmes. L'utilisateur enfant crée en outre un utilisateur enfant et délègue l'autorité, et délègue le développement et la gestion des opérations sur le système au développeur et à la personne en charge de l'exploitation.

La figure est la suivante. sl_users.png

L'utilisateur principal attribue des autorisations aux utilisateurs enfants et spécifie les périphériques auxquels ils peuvent accéder. L'utilisateur enfant attribue des autorisations à l'utilisateur petit-enfant pour déléguer la gestion et spécifie les appareils qui peuvent y accéder.

scénario

De cette manière, les utilisateurs ont une structure hiérarchique. Vous pouvez voir la liste des utilisateurs dans Portal, mais vous ne pouvez pas voir la relation parent-enfant des utilisateurs dans la liste dans Portal ou CLI. Cela n'est pas pratique pour la gestion des utilisateurs, j'ai donc créé un script qui utilise l'API SoftLayer pour obtenir une liste d'utilisateurs et une relation parent-enfant.

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 /Obtenir l'utilisateur enfant que cet utilisateur est un parent dans la liste.

    parent:Objet utilisateur parent(User_Customer)
    users:Liste des utilisateurs enfants à rechercher(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()

Le résultat ressemble à ceci (le nom d'utilisateur et l'adresse e-mail sont fictifs): L'utilisateur enfant et l'utilisateur parent correspondant sont affichés dans une liste.

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

Un script qui génère une liste d'utilisateurs du portail SoftLayer
Outil CLI qui ne produit qu'une liste de préfectures rapidement
Obtenir une liste d'utilisateurs IAM avec Boto3
[Linux] Liste des commandes Linux que les débutants devraient connaître
Un script qui prend un instantané d'un volume EBS
Un ensemble de fichiers de script qui font wordcloud avec Python3
Script Python qui compare le contenu de deux répertoires
Script Shell (Linux, macOS) qui affiche la date de la semaine dernière
Générer une liste de caractères consécutifs
Introduction de la commande ls lsix qui peut afficher une liste d'images
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
Script Python qui génère tous les enregistrements de la table Oracle dans un fichier CSV
Afficher une liste d'alphabets en Python 3
[python] Obtenir une liste de variables d'instance
Conversion de chaîne d'une liste contenant des nombres
Script qui analyse morphologiquement l'URL spécifiée
[Python] Obtenir une liste de dossiers uniquement
Obtenez une liste d'articles publiés par les utilisateurs avec Python 3 Qiita API v2
[Linux] Liste de sélection d'origine des commandes pratique mais inconnue de manière inattendue
Script Python pour obtenir une liste d'exemples d'entrée pour le concours AtCoder
Un script qui ne reçoit qu'un flux RSS
Afficher la sortie d'une liste de nombres à virgule flottante
Liste des liens que les débutants en apprentissage automatique apprennent
"Kit Python" qui appelle des scripts Python depuis Swift
Obtenez la liste "J'aime" de Qiita en grattant
Une doublure qui produit 10000 chiffres de rapport de circonférence avec Python
Un script python qui obtient le nombre de travaux pour une condition spécifiée sur Indeed.com
Un script qui combine les marges lors du collage d'un certain nombre de graphiques sur des tuiles avec gnuplot
Un script qui combine plusieurs pages d'un fichier PDF en une seule page sans marges
Un script qui peut effectuer des tests de résistance en fonction du nombre de cœurs CPU