#!/usr/bin/env python import requests, platform, subprocess, config, logging, simplejson as json # You must initialize logging, otherwise you'll not see debug output. logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - [%(levelname)s] %(message)s', datefmt='%Y-%m-%d %H:%M:%S') #logging.getLogger().setLevel(logging.DEBUG) #requests_log = logging.getLogger("requests.packages.urllib3") #requests_log.setLevel(logging.DEBUG) #requests_log.propagate = True def ping(host): """ Returns True if host (str) responds to a ping request. Remember that a host may not respond to a ping (ICMP) request even if the host name is valid. """ # Option for the number of packets as a function of param = '-n' if platform.system().lower()=='windows' else '-c' # Building the command. Ex: "ping -c 1 google.com" command = ['ping', param, '1', host] return subprocess.call(command) == 0 def request(resource, method='GET', data=None): if data is None: data = '' url = 'https://{}/api/v1.0/{}'.format(config.HOSTNAME, resource) logging.debug('Request URL: {}'.format(url)) logging.debug('Request Data: {}'.format(data)) logging.debug('CA Certificate Path: {}'.format(config.CA_CERT_PATH)) r = requests.request( method, url, data=json.dumps(data), headers={'Content-Type': "application/json"}, auth=('root', '{}'.format(config.ROOT_PASSWORD)), verify='{}'.format(config.CA_CERT_PATH) ) logging.debug('Request Status Code: {}'.format(r.ok)) if r.ok: try: logging.debug('Request Returned JSON: {}'.format(r.json())) return r.json() except: logging.debug('Request Returned Text: {}'.format(r.text)) return r.text raise ValueError(r) #if ping(config.HOSTNAME): POOLS = request('storage/volume/', 'GET') logging.debug('POOL Information: {}'.format(POOLS) #VOLUMES = requests.get( # 'https://{}/api/v1.0/storage/volume/'.format(config.HOSTNAME), # auth=('root', '{}'.format(config.ROOT_PASSWORD)), # verify='{}'.format(config.CA_CERT_PATH), #) for pool in POOLS: if volume['is_decrypted'] == False: logging.info('Pool {} is locked'.format(pool['name'])) response = requests.post( 'https://{}/api/v1.0/storage/volume/{}/unlock/'.format(config.HOSTNAME,pool['name']), json={'passphrase': '{}'.format(config.POOLS[pool['name']])}, auth=('root', '{}'.format(config.ROOT_PASSWORD)), verify='{}'.format(config.CA_CERT_PATH), ) if response.status_code: logging.info('Pool {} was unlocked successfully'.format(pool['name'])) else: logging.error('Pool {} was NOT unlocked successfully'.format(pool['name'])) else: logging.debug('Pool {} is already unlocked'.format(pool['name'])) #else: #print("Host,{}, is not online".format(config.HOSTNAME))