Example #1
0
def initialize(default_provider=None, interactive=False):
    crds_manager.install_crd(CRD_SINGULAR, CRD_PLURAL, CRD_KIND)
    if not default_provider:
        default_provider = 'gcloud' if cluster_manager.get_provider_id(
        ) == 'gcloud' else 'rancher'
    providers_manager.get_provider(
        users_provider_submodule, required=False,
        default=default_provider).initialize(interactive=interactive)
def initialize(log_kwargs=None, interactive=False, default_cluster_provider=None, skip_to=None):
    if interactive and not skip_to:
        logs.info('Starting interactive initialization of the operator on the following cluster:')
        print_info(minimal=True)
        input('Verify your are connected to the right cluster and press <RETURN> to continue')
        logs.info(f'Creating operator namespace: {OPERATOR_NAMESPACE}', **(log_kwargs or {}))
        subprocess.call(f'kubectl create ns {OPERATOR_NAMESPACE}', shell=True)
        assert default_cluster_provider in ['gcloud', 'aws'], f'invalid cluster provider: {default_cluster_provider}'

    from ckan_cloud_operator.labels import manager as labels_manager
    from ckan_cloud_operator.crds import manager as crds_manager
    from ckan_cloud_operator.providers.db import manager as db_manager
    from ckan_cloud_operator.providers.ckan import manager as ckan_manager
    from ckan_cloud_operator.providers.routers import manager as routers_manager
    from ckan_cloud_operator.providers.solr import manager as solr_manager
    from ckan_cloud_operator.providers.storage import manager as storage_manager

    for component, func in (
            ('labels', lambda lk: labels_manager.initialize(log_kwargs=lk)),
            ('cluster', lambda lk: providers_manager.get_provider('cluster', default=default_cluster_provider).initialize(interactive=interactive)),
            ('crds', lambda lk: crds_manager.initialize(log_kwargs=lk)),
            ('db', lambda lk: db_manager.initialize(log_kwargs=lk, interactive=interactive, default_cluster_provider=default_cluster_provider)),
            ('routers', lambda lk: routers_manager.initialize(interactive=interactive)),
            ('solr', lambda lk: solr_manager.initialize(interactive=interactive)),
            ('storage', lambda lk: storage_manager.initialize(interactive=interactive)),
            ('ckan', lambda lk: ckan_manager.initialize(interactive=interactive)),
    ):
        if not skip_to or skip_to == component:
            skip_to = None
            log_kwargs = {'cluster-init': component}
            logs.info(f'Initializing', **log_kwargs)
            func(log_kwargs)
Example #3
0
def print_info(debug=False, minimal=False):
    print(
        yaml.dump([
            dict(get_kubeconfig_info(),
                 nodes=get_node_names(),
                 operator_version=get_operator_version(verify=True))
        ],
                  default_flow_style=False))
    if not minimal:
        from ckan_cloud_operator.providers import manager as providers_manager
        print(
            yaml.dump([
                providers_manager.get_provider('cluster').get_info(debug=debug)
            ],
                      default_flow_style=False))
        if debug:
            assert all([
                subprocess.call(f'kubectl cluster-info', shell=True) == 0,
                subprocess.call(
                    f'kubectl config get-contexts $(kubectl config current-context)',
                    shell=True) == 0,
                subprocess.call(f'kubectl get nodes', shell=True) == 0
            ]), 'failed to get all debug info'
        else:
            return True
Example #4
0
def initialize(log_kwargs=None, interactive=False):
    """Initialize / upgrade the db module and sub-modules"""
    log_kwargs = log_kwargs or {}
    logs.info(f'Initializing DB provider', **log_kwargs)
    db_provider = providers_manager.get_provider(
        db_provider_submodule, default=db_gcloudsql_provider_id)
    db_provider.initialize(interactive=interactive)
    if db_provider.is_private_ip():
        logs.info('DB Uses a private ip, initializing the DB proxy')
        db_proxy_manager.initialize()
