Skip to content

Commit

Permalink
support for getting instsance values yaml (spec), add create and get …
Browse files Browse the repository at this point in the history
…instance scripts
  • Loading branch information
OriHoch committed Apr 30, 2019
1 parent f7dc359 commit 6466044
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 3 deletions.
7 changes: 5 additions & 2 deletions ckan_cloud_operator/providers/ckan/instance/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,15 @@ def update(instance_id_or_name, override_spec_json, persist_overrides, wait_read
@instance.command()
@click.argument('INSTANCE_ID_OR_NAME')
@click.argument('ATTR', required=False)
def get(instance_id_or_name, attr):
@click.option('--with-spec', is_flag=True)
def get(instance_id_or_name, attr, with_spec):
"""Get detailed information about an instance, optionally returning only a single get attribute
Example: ckan-cloud-operator ckan instance get <INSTANCE_ID_OR_NAME> deployment
"""
logs.print_yaml_dump(manager.get(instance_id_or_name, attr), exit_success=True)
if attr == 'spec':
with_spec = True
logs.print_yaml_dump(manager.get(instance_id_or_name, attr, with_spec=with_spec), exit_success=True)


@instance.command('list')
Expand Down
8 changes: 7 additions & 1 deletion ckan_cloud_operator/providers/ckan/instance/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ def create(instance_type, instance_id=None, instance_name=None, values=None, val
), dry_run=dry_run)
if instance_name:
set_name(instance_id, instance_name, dry_run=dry_run)
return instance_id


def update(instance_id_or_name, override_spec=None, persist_overrides=False, wait_ready=False, skip_deployment=False):
Expand Down Expand Up @@ -79,11 +80,16 @@ def wait_instance_ready(instance_id_or_name):
time.sleep(2)


def get(instance_id_or_name, attr=None, exclude_attr=None):
def get(instance_id_or_name, attr=None, exclude_attr=None, with_spec=False):
"""Get detailed information about the instance and related components"""
instance, instance_id, instance_type = _get_instance_id_and_type(instance_id_or_name)
if not exclude_attr:
exclude_attr = []
if not with_spec:
exclude_attr.append('spec')
gets = {
'deployment': lambda: deployment_manager.get(instance_id, instance_type, instance),
'spec': lambda: instance['spec']
}
if exclude_attr:
gets = {k: v for k, v in gets.items() if k not in exclude_attr}
Expand Down
40 changes: 40 additions & 0 deletions scripts/create helm instance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import os
import yaml
from ckan_cloud_operator import kubectl
from ckan_cloud_operator.providers.ckan.instance import manager as ckan_instance_manager


instance_type = 'helm'

instance_id = os.environ.get('INSTANCE_ID')

instance_name = os.environ.get('INSTANCE_NAME')

values_yaml = os.environ.get('VALUES_YAML')
assert values_yaml
values = yaml.load(values_yaml)

exists_ok = os.environ.get('EXISTS_OK')
exists_ok = exists_ok == 'yes'

dry_run = os.environ.get('DRY_RUN')
dry_run = dry_run == 'yes'

update = os.environ.get('UPDATE')
update = update == 'yes'

wait_ready = os.environ.get('WAIT_READY')
wait_ready = wait_ready == 'yes'


instance_id = ckan_instance_manager.create(
instance_type=instance_type, instance_id=instance_id, instance_name=instance_name,
values=values, exists_ok=exists_ok, dry_run=dry_run
)


if update:
if dry_run:
raise Exception('dry run is not supported with update')
else:
ckan_instance_manager.update(instance_id, wait_ready=wait_ready)
19 changes: 19 additions & 0 deletions scripts/get instance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import os
import yaml
from ckan_cloud_operator import kubectl
from ckan_cloud_operator import logs
from ckan_cloud_operator.providers.ckan.instance import manager as ckan_instance_manager


instance_id_or_name = os.environ.get('INSTANCE_ID_OR_NAME')

attr = os.environ.get('ATTR')

with_spec = os.environ.get('WITH_SPEC')
with_spec = with_spec == 'yes'


logs.print_yaml_dump(
ckan_instance_manager.get(instance_id_or_name=instance_id_or_name, attr=attr, with_spec=with_spec),
exit_success=True
)

0 comments on commit 6466044

Please sign in to comment.