Skip to content

Instantly share code, notes, and snippets.

@weldpua2008
Created August 15, 2018 04:58
Show Gist options
  • Save weldpua2008/41c39751a127cfc63e9f065f8842a41d to your computer and use it in GitHub Desktop.
Save weldpua2008/41c39751a127cfc63e9f065f8842a41d to your computer and use it in GitHub Desktop.
Get root password on all servers via LeaseWEB API v2.0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import json
apiurl = 'https://api.leaseweb.com/bareMetals/v2/servers'
apikey = '****-****-***'
headers = {"X-Lsw-Auth": apikey}
results = []
debug = 0
ips_pool = []
def get_lists():
servers_number = None
baremetal_obj = None
result_baremetal_obj = []
finished = False
ofset = 0
limit = 50
while not finished:
apiurlWithOffset = apiurl + '?offset='+str(ofset)+'&limit=' + str(limit)
print apiurlWithOffset
response = requests.get(apiurlWithOffset, headers=headers)
content = response.text
content_json = json.loads(content)
ofset = ofset + limit
baremetal_obj = None
try:
servers_number = len(content_json["bareMetals"])
if servers_number < 1:
finished = True
break
baremetal_obj = content_json["bareMetals"]
result_baremetal_obj = result_baremetal_obj + baremetal_obj
except KeyError as e:
# try:
# "_metadata"
# except Exception as e:
# raise e
servers_number = len(content_json["servers"])
if servers_number < 1:
finished = True
break
baremetal_obj = content_json["servers"]
# print type(baremetal_obj)
result_baremetal_obj = result_baremetal_obj + baremetal_obj
# if isinstance(baremetal_obj,list):
# result_baremetal_obj.update(baremetal_obj.copy())
# print result_baremetal_obj
if ofset > 500:
finished = True
return (servers_number, result_baremetal_obj)
def get_credentials_by_serverid(id=None, content_json=[]):
baremetal_data = {}
# print(content_json)
servers_number = len(content_json)
for count in range(servers_number):
baremetal_json = content_json[count]
baremetal_id = None
try:
baremetal_id = baremetal_json['bareMetal']["bareMetalId"]
except KeyError as e:
# print baremetal_json
baremetal_id = baremetal_json["id"]
reference = baremetal_json["contract"]["reference"]
internalReference = baremetal_json["contract"]["internalReference"]
# print baremetal_json["contract"]
# print len(reference)
# if isinstance(reference, basestring) and len(reference) > 0:
# continue
# if baremetal_id == id:
# apiurl_getip = 'https://api.leaseweb.com/bareMetals/v2/servers/' + baremetal_id + '/credentials'
apiurl_getip = 'https://api.leaseweb.com/bareMetals/v2/servers/' + baremetal_id + '/credentials/OPERATING_SYSTEM/root'
if debug == 1:
print(apiurl_getip + "\n")
try:
ips_request = requests.get(apiurl_getip, headers=headers)
ips_request_text = ips_request.text
ips_request_json = json.loads(ips_request_text)
print "{} {} {}".format(internalReference,ips_request_json["password"],reference)
except Exception as e:
print e
servers_number, baremetal_obj = get_lists()
get_credentials_by_serverid("281230", baremetal_obj)
@weldpua2008
Copy link
Author

Get IPs by server name

# -*- coding: utf-8 -*-
import requests
import json
import argparse
import sys


# apiurl = 'https://api.leaseweb.com/v2/bareMetals'
apiurl = 'https://api.leaseweb.com/bareMetals/v2/servers'
apikey = '****-****-***'

headers = {"X-Lsw-Auth": apikey}
results = []
debug = 0
ips_pool = []

def get_lists():
    
    servers_number = None
    baremetal_obj = None
    result_baremetal_obj = []
    finished = False
    ofset = 0
    limit = 50
    while not finished:
        apiurlWithOffset = apiurl + '?offset='+str(ofset)+'&limit=' + str(limit)
        # print apiurlWithOffset
        response = requests.get(apiurlWithOffset, headers=headers)
        content = response.text
        content_json = json.loads(content)
        ofset = ofset + limit
        baremetal_obj = None
        try:
            servers_number = len(content_json["bareMetals"])
            if servers_number < 1:
                finished = True
                break
            baremetal_obj = content_json["bareMetals"]            
            result_baremetal_obj = result_baremetal_obj  + baremetal_obj
        except KeyError as e:
            # try:
            #     "_metadata"
            # except Exception as e:
            #     raise e
            servers_number = len(content_json["servers"])
            if servers_number < 1:
                finished = True
                break
            baremetal_obj = content_json["servers"]
            # print type(baremetal_obj)
            result_baremetal_obj = result_baremetal_obj  + baremetal_obj
        # if isinstance(baremetal_obj,list):
        #     result_baremetal_obj.update(baremetal_obj.copy())        
        #     print result_baremetal_obj
        if ofset > 500:
            finished = True
    return (servers_number, result_baremetal_obj)