Example #5
0
def setup_autoscaler(expander='random',
                     min_nodes=1,
                     max_nodes=10,
                     zone='',
                     node_pool='default-pool'):
    from ckan_cloud_operator.drivers.helm import driver as helm_driver
    from ckan_cloud_operator.providers import manager as providers_manager

    cloud_provider = get_provider_id()
    cluster_name = kubectl.check_output(
        'config current-context').decode().replace('\n', '')

    if cloud_provider == 'gcloud':
        """GKE has built-in autoscaler"""
        from ckan_cloud_operator import gcloud

        gcloud.check_call(
            f'container clusters update {cluster_name} --enable-autoscaling --min-nodes {min_nodes} --max-nodes {max_nodes} --zone {zone} --node_pool {node_pool}'
        )
        return

    values = {
        'image.tag': 'v1.13.1',
        'autoDiscovery.clusterName': cluster_name,
        'extraArgs.balance-similar-node-groups': 'false',
        'extraArgs.expander': expander,
        'cloudProvider': cloud_provider,
        'rbac.create': 'true'
    }
    if values['cloudProvider'] == 'aws':
        zone = providers_manager.get_provider('cluster').get_info().get('zone')
        while not zone:
            zone = input('Enter the AWS cluster region: ')
        values['awsRegion'] = zone.strip()

    helm_driver.deploy(
        tiller_namespace='kube-system',
        chart_repo='https://kubernetes-charts.storage.googleapis.com',
        chart_name='stable/cluster-autoscaler',
        chart_version='',
        release_name='cluster-autoscaler',
        namespace='kube-system',
        chart_repo_name='stable',
        values=values)
def initialize(log_kwargs=None,
               interactive=False,
               default_cluster_provider=None):
    """Initialize / upgrade the db module and sub-modules"""
    if default_cluster_provider == 'aws':
        default_provider = db_rds_provider_id
    elif not default_cluster_provider or default_cluster_provider == 'gcloud':
        default_provider = db_gcloudsql_provider_id
    else:
        raise NotImplementedError(
            f'Unknown provider: {default_cluster_provider}')
    log_kwargs = log_kwargs or {}
    logs.info(f'Initializing DB provider', **log_kwargs)
    db_provider = providers_manager.get_provider(db_provider_submodule,
                                                 default=default_provider)
    db_provider.initialize(interactive=interactive)
    if db_provider.is_private_ip():
        logs.info('DB Uses a private ip, initializing the DB proxy')
        db_proxy_manager.initialize()
