Source code for ibmcloud_python_sdk.power

import re
from ibmcloud_python_sdk.utils import constants
from ibmcloud_python_sdk.config import params
from ibmcloud_python_sdk.auth import decode_token
from ibmcloud_python_sdk.resource import resource_instance
from ibmcloud_python_sdk.auth import get_token

cfg = params()
ri = resource_instance.ResourceInstance()
power_headers = {}


[docs]def get_power_headers(**kwargs): """Generates the headers used for Power authenticated HTTP request. This function is only used by the power package which is why it's in the __init__.py file. It replace the get_headers() method from auth.py. :param region: Region where the resource instance is created. :param account: Account ID. :parem instance: Resource instance name or ID. :return: Dict of headers :rtype: dict """ # Build dict of argument and assign default value when needed args = { 'region': kwargs.get('region', cfg["region"]), 'account': kwargs.get('account', decode_token()['account']['bss']), 'instance': kwargs.get('instance'), } ri_info = None if not power_headers: if args['instance']: ri_info = ri.get_resource_instance(args['instance']) else: # Automatically detect if power-iaas service exists. regex = "crn:v1:bluemix:public:power-iaas:{}:a/{}".format( args['region'], args['account']) data = ri.get_resource_instances() for instance in data['resources']: if re.search(regex, instance['id']): ri_info = instance['id'] # Return empty headers if resource instance doesn't exist which will # result to a 401. if not ri_info: return power_headers power_headers["Content-Type"] = "application/json" power_headers["Accept"] = "application/json" power_headers["User-Agent"] = constants.USER_AGENT power_headers["Authorization"] = get_token( constants.AUTH_URL, cfg["key"]) power_headers['CRN'] = ri_info return power_headers return power_headers