Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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