def get_routes(datapusher_name, deis_instance_id, backend_url_target_id, one, external_domain, edit): if datapusher_name: assert not deis_instance_id routes = routers_manager.get_datapusher_routes(datapusher_name, edit=edit) elif deis_instance_id: routes = routers_manager.get_deis_instance_routes(deis_instance_id, edit=edit) elif backend_url_target_id: routes = routers_manager.get_backend_url_routes(backend_url_target_id, edit=edit) else: raise Exception(f'invalid arguments') if routes: if one: assert len(routes) == 1, 'too many routes!' for route in routes: if external_domain: data = routers_manager.get_route_frontend_hostname(route) if one: print(data) else: print(yaml.dump([data], default_flow_style=False)) else: data = { 'name': route['metadata']['name'], 'backend-url': routes_manager.get_backend_url(route), 'frontend-hostname': routes_manager.get_frontend_hostname(route), } if one: print(yaml.dump(data, default_flow_style=False)) else: print(yaml.dump([data], default_flow_style=False))
def get_routes(datapusher_name, deis_instance_id, ckan_instance_id, backend_url_target_id, one, external_domain, edit): if datapusher_name: assert not deis_instance_id and not ckan_instance_id and not backend_url_target_id routes = routers_manager.get_datapusher_routes(datapusher_name, edit=edit) elif deis_instance_id: assert not datapusher_name and not ckan_instance_id and not backend_url_target_id routes = routers_manager.get_deis_instance_routes(deis_instance_id, edit=edit) elif ckan_instance_id: assert not datapusher_name and not deis_instance_id and not backend_url_target_id routes = routers_manager.get_ckan_instance_routes(ckan_instance_id, edit=edit) elif backend_url_target_id: assert not datapusher_name and not deis_instance_id and not ckan_instance_id routes = routers_manager.get_backend_url_routes( backend_url_target_id, edit=edit) else: routes = routers_manager.get_all_routes() if routes: if one: assert len(routes) == 1, 'too many routes!' for route in routes: if external_domain: data = routers_manager.get_route_frontend_hostname(route) if one: print(data) else: print(yaml.dump([data], default_flow_style=False)) else: try: data = { 'name': route['metadata']['name'], 'backend-url': routes_manager.get_backend_url(route), 'frontend-hostname': routes_manager.get_frontend_hostname(route), 'router-name': route['spec']['router_name'] } except Exception as e: print('Warning: %s' % repr(e)) continue if one: print(yaml.dump(data, default_flow_style=False)) else: print(yaml.dump([data], default_flow_style=False))
def main(old_instance_id, new_instance_id, dry_run): dry_run = (dry_run == 'yes') router_names = set() for route in routers_manager.get_deis_instance_routes(old_instance_id): for label in [ 'ckan-cloud/route-deis-instance-id', 'ckan-cloud/route-target-resource-id' ]: _assert_set(route['metadata']['labels'], label, old_instance_id, new_instance_id) for attr in ['deis-instance-id', 'route-target-resource-id']: _assert_set(route['spec'], attr, old_instance_id, new_instance_id) kubectl.apply(route, dry_run=dry_run) router_names.add(route['spec']['router_name']) logs.info('updating routers', router_names=router_names) if not dry_run: for router_name in router_names: routers_manager.update(router_name)
def migrate_from_deis(old_site_id, new_instance_id, router_name, deis_instance_class, skip_gitlab=False, db_migration_name=None, recreate=False, skip_routes=False, skip_solr=False, skip_deployment=False, no_db_proxy=False): assert db_migration_name, 'migration without a db migration is not supported yet' log_labels = {'instance': new_instance_id} if recreate: from ckan_cloud_operator.deis_ckan.instance import DeisCkanInstance DeisCkanInstance(new_instance_id).delete( force=True, wait_deleted=not db_migration_name) logs.info( f'Migrating from old site id {old_site_id} to new instance id {new_instance_id}', **log_labels) instance_kind = ckan_manager.instance_kind() values = kubectl.get(f'{instance_kind} {new_instance_id}', required=False) if values: logs.info('instance already exists', **log_labels) else: logs.info('creating instance', **log_labels) path_to_old_cluster_kubeconfig = get_path_to_old_cluster_kubeconfig() solr_config = get_solr_config(old_site_id, path_to_old_cluster_kubeconfig) assert solr_config, 'failed to get solr config name' instance_env = get_instance_env(old_site_id, path_to_old_cluster_kubeconfig) gitlab_repo = f'viderum/cloud-{old_site_id}' if not skip_gitlab: CkanGitlab().initialize(gitlab_repo) gitlab_registry = f'registry.gitlab.com/{gitlab_repo}' old_bucket_name = instance_env.get( 'CKANEXT__S3FILESTORE__AWS_BUCKET_NAME') old_storage_path = instance_env.get( 'CKANEXT__S3FILESTORE__AWS_STORAGE_PATH') assert old_bucket_name == 'ckan' assert old_storage_path and len(old_storage_path) > 1 storage_path = f'/ckan/{old_storage_path}' deis_instance_class.create('from-gcloud-envvars', instance_env, gitlab_registry, solr_config, storage_path, new_instance_id, db_migration_name=db_migration_name) routers_env_id = routers_provider.get_env_id() default_root_domain = routers_provider.get_default_root_domain() assert routers_env_id and default_root_domain ckan_site_url = f'https://cc-{routers_env_id}-{new_instance_id}.{default_root_domain}' logs.info( f'updating instance and setting ckan site url to {ckan_site_url}', **log_labels) deis_instance_class(new_instance_id, override_spec={ 'envvars': { 'CKAN_SITE_URL': ckan_site_url }, **({ 'db': { 'no-db-proxy': 'yes' }, 'datastore': { 'no-db-proxy': 'yes' } } if no_db_proxy else {}) }, persist_overrides=True).update( wait_ready=True, skip_solr=skip_solr, skip_deployment=skip_deployment) if routers_manager.get_deis_instance_routes(new_instance_id): logs.info('default instance route already exists', **log_labels) else: logs.info('creating instance route', **log_labels) routers_manager.create_subdomain_route( router_name, { 'target-type': 'deis-instance', 'deis-instance-id': new_instance_id, 'root-domain': 'default', 'sub-domain': 'default' }) if not skip_routes: routers_manager.update(router_name, wait_ready=True) if not skip_solr: logs.info('Rebuilding solr search index', **log_labels) deis_instance_class(new_instance_id).ckan.paster( 'search-index rebuild --force')