[PYTHON] Bluemix-Script pour annuler une instance d'IaaS (anciennement SoftLayer)

Contenu

J'ai essayé d'annuler l'instance de Bluemix IaaS (anciennement SoftLayer) via l'API.

supposition

Il est supposé que vous comprenez les articles suivants. En savoir plus sur l'API Bluemix Infrastructure (anciennement SoftLayer).

ShinobiLayer: API SoftLayer Étape suivante: objet de type de données (1) --Qiita

Obtenir BillingItemId

J'ai créé un script qui peut obtenir BillingItemId dans la dernière colonne de la liste détaillée des appareils, veuillez donc l'utiliser.

scénario

getDevicesTable-BillID.py


import SoftLayer
import dateutil.parser
from prettytable import PrettyTable

# account info
client = SoftLayer.create_client_from_env()

objectmask_vitualGuests = """
	id,
	virtualGuests[
		id,
		billingItem[
			id,
			cancellationDate
		],
		notes,
		provisionDate,
		fullyQualifiedDomainName,
		primaryBackendIpAddress,
		primaryIpAddress,
		datacenter[
			longName
		],
		operatingSystem[
                        softwareLicense[
                                softwareDescription[
                                        name
                                ]
                        ],
                        passwords[
                                username,
                                password
                        ]
                ]
	]
"""
objectmask_hardware = """
	id,
	hardware[
		id,
		billingItem[
			id,
			cancellationDate
		],
		notes,
		provisionDate,
		fullyQualifiedDomainName,
		primaryBackendIpAddress,
		primaryIpAddress,
		datacenter[
			longName
		],
		operatingSystem[
			softwareLicense[
				softwareDescription[
					name
				]
			],
			passwords[		
				username,
				password
			]
		]
	]
"""

vg = client['Account'].getObject(mask=objectmask_vitualGuests)
hw = client['Account'].getObject(mask=objectmask_hardware)

virtualGuests=vg.keys()[0]
hardware=hw.keys()[0]

table = PrettyTable([
	'ID',
	'Device Name',
	'Type',
	'Location',
	'Public IP',
	'Private IP',
	'Start Date',
	'Cancel Date',
	'OS Name',
	'Username',
	'Password',
	'BillID'
	])

for key in range(len(vg['virtualGuests'])):
	for key2 in range(len(vg['virtualGuests'][key]['operatingSystem']['passwords'])):
		table.add_row([
			vg['virtualGuests'][key]['id'],
			vg['virtualGuests'][key]['fullyQualifiedDomainName'],
                	"VSI",
			vg['virtualGuests'][key]['datacenter']['longName'],
			vg['virtualGuests'][key].get('primaryIpAddress'),
			vg['virtualGuests'][key]['primaryBackendIpAddress'],
			dateutil.parser.parse(vg['virtualGuests'][key]['provisionDate']).strftime('%Y/%m/%d'),
			vg['virtualGuests'][key]['billingItem'].get('cancellationDate')[:16],
			vg['virtualGuests'][key]['operatingSystem']['softwareLicense']['softwareDescription']['name'][:16],
			vg['virtualGuests'][key]['operatingSystem']['passwords'][key2]['username'],
			vg['virtualGuests'][key]['operatingSystem']['passwords'][key2].get('password'),
			vg['virtualGuests'][key]['billingItem'].get('id')
		])
for key in range(len(hw['hardware'])):
	for key2 in range(len(hw['hardware'][key]['operatingSystem']['passwords'])):
	        table.add_row([
			hw['hardware'][key]['id'],
        	        hw['hardware'][key]['fullyQualifiedDomainName'],
        	        "BMS",
        	        hw['hardware'][key]['datacenter']['longName'],
			hw['hardware'][key].get('primaryIpAddress'),
        	        hw['hardware'][key]['primaryBackendIpAddress'],
        	        dateutil.parser.parse(hw['hardware'][key]['provisionDate']).strftime('%Y/%m/%d'),
			hw['hardware'][key]['billingItem'].get('cancellationDate')[:16],
			hw['hardware'][key]['operatingSystem']['softwareLicense']['softwareDescription']['name'][:16],
			hw['hardware'][key]['operatingSystem']['passwords'][key2]['username'],
			hw['hardware'][key]['operatingSystem']['passwords'][key2]['password'],
			hw['hardware'][key]['billingItem'].get('id')
        	])

print(table)

Exemple de résultat d'exécution

#Commande d'exécution
python ../Devices/getDevicesTable.py 

#résultat
+----------+-----------------------------------------------+------+-------------+-----------------+----------------+------------+-------------+------------------+---------------+----------+-----------+
|    ID    |                  Device Name                  | Type |   Location  |    Public IP    |   Private IP   | Start Date | Cancel Date |     OS Name      |    Username   | Password |   BillID  |
+----------+-----------------------------------------------+------+-------------+-----------------+----------------+------------+-------------+------------------+---------------+----------+-----------+
| 22222222 | xxxxxxxxxxxxx.xxxxxxxxxxxxxxx01.vsphere.local | VSI  |   Tokyo 2   |   xxx.xxx.xx.x  |  xx.xxx.xx.xx  | 2016/xx/xx |             | Windows 2012 R2  | xxxxxxxxxxxxx | xxxxxxxx | 111111111 |

Exécution de l'annulation

J'ai créé un script qui peut annuler Immédiatement / ABD en spécifiant BillingItemId, veuillez donc l'utiliser.

scénario

cancelItem.py


import SoftLayer
import json
import sys
parm=sys.argv
itemId=parm[1]

# menu
print (30 * '-')
print ("   M A I N - M E N U")
print (30 * '-')
print ("1. Immediate Cancel")
print ("2. ABD Cancel")
print (30 * '-')

# account info
client = SoftLayer.create_client_from_env()
Billing = client['SoftLayer_Billing_Item']

# define option
is_valid=0
 
while not is_valid :
        try :
                choice = int ( raw_input('Enter your choice [1-2] : ') )
                is_valid = 1 ## set it to 1 to validate input and to terminate the while..not loop
        except ValueError, e :
                print ("'%s' is not a valid integer." % e.args[0].split(": ")[1])
 
### Take action as per selected menu-option ###
if choice == 1:
        print ("Cancelling Immediately...")
	cancel = Billing.cancelItem(True,False,"No longer needed",id=itemId)
	print('Completed!')
elif choice == 2:
        print ("Configuring ABD Cancellation...")
	cancel = Billing.cancelItem(False,False,"No longer needed",id=itemId)
	print('Completed!')
else:
        print ("Invalid number. Try again...")

Exemple de résultat d'exécution

#Commande d'exécution
python cancelItem.py 111111111

#résultat
------------------------------
   M A I N - M E N U
------------------------------
1. Immediate Cancel
2. ABD Cancel
------------------------------
Enter your choice [1-2] : 1
Cancelling Immediately...
Completed!

Site référencé

Recommended Posts

Bluemix-Script pour annuler une instance d'IaaS (anciennement SoftLayer)
Script pour changer la description de fasta
Script pour tweeter avec des multiples de 3 et des nombres avec 3 !!
Créer une instance de GPU AWS pour entraîner StyleNet
Utilisation pour appeler une méthode d'une instance avant qu'elle ne soit renvoyée par __new__
Ne prenez pas une instance d'une classe d'exception Python directement comme argument de la classe d'exception!