SoftLayer API
Bluemix, die Cloud-Lösung von IBM. Im Oktober 2016 wurden die IaaS-Schicht und die PaaS-Schicht integriert, und eine Lösung namens Bluemix kann alle Servicebereiche unterstützen.
Bluemix Infrastructure stellt den Infrastrukturteil bereit, dh den Server-, Netzwerk- und Speicherteil. Eine seiner Funktionen ist die Automatisierung der Verwaltung durch API (SoftLayer API).
Mit Bluemix Infrastructure können alle Vorgänge über die API ausgeführt werden, von der Bereitstellung physischer Server und der Erstellung von Benutzern über die Registrierung im DNS bis hin zum Abrufen von Standortinformationen für jedes Rechenzentrum und der Ausstellung von Support-Tickets. ..
Dies sollte der Fall sein, und tatsächlich wird das für Bluemix Infrastructure-Benutzer bereitgestellte Kundenportal auch mithilfe der API erstellt, sodass alle Vorgänge, die auf dem Portal ausgeführt werden können, mit der API bereitgestellt werden. ..
Es gibt mehrere Artikel über die SoftLayer-API im Web. Bitte lesen Sie auch diese. Es ist hier organisiert. Referenzseite zur SoftLayer-API-Programmierung
Im Februar 2016 hat IBM mit VMware zusammengearbeitet, um einen vollständigen Stapel von VMware-Komponenten auf Bluemix verfügbar zu machen. Aus diesem Grund gibt es viele Möglichkeiten, VMware in der IBM Cloud allein mit IBM oder mit Bluemix Infrastructure-Partnern wie Softbank Commerce & Service in die Hand zu nehmen.
vSphere "6.5" unter IBM Bluemix Infrastructure (SoftLayer) zum Anfassen Zum Beispiel führen wir die oben genannten praktischen Übungen regelmäßig durch. Bitte besuchen Sie uns.
Das Problem hierbei ist jedoch der Aufbau einer praktischen Umgebung. Hands-on bietet jedem Teilnehmer einen Bare-Metal-Server und einen funktionierenden virtuellen Server. Es wäre schön, wenn die Anzahl der Teilnehmer noch klein wäre, aber wenn die Anzahl der Teilnehmer groß wäre, wäre es schwierig, dies manuell zu tun.
Außerdem gibt es viele kleine Aufgaben wie das Einstellen des VLAN und das Ausstellen von Tickets. Wenn Sie dies manuell tun, treten Fehler auf. (Es tut uns leid···) Dieses Mal werde ich versuchen, den Aufbau der praktischen Umgebung zu automatisieren, Fehler so weit wie möglich zu reduzieren und meine Belastung zu verringern.
Die praktische Umgebung wird einfach wie folgt konfiguriert.
Teilnehmer melden sich remote über SSL VPN bei ihrem zugewiesenen funktionierenden virtuellen Server an und installieren ESXi oder vCenter von diesem virtuellen Server auf einem Bare-Metal-Server. Daher müssen sich der Bare-Metal-Server und der virtuelle Server im selben VLAN befinden. Da wir das Internet nicht nutzen, müssen wir keine Verbindung zum öffentlichen VLAN herstellen, sodass wir nur Private bestellen.
Die Arbeiten zum Aufbau der Umgebung sind unten aufgeführt.
Es erfordert viel Arbeit. Es braucht Zeit und ich kann die Nacht zuvor aufgrund von Tippfehlern oder Auswahlfehlern nicht schlafen. Also werde ich all diese Aufgaben automatisieren.
Dieses Mal werde ich ein Skript mit Python schreiben. Übrigens bin ich mit Python nicht vertraut, also sag mir bitte heimlich, ob du lieber so schreiben möchtest.
Das fertige Skript lautet wie folgt.
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)
Legen Sie außerdem die CSV-Datei der Teilnehmerliste im selben Ordner ab.
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
・ ・ ・
Der einfache Skriptablauf besteht darin, eine Zeile in der CSV-Datei zu lesen, den dort aufgeführten Benutzer zu erstellen, Berechtigungen festzulegen und den Bare-Metal-Server und den virtuellen Server anzuweisen, diesem Benutzer zuzuweisen. Es ist so geformt, als würde man es bis zur letzten Zeile wiederholen.
Von hier aus werde ich erklären, wie die API Teil für Teil verwendet wird. Es wird auch davon ausgegangen, dass Sie das Grundkonzept der SoftLayer-API und einfache Begriffe (Dienste, Methoden, Datentypen, Objektmasken usw.) verstehen.
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):
Hier lesen wir die Teilnehmerlistendatei und verarbeiten sie zeilenweise. Die erste Zeile enthält den Vorgang des Überspringens als Kopfzeile.
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()
Hier wird es mit der Methode createObject des Dienstes User_Customer erstellt. Die folgenden drei Parameter können im createObject dieses Dienstes eingegeben werden.
Parameter | Überblick | Datentyp |
---|---|---|
templateObject | Vom Benutzer erstellte Vorlage. | User_Customer |
password | Konto Passwort. | string |
vpnPassword | Passwort bei Verwendung von SSL VPN. | string |
Der User_Customer-Datentyp hat in Python die Form eines Wörterbuchobjekts. Die verfügbaren Schlüssel und Werte sind hier aufgelistet [http://sldn.softlayer.com/reference/datatypes/SOftLayer_User_Customer]. Ich bin.
Die aus der CSV-Datei gelesenen Daten werden beim Erstellen dieser Benutzervorlage eingebettet.
Außerdem wird der Kennwortparameter für "Nur-VPN-Benutzer" und "Mit IBM-ID erstellte Benutzer" ignoriert. Alle neu erstellten Benutzer sollen die IBMid-Authentifizierung verwenden, daher wird dies ignoriert. (In diesem Fall muss der Benutzer das Kennwort übrigens innerhalb von 24 Stunden initialisieren.)
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()
Legen Sie als Nächstes die Portalberechtigungen für den erstellten Benutzer fest. Verwenden Sie die addBulkPortalPermission-Methode des User_Customer-Dienstes, um Berechtigungen festzulegen.
Weisen Sie dieser Methode die Liste der Berechtigungen zu, die Sie als Parameter festlegen möchten. Der Name, der als Wert von keyName in der Vorlage angegeben werden kann, lautet außerdem Listable in der Methode getAllObjects des Dienstes 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')
Der Bare-Metal-Server für die stündliche Abrechnung ist voreingestellt und mehrere Vorlagen sind vorkonfiguriert.
Hier verwenden wir die Hardware-Service-Methode createObject. Wenn Sie übrigens einen anpassbareren Bare-Metal-Server mit monatlicher Abrechnung bestellen möchten, verwenden Sie den Datentyp Container_Product_Order und legen Sie weitere Optionen fest. wird gebraucht.
Sie müssen die Vorlage als Parameter in die Methode createObject eingeben. Die Vorlage ist ein Wörterbuchobjekt, in dem das Rechenzentrum, das Betriebssystem usw. angegeben sind. Jeder Schlüssel und Wert finden Sie hier (http://sldn.softlayer.com/reference/services/softlayer_hardware/createobject). Ich werde unten kurz erklären.
Parameter | Überblick | Datentyp |
---|---|---|
datacenter.name | Bezeichnung des Rechenzentrums | string |
hostname | Server-Hostname | string |
domain | Server Domain Name | string |
hourlyBillingFlag | Wenn True, handelt es sich um einen stündlichen Abrechnungsserver. | boolean |
fixedConfigurationPreset.keyName | Wählen Sie einen voreingestellten Typ. | string |
networkComponents.maxSpeed | Gibt die Portgeschwindigkeit der Netzwerkkarte an. | int |
privateNetworkOnlyFlag | Wenn True, wird es nur auf der privaten Netzwerkkarte bereitgestellt. | boolean |
operatingSystemReferenceCode | Geben Sie das Betriebssystem an. | string |
Sie können die Liste der Werte überprüfen, die für jeden Parameter angegeben werden können, indem Sie die Methode getCreateObjectOptions des Hardwaredienstes verwenden. Übrigens können Sie das VLAN nicht nur für den Bare-Metal-Server mit stündlicher Abrechnung über den Parameter primaryNetworkComponent.networkVlan.id usw. angeben. Sie können die Bluemix-Seite nicht mit einem Ticket fragen.
Der letzte bms_allhosts enthält den FQDN des Bare-Metal-Servers. Es wird bei der Ausstellung eines Tickets verwendet.
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
Wenn Sie zuvor einen Bare-Metal-Server mit createObject bestellt haben, werden die Serverinformationen in order_bms als Rückgabewert der API gespeichert. Wenn die Bestellung jedoch bestätigt wird, werden die Server-ID und die VLAN-Informationen nicht bestätigt. Ein Beispiel für den Rückgabewert ist unten dargestellt.
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}
Die Werte für id und networkVlanId sind leer. Sie können diese Informationen zu diesem Zeitpunkt nicht abrufen, da die Bereitstellung noch nicht abgeschlossen ist.
Daher wird die ID mithilfe des globalIdentifier, der zum Zeitpunkt der Bestellung bestätigt wird, aus der getHardware-Methode des Kontodienstes entfernt. Ich versuche eine Weile zu warten, wenn die Bereitstellung nicht abgeschlossen ist.
Die VLAN-ID finden Sie auch in getNetworkVlans des Kontodienstes.
Übrigens wird die ID des Servers verwendet, um die Zugriffsberechtigung danach festzulegen, und die VLAN-ID wird verwendet, um das VLAN für den virtuellen Server anzugeben.
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()
Bestellen Sie einen stündlichen virtuellen Server. Sie können ähnlich wie bei einem Bare-Metal-Server bestellen. Verwenden Sie die createObject-Methode des Virtual_Guest-Dienstes.
Der Unterschied zum Bare-Metal-Server besteht darin, dass der Parameter primaryBackendNetworkComponent.networkVlan zuerst das zu implementierende VLAN angibt. Da der virtuelle Server das VLAN auch dann auswählen kann, wenn es stündlich aufgeladen wird, wird es in demselben VLAN bereitgestellt wie der zuvor bestellte Bare-Metal-Server. Sie können auch aus einem Bild bestellen, indem Sie den globalIdentifier der Bildvorlage in blockDeviceTemplateGroup angeben. In diesem Fall können Sie das Betriebssystem oder die Festplatte nicht angeben.
Übrigens können Sie in der Bildvorlage öffentlich oder privat angeben, aber natürlich können Sie auch bei beiden bestellen. Sie können eine Liste von der Methode getPublicImages des Dienstes Virtual_Guest_Block_Device_Template_Group abrufen, wenn dieser öffentlich ist, oder von der Methode getBlockDeviceTemplateGroups des Dienstes Account, wenn er privat ist.
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
Rufen Sie die ID des virtuellen Servers ab, wie Sie es für einen Bare-Metal-Server getan haben.
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()
Gewähren Sie dem erstellten Benutzer Serverzugriff. Verwenden Sie zunächst die Methode removeAllHardwareAccessForThisUser und die Methode removeAllVirtualAccessForThisUser des Dienstes User_Customer, um den Zugriff auf alle Server zu entfernen.
Gewähren Sie danach Zugriff auf den Server, der zuvor mit der Methode addBulkHardwareAccess und der Methode addBulkVirtualGuestAccess erstellt wurde.
Beachten Sie, dass "hardwareIds" und "virtualGuestIds" in Zuzuweisende Parameter für addBulkHardwareAccess und addBulkVirtualGuestAccess Arrays und keine int-Typen sind. Vergessen Sie nicht, es in das Listenformat zu bringen.
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)
Zum Schluss ein Ticket ausstellen und fertig. Verwenden Sie die Methode createStandardTicket des Ticketdienstes. Die in der Vorlage angegebene subjectId kann Get List mit der Methode getAllObjects des Ticket_Subject-Dienstes sein.
Da die Liste der Hosts in bms_allhosts gespeichert ist, sodass alle Server gleichzeitig geändert werden können, verwende ich sie.
Dieses Mal wurde die zeitaufwändige Erstellung einer praktischen Umgebung mit der SoftLayer-API automatisiert. Neben der praktischen Umgebung finde ich es natürlich sehr attraktiv, 10 Server bestellen, Tickets mehrmals ausstellen und verschiedene Verwaltungsaufgaben automatisieren zu können.
Bitte benutzen Sie es auf jeden Fall! !!
Darüber hinaus wird VMware in der IBM Cloud jeden Monat zum Anfassen angeboten. Wenn Sie also Bluemix berühren oder VMware lieben möchten, verwenden Sie es bitte. Es ist kostenlos. vSphere "6.5" unter IBM Bluemix Infrastructure (SoftLayer) zum Anfassen
Recommended Posts