SoftLayer API
Bluemix, la solution cloud d'IBM. En octobre 2016, la couche IaaS et la couche PaaS ont été intégrées, et une solution appelée Bluemix peut prendre en charge toutes les gammes de services.
Bluemix Infrastructure fournit la partie infrastructure, c'est-à-dire les parties serveur, réseau et stockage. Une de ses fonctionnalités est l'automatisation de la gestion par API (SoftLayer API).
Avec Bluemix Infrastructure, il est possible d'effectuer toutes les opérations via l'API, du déploiement de serveurs physiques et de la création d'utilisateurs, à l'enregistrement dans DNS, à l'acquisition des informations de localisation de chaque centre de données et à l'émission de tickets de support. ..
Cela devrait être le cas, et en fait, le portail client fourni pour les utilisateurs de Bluemix Infrastructure est également créé à l'aide de l'API, de sorte que toutes les opérations pouvant être effectuées sur le portail sont fournies avec l'API. ..
Il existe plusieurs articles sur l'API SoftLayer sur le Web, veuillez donc vous y référer également. C'est organisé ici. Site de référence de programmation de l'API SoftLayer
En février 2016, IBM a collaboré avec VMware pour rendre la pile complète de composants VMware disponible sur Bluemix. Pour cette raison, il existe de nombreuses opportunités de mettre en place VMware sur IBM Cloud avec IBM seul ou avec des partenaires Bluemix Infrastructure tels que Softbank Commerce & Service.
vSphere "6.5" sur IBM Bluemix Infrastructure (SoftLayer) Hands-on Par exemple, nous effectuons régulièrement les travaux pratiques ci-dessus, alors venez nous rendre visite.
Cependant, le problème ici est de créer un environnement pratique. Hands-on fournira un serveur bare metal et un serveur virtuel fonctionnel pour chaque participant. Ce serait bien si le nombre de participants était encore petit, mais lorsque le nombre de participants était grand, il serait difficile de le faire manuellement.
En plus de cela, il existe de nombreuses petites tâches telles que la configuration du VLAN et l'émission de tickets, et si vous le faites manuellement, des erreurs se produiront. (Pardon···) Donc, cette fois, j'essaierai d'automatiser la construction de l'environnement pratique, de réduire le plus possible les erreurs et de réduire mon fardeau.
L'environnement pratique est simplement configuré comme suit.
Les participants se connectent à distance à leur serveur virtuel de travail attribué via SSL VPN et installent ESXi ou vCenter sur un serveur nu à partir de ce serveur virtuel. Par conséquent, le serveur bare metal et le serveur virtuel doivent être sur le même VLAN. De plus, comme nous n'utilisons pas Internet, nous n'avons pas besoin de nous connecter au VLAN public, nous allons donc commander Private Only.
Les travaux de construction de l'environnement sont énumérés ci-dessous.
Cela demande beaucoup de travail. Cela prend du temps et je ne peux pas dormir la nuit précédente à cause de fautes de frappe ou d'erreurs de sélection. Je vais donc automatiser toutes ces tâches.
Cette fois, j'écrirai un script en Python. Au fait, je ne suis pas familier avec Python, alors dites-moi en secret si vous préférez écrire de cette façon.
Le script terminé est le suivant.
handson.py
# coding:utf-8
#Prepare for hands-on environment
import SoftLayer
import json
import SoftLayer.API
import sys
import csv
from time import sleep
#API key of master account
username = "username"
apiKey = "apikey"
client = SoftLayer.Client(username= username, api_key = apiKey)
bms_allhosts = ''
counter = 0
#Import csv file
csvfile = "list.csv"
f = open(csvfile, "rU")
reader = csv.reader(f)
header = next(reader)
for (num,row) in enumerate(reader):
#Count numbers
counter += 1
##############################################################################################
#Create new user
##############################################################################################
#Input user information
user_template = {
'username': row[0],
'firstName': row[1],
'lastName': row[2],
'email': row[3],
'companyName': 'company name',
'address1': 'address',
'city': 'city',
'country': 'JP',
'state': 'OT',
'postalCode': 'xxx-xxxx',
'officePhone': row[5],
'userStatusId': 1001,
'timezoneId': 158,
'localeId': 22,
'sslVpnAllowedFlag': True
}
#Create new user
try:
new_user = client['User_Customer'].createObject(user_template, row[4], row[4])
print("complete user creation!")
except SoftLayer.SoftLayerAPIError as e:
print("Error: %s, %s" % (e.faultCode, e.faultString))
exit()
##############################################################################################
#Set permissions
##############################################################################################
#Define permission template
permission_template = [
{'keyName':'ACCOUNT_SUMMARY_VIEW'},
{'keyName':'ANTI_MALWARE_MANAGE'},
{'keyName':'BANDWIDTH_MANAGE'},
{'keyName':'CDN_BANDWIDTH_VIEW'},
{'keyName':'DEDICATED_HOST_VIEW'},
{'keyName':'DNS_MANAGE'},
{'keyName':'FIREWALL_MANAGE'},
{'keyName':'FIREWALL_RULE_MANAGE'},
{'keyName':'HARDWARE_VIEW'},
{'keyName':'HOST_ID_MANAGE'},
{'keyName':'IP_ADD'},
{'keyName':'LICENSE_VIEW'},
{'keyName':'LOADBALANCER_MANAGE'},
{'keyName':'MONITORING_MANAGE'},
{'keyName':'NETWORK_MESSAGE_DELIVERY_MANAGE'},
{'keyName':'NTF_SUBSCRIBER_MANAGE'},
{'keyName':'PORT_CONTROL'},
{'keyName':'REMOTE_MANAGEMENT'},
{'keyName':'SERVER_ADD'},
{'keyName':'SOFTWARE_FIREWALL_MANAGE'},
{'keyName':'TICKET_EDIT'},
{'keyName':'TICKET_SEARCH'},
{'keyName':'TICKET_VIEW'},
{'keyName':'TICKET_VIEW_BY_HARDWARE'},
{'keyName':'TICKET_VIEW_BY_VIRTUAL_GUEST'},
{'keyName':'VIRTUAL_GUEST_VIEW'},
{'keyName':'VPN_MANAGE'},
{'keyName':'VULN_SCAN_MANAGE'}
]
#Set permissions
try:
client['User_Customer'].addBulkPortalPermission(permission_template, id=new_user['id'])
print("complete setting user permission!")
except SoftLayer.SoftLayerAPIError as e:
print("Error: %s, %s" % (e.faultCode, e.faultString))
exit()
##############################################################################################
#Order hourly BMS
##############################################################################################
#Set BMS order template
bare_metal_server = {
'datacenter': {'name': 'hkg02'},
'hostname': 'handson.bms' + str(num+1),
'domain': 'softlayer.com',
'hourlyBillingFlag': True,
'fixedConfigurationPreset': {'keyName': 'S1270_32GB_1X1TBSATA_NORAID'},
'networkComponents': [{
'maxSpeed': 1000,
}],
'privateNetworkOnlyFlag': True,
'operatingSystemReferenceCode': 'CUSTOS_1_64'
}
#Order BMS
try:
order_bms = client['Hardware'].createObject(bare_metal_server)
print("complete order BMS!")
except SoftLayer.SoftLayerAPIError as e:
print("Error: %s, %s" % (e.faultCode, e.faultString))
exit()
#Add FQDN for ticket contents
bms_allhosts = bms_allhosts + (order_bms['hostname'] + order_bms['domain'] + '\n')
##############################################################################################
#Retrieve BMS information
##############################################################################################
#Get BMS id from Global ID
mask_1 = "mask[id;globalIdentifier]"
new_bms_id = 0
while True:
bms_infor = client['Account'].getHardware(mask=mask_1)
for bms_id in bms_infor:
try:
if bms_id['globalIdentifier'] == order_bms['globalIdentifier']:
new_bms_id = bms_id['id']
break
except KeyError:
print('please wait for a minutes... now provisioning BMS...')
sleep(120)
if new_bms_id > 0:
break
print(new_bms_id)
#Get BMS private VLAN ID
mask_2 = "mask[id]"
bms_vlan_id = 0
while True:
bms_vlan = client['Hardware'].getNetworkVlans(id=new_bms_id,mask=mask_2)
bms_vlan_id = bms_vlan[0]['id']
if bms_vlan_id > 0:
break
##############################################################################################
#Order hourly VSI
##############################################################################################
#Set VSI order template
virtual_server = {
'datacenter': {'name': 'hkg02'},
'hostname': 'handson.vsi' + str(num+1),
'domain': 'softlayer.com',
'hourlyBillingFlag': True,
'startCpus': 2,
'maxMemory': 4096,
'blockDeviceTemplateGroup':{
'globalIdentifier': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
},
'localDiskFlag': False,
'primaryBackendNetworkComponent':{
'networkVlan':{
'id': bms_vlan_id
}
},
'networkComponents': [{
'maxSpeed': 1000,
}],
'privateNetworkOnlyFlag': True,
}
#Order VSI
try:
order_vsi = client['Virtual_Guest'].createObject(virtual_server)
print("complete order VSI!")
except SoftLayer.SoftLayerAPIError as e:
print("Error: %s, %s" % (e.faultCode, e.faultString))
exit()
##############################################################################################
#Retrieve VSI information
##############################################################################################
#Get VSI id from Global ID
mask_3 = "mask[id;globalIdentifier]"
new_vsi_id = 0
while True:
vsi_infor = client['Account'].getVirtualGuests(mask=mask_3)
for vsi_id in vsi_infor:
try:
if vsi_id['globalIdentifier'] == order_vsi['globalIdentifier']:
new_vsi_id = vsi_id['id']
break
except KeyError:
print('please wait for a minutes... now provisioning VSI...')
sleep(60)
if new_vsi_id > 0:
break
##############################################################################################
#Server access control
##############################################################################################
#Remove all access
client['User_Customer'].removeAllHardwareAccessForThisUser(id=new_user['id'])
client['User_Customer'].removeAllVirtualAccessForThisUser(id=new_user['id'])
#Create lists of new server id
new_bms_idset = [new_bms_id]
new_vsi_idset = [new_vsi_id]
#Add specific server access
client['User_Customer'].addBulkHardwareAccess(new_bms_idset,id=new_user['id'])
client['User_Customer'].addBulkVirtualGuestAccess(new_vsi_idset,id=new_user['id'])
f.close()
##############################################################################################
#Issue ticket
##############################################################################################
#Create ticket template
ticket_template = {
'subjectId': 1021, # Hardware Issue
'assignedUserId': userid,
'title': 'IPMI privilege and UEFI mode'
}
ticket_contents = 'I have three requests. I would like to boot server from ISO and install vSphere(BYOL).\nI want to change the setting of following ' + counter + ' servers.\n\n' + bms_allhosts + '1. Could you change the privilege of IPMI control from Operator to Administrator?\n2. Please raise a start priority of ISO.\n3. Please change the IPMI\'s UEFI mode into legacy only mode.\n\nI agree to enforcement if you need to reboot the servers'
#Issue ticket
created_ticket = client['Ticket'].createStandardTicket(ticket_template, ticket_contents)
Placez également le fichier .csv de la liste des participants dans le même dossier.
list.csv
Username,First Name,Last Name,IBMid,password,office phone
test1,Toro,Yamada,[email protected],password1,xx-xxxx-xxxx
test2,Jiro,Takahashi,[email protected],password1,xxx-xxxx-xxxx
・ ・ ・
Le flux de script simple consiste à lire une ligne dans le fichier csv, à créer l'utilisateur qui y est répertorié, à définir des autorisations et à ordonner aux serveurs bare metal et virtuels d'attribuer à cet utilisateur. Il a la forme de le répéter jusqu'à la dernière ligne.
De là, j'expliquerai comment utiliser l'API partie par partie. On suppose également que vous comprenez l'idée de base de l'API SoftLayer et des termes simples (services, méthodes, types de données, masques d'objets, etc.).
handson.py
#Import csv file
csvfile = "list.csv"
f = open(csvfile, "rU")
reader = csv.reader(f)
header = next(reader)
for (num,row) in enumerate(reader):
Ici, nous lirons le fichier de la liste des participants et le traiterons ligne par ligne. La première ligne contient le processus de saut en tant qu'en-tête.
handson.py
##############################################################################################
#Create new user
##############################################################################################
#Input user information
user_template = {
'username': row[0],
'firstName': row[1],
'lastName': row[2],
'email': row[3],
'companyName': 'company name',
'address1': 'address',
'city': 'city',
'country': 'JP',
'state': 'OT',
'postalCode': 'xxx-xxxx',
'officePhone': row[5],
'userStatusId': 1001,
'timezoneId': 158,
'localeId': 22,
'sslVpnAllowedFlag': True
}
#Create new user
try:
new_user = client['User_Customer'].createObject(user_template, row[4], row[4])
print("complete user creation!")
except SoftLayer.SoftLayerAPIError as e:
print("Error: %s, %s" % (e.faultCode, e.faultString))
exit()
Ici, il est créé à l'aide de la méthode createObject du service User_Customer. Les trois paramètres suivants peuvent être saisis dans le createObject de ce service.
Paramètres | Aperçu | Type de données |
---|---|---|
templateObject | Modèle créé par l'utilisateur. | User_Customer |
password | Mot de passe du compte. | string |
vpnPassword | Mot de passe lors de l'utilisation du VPN SSL. | string |
Le type de données User_Customer a la forme d'un objet dictionnaire en Python, et les clés et valeurs disponibles sont répertoriées ici [http://sldn.softlayer.com/reference/datatypes/SOftLayer_User_Customer). Je suis.
Les données lues dans le fichier csv sont intégrées lors de la création de ce modèle utilisateur.
De plus, le paramètre de mot de passe est ignoré pour les «utilisateurs VPN uniquement» et les «utilisateurs créés avec l'ID IBM». Tous les utilisateurs nouvellement créés sont censés utiliser l'authentification IBMid, ceci est donc ignoré. (À propos, dans ce cas, l'utilisateur doit initialiser le mot de passe dans les 24 heures.)
handson.py
##############################################################################################
#Set permissions
##############################################################################################
#Define permission template
permission_template = [
{'keyName':'ACCOUNT_SUMMARY_VIEW'},
{'keyName':'ANTI_MALWARE_MANAGE'},
{'keyName':'BANDWIDTH_MANAGE'},
{'keyName':'CDN_BANDWIDTH_VIEW'},
{'keyName':'DEDICATED_HOST_VIEW'},
{'keyName':'DNS_MANAGE'},
{'keyName':'FIREWALL_MANAGE'},
{'keyName':'FIREWALL_RULE_MANAGE'},
{'keyName':'HARDWARE_VIEW'},
{'keyName':'HOST_ID_MANAGE'},
{'keyName':'IP_ADD'},
{'keyName':'LICENSE_VIEW'},
{'keyName':'LOADBALANCER_MANAGE'},
{'keyName':'MONITORING_MANAGE'},
{'keyName':'NETWORK_MESSAGE_DELIVERY_MANAGE'},
{'keyName':'NTF_SUBSCRIBER_MANAGE'},
{'keyName':'PORT_CONTROL'},
{'keyName':'REMOTE_MANAGEMENT'},
{'keyName':'SERVER_ADD'},
{'keyName':'SOFTWARE_FIREWALL_MANAGE'},
{'keyName':'TICKET_EDIT'},
{'keyName':'TICKET_SEARCH'},
{'keyName':'TICKET_VIEW'},
{'keyName':'TICKET_VIEW_BY_HARDWARE'},
{'keyName':'TICKET_VIEW_BY_VIRTUAL_GUEST'},
{'keyName':'VIRTUAL_GUEST_VIEW'},
{'keyName':'VPN_MANAGE'},
{'keyName':'VULN_SCAN_MANAGE'}
]
#Set permissions
try:
client['User_Customer'].addBulkPortalPermission(permission_template, id=new_user['id'])
print("complete setting user permission!")
except SoftLayer.SoftLayerAPIError as e:
print("Error: %s, %s" % (e.faultCode, e.faultString))
exit()
Ensuite, définissez les autorisations du portail pour l'utilisateur créé. Utilisez la méthode addBulkPortalPermission du service User_Customer pour définir les autorisations.
Attribuez la liste des autorisations que vous souhaitez définir comme paramètre à cette méthode. En outre, le nom qui peut être spécifié comme valeur de keyName dans le modèle est Listable dans la méthode getAllObjects du service User_Customer_CustomerPermission_Permission.
handson.py
##############################################################################################
#Order hourly BMS
##############################################################################################
#Set BMS order template
bare_metal_server = {
'datacenter': {'name': 'hkg02'},
'hostname': 'handson.bms' + str(num+1),
'domain': 'softlayer.com',
'hourlyBillingFlag': True,
'fixedConfigurationPreset': {'keyName': 'S1270_32GB_1X1TBSATA_NORAID'},
'networkComponents': [{
'maxSpeed': 1000,
}],
'privateNetworkOnlyFlag': True,
'operatingSystemReferenceCode': 'CUSTOS_1_64'
}
#Order BMS
try:
order_bms = client['Hardware'].createObject(bare_metal_server)
print("complete order BMS!")
except SoftLayer.SoftLayerAPIError as e:
print("Error: %s, %s" % (e.faultCode, e.faultString))
exit()
#Add FQDN for ticket contents
bms_allhosts = bms_allhosts + (order_bms['hostname'] + order_bms['domain'] + '\n')
Le serveur bare metal de facturation horaire est prédéfini et certains modèles sont préconfigurés.
Ici, nous utilisons la méthode createObject du service matériel. À propos, si vous souhaitez commander un serveur bare metal plus personnalisable avec une facturation mensuelle, utilisez le type de données Container_Product_Order et définissez plus d'options. est nécessaire.
Vous devez entrer le modèle en tant que paramètre dans la méthode createObject. Le modèle est un objet dictionnaire, dans lequel le centre de données, le système d'exploitation, etc. sont spécifiés. Chaque clé et valeur peuvent être trouvées ici (http://sldn.softlayer.com/reference/services/softlayer_hardware/createobject). Je vais vous expliquer brièvement ci-dessous.
Paramètres | Aperçu | Type de données |
---|---|---|
datacenter.name | Désignation du centre de données | string |
hostname | Nom d'hôte du serveur | string |
domain | Nom de domaine du serveur | string |
hourlyBillingFlag | Si True, il s'agira d'un serveur de facturation horaire. | boolean |
fixedConfigurationPreset.keyName | Sélectionnez un type de préréglage. | string |
networkComponents.maxSpeed | Spécifie la vitesse du port de la carte réseau. | int |
privateNetworkOnlyFlag | Si True, il sera déployé uniquement sur la carte réseau privée. | boolean |
operatingSystemReferenceCode | Spécifiez le système d'exploitation. | string |
Vous pouvez vérifier la liste des valeurs pouvant être spécifiées pour chaque paramètre à l'aide de la méthode getCreateObjectOptions du service matériel. En passant, vous ne pouvez pas spécifier le VLAN par le paramètre primaryNetworkComponent.networkVlan.id etc. uniquement pour le serveur bare metal à facturation horaire. Vous ne pouvez pas demander au côté Bluemix avec un ticket.
Le dernier bms_allhosts contient le nom de domaine complet du serveur bare metal. Il est utilisé lors de l'émission d'un ticket.
handson.py
##############################################################################################
#Retrieve BMS information
##############################################################################################
#Get BMS id from Global ID
mask_1 = "mask[id;globalIdentifier]"
new_bms_id = 0
while True:
bms_infor = client['Account'].getHardware(mask=mask_1)
for bms_id in bms_infor:
try:
if bms_id['globalIdentifier'] == order_bms['globalIdentifier']:
new_bms_id = bms_id['id']
break
except KeyError:
print('please wait for a minutes... now provisioning BMS...')
sleep(120)
if new_bms_id > 0:
break
print(new_bms_id)
#Get BMS private VLAN ID
mask_2 = "mask[id]"
bms_vlan_id = 0
while True:
bms_vlan = client['Hardware'].getNetworkVlans(id=new_bms_id,mask=mask_2)
bms_vlan_id = bms_vlan[0]['id']
if bms_vlan_id > 0:
break
Lorsque vous avez commandé un serveur bare metal avec createObject plus tôt, les informations du serveur sont stockées dans order_bms en tant que valeur de retour de l'API. Cependant, lorsque la commande est confirmée, l'id du serveur et les informations VLAN ne sont pas confirmés. Un exemple de la valeur de retour est illustré ci-dessous.
handson.py
{'datacenter': {'statusId': '', 'id': '', 'name': 'hkg02'}, 'domain': 'softlayer.com', 'hostname': 'handson.bms1', 'provisionDate': '', 'fixedConfigurationPreset': {'keyName': 'S1270_32GB_1X1TBSATA_NORAID', 'id': '', 'packageId': ''}, 'bareMetalInstanceFlag': '', 'privateNetworkOnlyFlag': True, 'hardwareStatusId': '', 'globalIdentifier': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'operatingSystemReferenceCode': 'CUSTOS_1_64', 'hourlyBillingFlag': True, 'serviceProviderResourceId': '', 'networkComponents': [{'maxSpeed': 1000, 'modifyDate': '', 'networkVlanId': '', 'hardwareId': '', 'id': '', 'speed': '', 'port': ''}], 'serviceProviderId': '', 'id': '', 'accountId': xxxxxxxx}
Les valeurs id et networkVlanId sont vides. Vous ne pourrez pas obtenir ces informations à ce stade car le provisionnement n'est pas encore terminé.
Par conséquent, l'identifiant est extrait de la méthode getHardware du service Account à l'aide de globalIdentifier qui est confirmé au moment de la commande. J'essaie d'attendre un moment si l'approvisionnement n'est pas terminé.
L'ID VLAN peut également être trouvé à partir de getNetworkVlans du service de compte.
À propos, l'id du serveur sera utilisé pour définir l'autorité d'accès après cela, et l'ID de VLAN sera utilisé pour spécifier le VLAN pour le serveur virtuel.
handson.py
##############################################################################################
#Order hourly VSI
##############################################################################################
#Set VSI order template
virtual_server = {
'datacenter': {'name': 'hkg02'},
'hostname': 'handson.vsi' + str(num+1),
'domain': 'softlayer.com',
'hourlyBillingFlag': True,
'startCpus': 2,
'maxMemory': 4096,
'blockDeviceTemplateGroup':{
'globalIdentifier': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
},
'localDiskFlag': False,
'primaryBackendNetworkComponent':{
'networkVlan':{
'id': bms_vlan_id
}
},
'networkComponents': [{
'maxSpeed': 1000,
}],
'privateNetworkOnlyFlag': True,
}
#Order VSI
try:
order_vsi = client['Virtual_Guest'].createObject(virtual_server)
print("complete order VSI!")
except SoftLayer.SoftLayerAPIError as e:
print("Error: %s, %s" % (e.faultCode, e.faultString))
exit()
Commandez un serveur virtuel toutes les heures. Vous pouvez commander de la même manière qu'avec un serveur bare metal. Utilisez la méthode createObject du service Virtual_Guest.
La différence avec le serveur bare metal est que le paramètre primaryBackendNetworkComponent.networkVlan spécifie d'abord le VLAN à déployer. Étant donné que le serveur virtuel peut sélectionner le VLAN même s'il est facturé toutes les heures, il est déployé sur le même VLAN que le serveur bare metal commandé précédemment. Vous pouvez également commander à partir d'une image en spécifiant l'identifiant global du modèle d'image dans blockDeviceTemplateGroup. Dans ce cas, vous ne pouvez pas spécifier le système d'exploitation ou le disque.
À propos, vous pouvez spécifier public ou privé dans le modèle d'image, mais bien sûr, vous pouvez commander l'un ou l'autre. Vous pouvez obtenir une liste à partir de la méthode getPublicImages du service Virtual_Guest_Block_Device_Template_Group s'il est public, ou à partir de la méthode getBlockDeviceTemplateGroups du service Account s'il est privé.
handson.py
##############################################################################################
#Retrieve VSI information
##############################################################################################
#Get VSI id from Global ID
mask_3 = "mask[id;globalIdentifier]"
new_vsi_id = 0
while True:
vsi_infor = client['Account'].getVirtualGuests(mask=mask_3)
for vsi_id in vsi_infor:
try:
if vsi_id['globalIdentifier'] == order_vsi['globalIdentifier']:
new_vsi_id = vsi_id['id']
break
except KeyError:
print('please wait for a minutes... now provisioning VSI...')
sleep(60)
if new_vsi_id > 0:
break
Obtenez l'ID du serveur virtuel comme vous l'avez fait pour un serveur bare metal.
handson.py
##############################################################################################
#Server access control
##############################################################################################
#Remove all access
client['User_Customer'].removeAllHardwareAccessForThisUser(id=new_user['id'])
client['User_Customer'].removeAllVirtualAccessForThisUser(id=new_user['id'])
#Create lists of new server id
new_bms_idset = [new_bms_id]
new_vsi_idset = [new_vsi_id]
#Add specific server access
client['User_Customer'].addBulkHardwareAccess(new_bms_idset,id=new_user['id'])
client['User_Customer'].addBulkVirtualGuestAccess(new_vsi_idset,id=new_user['id'])
f.close()
Accordez l'accès au serveur à l'utilisateur créé. Tout d'abord, utilisez la méthode removeAllHardwareAccessForThisUser et la méthode removeAllVirtualAccessForThisUser du service User_Customer pour supprimer l'accès à tous les serveurs.
Après cela, accordez l'accès au serveur créé précédemment à l'aide des méthodes addBulkHardwareAccess et addBulkVirtualGuestAccess.
Notez que «hardwareIds» et «virtualGuestIds» dans Paramètres à affecter à addBulkHardwareAccess et addBulkVirtualGuestAccess sont des tableaux, pas des types int. N'oubliez pas de le mettre sous forme de liste.
handson.py
##############################################################################################
#Issue ticket
##############################################################################################
#Create ticket template
ticket_template = {
'subjectId': 1021, # Hardware Issue
'assignedUserId': userid,
'title': 'IPMI privilege and UEFI mode'
}
ticket_contents = 'I have three requests. I would like to boot server from ISO and install vSphere(BYOL).\nI want to change the setting of following ' + str(counter) + ' servers.\n\n' + bms_allhosts + '1. Could you change the privilege of IPMI control from Operator to Administrator?\n2. Please raise a start priority of ISO.\n3. Please change the IPMI\'s UEFI mode into legacy only mode.\n\nI agree to enforcement if you need to reboot the servers'
#Issue ticket
created_ticket = client['Ticket'].createStandardTicket(ticket_template, ticket_contents)
Enfin, émettez un ticket et terminez. Utilisez la méthode createStandardTicket du service Ticket. Le subjectId spécifié dans le modèle peut être Get List avec la méthode getAllObjects du service Ticket_Subject.
De plus, comme la liste des hôtes est stockée dans bms_allhosts afin que tous les serveurs puissent être modifiés en même temps, je l'utilise.
Cette fois, la création d'environnement pratique, qui prend du temps, a été automatisée avec l'API SoftLayer. Bien sûr, en plus de l'environnement pratique, je pense qu'il est très intéressant de pouvoir commander 10 serveurs, émettre des tickets plusieurs fois et automatiser diverses gestion.
Veuillez l'utiliser par tous les moyens! !!
De plus, VMware sur IBM Cloud pratique a lieu tous les mois, donc si vous voulez toucher Bluemix ou aimer VMware, veuillez l'utiliser. C'est gratuit. vSphere "6.5" sur IBM Bluemix Infrastructure (SoftLayer) Hands-on
Recommended Posts