def initialize(log_kwargs=None, interactive=False, default_cluster_provider=None, skip_to=None):
    if interactive:
        logs.info('Starting interactive initialization of the operator on the following cluster:')
        print_info(minimal=True)
        if sys.stdout.isatty():
            input('Verify you are connected to the right cluster and press <RETURN> to continue')

    if not skip_to:
        logs.info(f'Creating operator namespace: {OPERATOR_NAMESPACE}', **(log_kwargs or {}))
        subprocess.call(f'kubectl create ns {OPERATOR_NAMESPACE}', shell=True)
        assert default_cluster_provider in ['gcloud', 'aws', 'azure', 'minikube'], f'invalid cluster provider: {default_cluster_provider}'
        subprocess.call(f'kubectl -n {OPERATOR_NAMESPACE} create secret generic ckan-cloud-provider-cluster-{default_cluster_provider}', shell=True)
        subprocess.call(f'kubectl -n {OPERATOR_NAMESPACE} create configmap operator-conf --from-literal=ckan-cloud-operator-image=viderum/ckan-cloud-operator:latest --from-literal=label-prefix={OPERATOR_NAMESPACE}', shell=True)

    from ckan_cloud_operator.providers import manager as providers_manager
    from ckan_cloud_operator.labels import manager as labels_manager
    from ckan_cloud_operator.crds import manager as crds_manager
    from ckan_cloud_operator.providers.db import manager as db_manager
    from ckan_cloud_operator.providers.ckan import manager as ckan_manager
    from ckan_cloud_operator.providers.routers import manager as routers_manager
    from ckan_cloud_operator.providers.solr import manager as solr_manager
    from ckan_cloud_operator.providers.storage import manager as storage_manager
    from ckan_cloud_operator.providers.apps import manager as apps_manager

    for component, func in (
            ('labels', lambda lk: labels_manager.initialize(log_kwargs=lk)),
            ('cluster', lambda lk: providers_manager.get_provider('cluster', default=default_cluster_provider).initialize(interactive=interactive)),
            ('crds', lambda lk: crds_manager.initialize(log_kwargs=lk)),
            ('db', lambda lk: db_manager.initialize(log_kwargs=lk, interactive=interactive, default_cluster_provider=default_cluster_provider)),
            ('routers', lambda lk: routers_manager.initialize(interactive=interactive)),
            ('solr', lambda lk: solr_manager.initialize(interactive=interactive)),
            ('storage', lambda lk: storage_manager.initialize(interactive=interactive)),
            ('ckan', lambda lk: ckan_manager.initialize(interactive=interactive)),
            ('apps', lambda lk: apps_manager.initialize(interactive=interactive)),
    ):
        if not skip_to or skip_to == component:
            skip_to = None
            log_kwargs = {'cluster-init': component}
            logs.info(f'Initializing', **log_kwargs)
            func(log_kwargs)
def get_provider():
    return providers_manager.get_provider('cluster')
def get_cluster_kubeconfig_spec():
    return providers_manager.get_provider('cluster').get_cluster_kubeconfig_spec()
def get_cluster_name():
    return providers_manager.get_provider('cluster').get_name()
def get_provider():
    from ckan_cloud_operator.providers import manager as providers_manager
    return providers_manager.get_provider('cluster')
def get_cluster_kubeconfig_spec():
    from ckan_cloud_operator.providers import manager as providers_manager
    return providers_manager.get_provider('cluster').get_cluster_kubeconfig_spec()
Example #13
0
def update(name):
    logs.info(f'Updating user: {name}')
    providers_manager.get_provider(users_provider_submodule, verbose=True).update(get(name))
Example #14
0
def get_provider():
    return providers_manager.get_provider(db_provider_submodule)
Example #15
0
def get_provider(default=None, verbose=False):
    from ckan_cloud_operator.providers import manager as providers_manager
    return providers_manager.get_provider(PROVIDER_SUBMODULE,
                                          default=default,
                                          verbose=verbose)
Example #16
0
def get_provider(default=None, required=True):
    return providers_manager.get_provider(PROVIDER_SUBMODULE,
                                          default=default,
                                          required=required)
Example #17
0
def initialize(default_provider='gcloud'):
    crds_manager.install_crd(CRD_SINGULAR, CRD_PLURAL, CRD_KIND)
    providers_manager.get_provider(users_provider_submodule, required=False, default=default_provider).initialize()
Example #18
0
 def initialize_cluster(lk):
     from ckan_cloud_operator.providers import manager as providers_manager
     providers_manager.get_provider(
         'cluster', default=default_cluster_provider).initialize(
             interactive=interactive)
Example #19
0
def get_provider(default=None, provider_id=None):
    return providers_manager.get_provider(PROVIDER_SUBMODULE, default=default, provider_id=provider_id)
Example #20
0
def get_provider(default=None, verbose=False):
    return providers_manager.get_provider(PROVIDER_SUBMODULE,
                                          default=default,
                                          verbose=verbose)
Example #21
0
def _get_provider(verbose=False):
    return providers_manager.get_provider(users_provider_submodule, verbose=verbose)
def _gcloud():
    return providers_manager.get_provider(cluster_provider_submodule)