def get_id_by_servername(name=None, content_json=[]):

    baremetal_data = {}
    # print(content_json)
    servers_number = len(content_json)
    for count in range(servers_number):
        baremetal_json = content_json[count]
        baremetal_id = None
        try:
            baremetal_id = baremetal_json['bareMetal']["bareMetalId"]
        except KeyError as e:
            # print baremetal_json
            baremetal_id = baremetal_json["id"]
        
        reference = baremetal_json["contract"]["reference"]
        internalReference = baremetal_json["contract"]["internalReference"]
        # print internalReference
        
        # apiurl_getip = 'https://api.leaseweb.com/bareMetals/v2/servers/' + baremetal_id + '/credentials/OPERATING_SYSTEM/root'
        apiurl_getip = 'https://api.leaseweb.com/bareMetals/v2/servers/' + baremetal_id + ''

        if debug == 1:
            print(apiurl_getip + "\n")
        try:
            if name in internalReference:
                # print "Going update {} {} => {}".format(internalReference,reference,servername)
                # payload = "{  \"reference\": \""+ servername + "\"}"
                # payload = {  "reference" : servername  }
                # print payload
                # r = requests.put('http://httpbin.org/put', data = {'key':'value'})
                # ips_request = requests.put(apiurl_getip, headers=headers, data=payload)
                ips_request = requests.get(apiurl_getip, headers=headers)
                ips_request_text = ips_request.text
                ips_request_json = json.loads(ips_request_text)  
                ip = ips_request_json["networkInterfaces"]["public"]["ip"]
                try:
                    ip = ips_request_json["networkInterfaces"]["public"]["ip"].split("/", 1)[0]
                except Exception as e:
                    pass 
                print "{} {}".format(ip,internalReference)
                # print ips_request_json
                # print "{} {} {}".format(internalReference,ips_request_json["password"],reference)
        except Exception as e:
            print e
        


if __name__ == '__main__':  
    parser = argparse.ArgumentParser(add_help=True)    
    parser.add_argument('-s', '--servername', action="store", help="Snapshot", required=True)    
    args = parser.parse_args()
    try:
        servers_number, baremetal_obj = get_lists()
        get_id_by_servername(args.servername,baremetal_obj)
    except Exception as e:
        print("Error: %s" % e)
        sys.exit(1)

@weldpua2008
Copy link
Author

Update Reference by server name

# -*- coding: utf-8 -*-
import requests
import json
import argparse
import sys


# apiurl = 'https://api.leaseweb.com/v2/bareMetals'
apiurl = 'https://api.leaseweb.com/bareMetals/v2/servers'
apikey = '****-****-***'

headers = {"X-Lsw-Auth": apikey}
results = []
debug = 0
ips_pool = []

def get_lists():
    
    servers_number = None
    baremetal_obj = None
    result_baremetal_obj = []
    finished = False
    ofset = 0
    limit = 50
    while not finished:
        apiurlWithOffset = apiurl + '?offset='+str(ofset)+'&limit=' + str(limit)
        # print apiurlWithOffset
        response = requests.get(apiurlWithOffset, headers=headers)
        content = response.text
        content_json = json.loads(content)
        ofset = ofset + limit
        baremetal_obj = None
        try:
            servers_number = len(content_json["bareMetals"])
            if servers_number < 1:
                finished = True
                break
            baremetal_obj = content_json["bareMetals"]            
            result_baremetal_obj = result_baremetal_obj  + baremetal_obj
        except KeyError as e:
            # try:
            #     "_metadata"
            # except Exception as e:
            #     raise e
            servers_number = len(content_json["servers"])
            if servers_number < 1:
                finished = True
                break
            baremetal_obj = content_json["servers"]
            # print type(baremetal_obj)
            result_baremetal_obj = result_baremetal_obj  + baremetal_obj
        # if isinstance(baremetal_obj,list):
        #     result_baremetal_obj.update(baremetal_obj.copy())        
        #     print result_baremetal_obj
        if ofset > 500:
            finished = True
    return (servers_number, result_baremetal_obj)

def get_id_by_servername(name=None,servername=None, content_json=[]):

    baremetal_data = {}
    # print(content_json)
    servers_number = len(content_json)
    for count in range(servers_number):
        baremetal_json = content_json[count]
        baremetal_id = None
        try:
            baremetal_id = baremetal_json['bareMetal']["bareMetalId"]
        except KeyError as e:
            # print baremetal_json
            baremetal_id = baremetal_json["id"]
        
        reference = baremetal_json["contract"]["reference"]
        internalReference = baremetal_json["contract"]["internalReference"]
        # print internalReference
        
        # apiurl_getip = 'https://api.leaseweb.com/bareMetals/v2/servers/' + baremetal_id + '/credentials/OPERATING_SYSTEM/root'
        apiurl_getip = 'https://api.leaseweb.com/bareMetals/v2/servers/' + baremetal_id + ''

        if debug == 1:
            print(apiurl_getip + "\n")
        try:
            if name in internalReference:
                print "Going update {} {} => {}".format(internalReference,reference,servername)
                # payload = "{  \"reference\": \""+ servername + "\"}"
                payload = {  "reference" : servername  }
                # print payload
                # r = requests.put('http://httpbin.org/put', data = {'key':'value'})
                ips_request = requests.put(apiurl_getip, headers=headers, data=payload)
                # ips_request = requests.get(apiurl_getip, headers=headers)
                # ips_request_text = ips_request.text
                # ips_request_json = json.loads(ips_request_text)            
                # print ips_request_json
                # print "{} {} {}".format(internalReference,ips_request_json["password"],reference)
        except Exception as e:
            print e
        


if __name__ == '__main__':  
    parser = argparse.ArgumentParser(add_help=True)
    parser.add_argument('-r', '--reference', action="store", help="Droplet name", required=True)
    parser.add_argument('-s', '--servername', action="store", help="Snapshot", required=True)    
    args = parser.parse_args()
    try:
        servers_number, baremetal_obj = get_lists()
        get_id_by_servername(args.servername,args.reference,baremetal_obj)
    except Exception as e:
        print("Error: %s" % e)
        sys.exit(1)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment