def normalize_url(self): """Return URL based on _self.path_ or construct from _API_URL_.""" url = murl.Url(self.path) if not url.scheme: url = murl.Url(API_URL) url.path = self.path LOG.debug('Request URL: %s', url.url) return url
def get_details(app='groupproject', env='dev'): """Extract details for Application. Args: app (str): Application Name env (str): Environment/account to get details from Returns: collections.namedtuple with _group_, _policy_, _profile_, _role_, _user_. """ api = murl.Url(API_URL) api.path = 'applications/{app}'.format(app=app) request = requests.get(api.url, verify=GATE_CA_BUNDLE, cert=GATE_CLIENT_CERT) if not request.ok: raise SpinnakerAppNotFound('"{0}" not found.'.format(app)) app_details = request.json() LOG.debug('App details: %s', app_details) group = app_details['attributes'].get('repoProjectKey') project = app_details['attributes'].get('repoSlug') generated = gogoutils.Generator(group, project, env=env, formats=APP_FORMATS) LOG.debug('Application details: %s', generated) return generated
def delete_pipeline(app='', pipeline_name=''): """Delete _pipeline_name_ from _app_.""" safe_pipeline_name = normalize_pipeline_name(name=pipeline_name) url = murl.Url(API_URL) LOG.warning('Deleting Pipeline: %s', safe_pipeline_name) url.path = 'pipelines/{app}/{pipeline}'.format(app=app, pipeline=safe_pipeline_name) response = requests.delete(url.url, verify=GATE_CA_BUNDLE, cert=GATE_CLIENT_CERT) if not response.ok: LOG.debug('Delete response code: %d', response.status_code) if response.status_code == requests.status_codes.codes[ 'method_not_allowed']: raise SpinnakerPipelineDeletionFailed( 'Failed to delete "{0}" from "{1}", ' 'possibly invalid Pipeline name.'.format( safe_pipeline_name, app)) else: LOG.debug('Pipeline missing, no delete required.') LOG.debug('Deleted "%s" Pipeline response:\n%s', safe_pipeline_name, response.text) return response.text
def get_env_credential(env='dev'): """Get Account Credential from Spinnaker for *env*. Args: env (str): Environment name to find credentials for. Returns: dict: Complete credentials for *env*:: { 'accountId': '123098123', 'accountType': 'dev', 'assumeRole': 'role/spinnakerManaged', 'bastionEnabled': False, 'challengeDestructiveActions': False, 'cloudProvider': 'aws', 'defaultKeyPair': 'dev_access', 'discoveryEnabled': False, 'eddaEnabled': False, 'environment': 'dev', 'front50Enabled': False, 'name': 'dev', 'primaryAccount': False, 'provider': 'aws', 'regions': [ { 'availabilityZones': ['us-east-1b', 'us-east-1c', 'us-east-1d', 'us-east-1e'], 'deprecated': False, 'name': 'us-east-1', 'preferredZones': ['us-east-1b', 'us-east-1c', 'us-east-1d', 'us-east-1e' ] }, { 'availabilityZones': ['us-west-2a', 'us-west-2b', 'us-west-2c'], 'deprecated': False, 'name': 'us-west-2', 'preferredZones': ['us-west-2a', 'us-west-2b', 'us-west-2c'] } ], 'requiredGroupMembership': [], 'sessionName': 'Spinnaker', 'type': 'aws' } """ url = murl.Url(API_URL) url.path = '/'.join(['credentials', env]) credential_response = requests.get(url.url, verify=GATE_CA_BUNDLE, cert=GATE_CLIENT_CERT) assert credential_response.ok, 'Could not get credentials from Spinnaker.' credential = credential_response.json() LOG.debug('Credentials found:\n%s', credential) return credential
def __init__(self, provider=None, api_version=None, token='', username='', password='', url='', port=None, **kwargs): """SCM object for interacting with the API. Optional parameters for HTTP Basic Authentication or API token. Token is preferred by most providers. Parameters: kwargs (dict): Various configuration options. password (str): Basic authentication password. port (int): HTTP port to use. provider (str): A provider such as gitlab, github, localhost. token (str): API token. url (str): Base URL of provider, e.g. https://gitlab.com. username (str): Basic authentication user. api_version (int): API version of provider to use. """ self.log = logging.getLogger(__name__) self.log.debug('Received parameters:\n%s', pformat(locals())) _ = kwargs self.data = {} self.headers = { 'User-agent': 'SCM Python Library v0.0.1', } self.provider = provider self.api_version = api_version self.token = token self.username = username self.password = password self.module = self.loader() self.auth = types.MethodType(self.module.auth, self) self.api_map = self.module.MAPPING _url = murl.Url(url or self.module.DEFAULT_URL) if port: _url.port = port _url.path = self.module.API_PATH self.url = _url
def delete_pipeline(app='', pipeline_name=''): """Delete _pipeline_name_ from _app_.""" url = murl.Url(API_URL) LOG.warning('Deleting Pipeline: %s', pipeline_name) url.path = 'pipelines/{app}/{pipeline}'.format(app=app, pipeline=pipeline_name) response = requests.delete(url.url, verify=GATE_CA_BUNDLE, cert=GATE_CLIENT_CERT) LOG.debug('Deleted "%s" Pipeline response:\n%s', pipeline_name, response.text) return response.text
def get_all_apps(): """Get a list of all applications in Spinnaker. Returns: requests.models.Response: Response from Gate containing list of all apps. """ LOG.info('Retreiving list of all Spinnaker applications') url = murl.Url(API_URL) url.path = 'applications' response = requests.get(url.url, verify=GATE_CA_BUNDLE, cert=GATE_CLIENT_CERT) assert response.ok, 'Could not retrieve application list' pipelines = response.json() LOG.debug('All Applications:\n%s', pipelines) return pipelines
def get_all_pipelines(app=''): """Get a list of all the Pipelines in _app_. Args: app (str): Name of Spinnaker Application. Returns: requests.models.Response: Response from Gate containing Pipelines. """ url = murl.Url(API_URL) url.path = 'applications/{app}/pipelineConfigs'.format(app=app) response = requests.get(url.url, verify=GATE_CA_BUNDLE, cert=GATE_CLIENT_CERT) assert response.ok, 'Could not retrieve Pipelines for {0}.'.format(app) pipelines = response.json() LOG.debug('Pipelines:\n%s', pipelines) return pipelines