Last active
December 20, 2016 20:11
-
-
Save allthingsclowd/0e812ce4b7670908eb1295bfe007e21a to your computer and use it in GitHub Desktop.
Fujitsu K5 Python 2.7X Example API Call to Add a New Interface to an Existing Server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
"""Summary: Python 2.7X API example calls to do the following | |
1. Get a project scoped K5 token | |
2. Attach a new interface to an existing server | |
Prerequisites: k5contractsettingsV7.py file in the same directory with K5 contract login details | |
adminUser = 'username' | |
adminPassword = 'password' | |
contract = 'contract_name' | |
contractid = 'contract_id' | |
defaultid = 'default_project_id' | |
region = 'uk-1' | |
Author: Graham Land | |
Date: 20/12/16 | |
Twitter: @allthingsclowd | |
Github: https://github.com/allthingsclowd | |
Blog: https://allthingscloud.eu | |
""" | |
import requests | |
import getopt | |
import sys | |
from k5contractsettingsV7 import * | |
def get_scoped_token(adminUser, adminPassword, contract, projectid, region): | |
"""Summary - Get a regional project scoped token using a username and password | |
Returns: | |
Object: Regionally Scoped Project Token Object | |
Args: | |
adminUser (TYPE): username | |
adminPassword (TYPE): password | |
contract (TYPE): contract name | |
projectid (TYPE): project id | |
region (TYPE): region | |
""" | |
identityURL = 'https://identity.' + region + \ | |
'.cloud.global.fujitsu.com/v3/auth/tokens' | |
try: | |
response = requests.post(identityURL, | |
headers={'Content-Type': 'application/json', | |
'Accept': 'application/json'}, | |
json={"auth": | |
{"identity": | |
{"methods": ["password"], "password": | |
{"user": | |
{"domain": | |
{"name": contract}, | |
"name": adminUser, | |
"password": adminPassword | |
}}}, | |
"scope": | |
{"project": | |
{"id": projectid | |
}}}}) | |
return response | |
except: | |
return 'Regional Project Token Scoping Failure' | |
def attach_interface_to_server(k5token, project_id, net_id, server_id, region): | |
"""Summary | |
Args: | |
k5token (TYPE): project scoped token | |
project_id (TYPE): id of the project where the server resides | |
net_id (TYPE): network id of the new interface to be added to the server | |
server_id (TYPE): id of the server to receive the new interface | |
region (TYPE): K5 region | |
Returns: | |
TYPE: Description | |
""" | |
serverURL = 'https://compute.' + region + '.cloud.global.fujitsu.com/v2/' + \ | |
project_id + '/servers/' + server_id + '/os-interface' | |
try: | |
response = requests.post(serverURL, | |
headers={ | |
'X-Auth-Token': k5token, 'Content-Type': 'application/json', 'Accept': 'application/json'}, | |
json={"interfaceAttachment": | |
{"net_id": net_id | |
}}) | |
return response | |
except: | |
return "Unable to add interface to server" | |
def main(): | |
try: | |
# ensure minimium commandline paramaters have been supplied | |
if (len(sys.argv)<6): | |
print("Script to demonstrate how to add an interface to an existing server.") | |
print("Once complete it will be necessary to configure the interface within the OS (a reboot may be required)") | |
print("Usage: %s -n 'network id' -s 'server id' -p 'project id'" % sys.argv[0]) | |
sys.exit(2) | |
# load the command line parameters | |
myopts, args = getopt.getopt(sys.argv[1:],"n:p:s:",["net_id=","project_id=","server_id="]) | |
except getopt.GetoptError: | |
# if the parameters are incorrect display error message | |
print("Script to demonstrate how to add an interface to an existing server.") | |
print("Once complete it will be necessary to configure the interface within the OS (a reboot may be required)") | |
print("Usage: %s -n 'network id' -s 'server id' -p 'project id'" % sys.argv[0]) | |
sys.exit(2) | |
# set the variables from the command line parameters | |
############################### | |
# o == option | |
# a == argument passed to the o | |
############################### | |
for o, a in myopts: | |
if o in ('-s', '--server_id'): | |
server_id = a | |
elif o in ('-n', '--net_id'): | |
network_id = a | |
elif o in ('-p', '--projects'): | |
project_id = a | |
else: | |
# if the parameters are incorrect display error message | |
print("Script to demonstrate how to add an interface to an existing server.") | |
print("Once complete it will be necessary to configure the interface within the OS (a reboot may be required)") | |
print("Usage: %s -n 'network id' -s 'server id' -p 'project id'" % sys.argv[0]) | |
k5token = get_scoped_token(adminUser, adminPassword, contract, project_id, region).headers['X-Subject-Token'] | |
print k5token | |
result = attach_interface_to_server(k5token, project_id, network_id, server_id, region) | |
print result.json() | |
if __name__ == "__main__": | |
main() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment