Skip to content

chore: updates to fix digital ocean deployment #177

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Aug 4, 2022
Merged
8 changes: 4 additions & 4 deletions config/pulumi/Pulumi.stackname.yaml.example
Original file line number Diff line number Diff line change
Expand Up @@ -324,13 +324,13 @@ config:
# Digital Ocean Managed Kubernetes and Container Registry
############################################################################
# This is the Kubernetes version to install using Digital Ocean K8s.
digitalocean:k8s_version: 1.22.8-do.1
docean:k8s_version: 1.22.12-do.0
# This is the default instance type used by Digital Ocean K8s.
digitalocean:instance_size: s-2vcpu-4gb
docean:instance_size: s-4vcpu-8gb
# The desired node count of the Digital Ocean K8s cluster.
digitalocean:node_count: 3
docean:node_count: 3
# The region to deploy the cluster
digitalocean:region: sfo3
docean:region: sfo3
# Subscription tier for container registry
digitalocean:container_registry_subscription_tier: starter

Expand Down
38 changes: 19 additions & 19 deletions pulumi/python/automation/providers/do.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def new_stack_config(self, env_config, defaults: Union[Dict[Hashable, Any], list
config = super().new_stack_config(env_config, defaults)

if 'DIGITALOCEAN_TOKEN' not in env_config:
config['digitalocean:token'] = input("Digital Ocean API token (this is stored in plain-text - "
config['docean:token'] = input("Digital Ocean API token (this is stored in plain-text - "
"alternatively this can be specified as the environment variable "
"DIGITALOCEAN_TOKEN): ")

Expand All @@ -131,42 +131,42 @@ def new_stack_config(self, env_config, defaults: Union[Dict[Hashable, Any], list
print('Supported Kubernetes versions:')
for slug in k8s_version_slugs:
print(f' {slug}')
default_version = defaults['digitalocean:k8s_version'] or k8s_version_slugs[0]
config['digitalocean:k8s_version'] = input(f'Kubernetes version [{default_version}]: ').strip() or default_version
print(f"Kubernetes version: {config['digitalocean:k8s_version']}")
default_version = defaults['docean:k8s_version'] or k8s_version_slugs[0]
config['docean:k8s_version'] = input(f'Kubernetes version [{default_version}]: ').strip() or default_version
print(f"Kubernetes version: {config['docean:k8s_version']}")

# Kubernetes regions
k8s_regions_json_str, _ = external_process.run(do_cli.get_kubernetes_regions_json())
k8s_regions_json = json.loads(k8s_regions_json_str)
default_region = defaults['digitalocean:region'] or k8s_regions_json[-1]['slug']
default_region = defaults['docean:region'] or k8s_regions_json[-1]['slug']

print('Supported Regions:')
for item in k8s_regions_json:
print(f" {item['name']}: {item['slug']}")
config['digitalocean:region'] = input(f'Region [{default_region}]: ').strip() or default_region
print(f"Region: {config['digitalocean:region']}")
config['docean:region'] = input(f'Region [{default_region}]: ').strip() or default_region
print(f"Region: {config['docean:region']}")

# Kubernetes instance size
k8s_sizes_json_str, _ = external_process.run(do_cli.get_kubernetes_instance_sizes_json())
k8s_sizes_json = json.loads(k8s_sizes_json_str)
k8s_sizes_slugs = [size['slug'] for size in k8s_sizes_json]
default_size = defaults['digitalocean:instance_size'] or 's-2vcpu-4gb'
default_size = defaults['docean:instance_size'] or 's-2vcpu-4gb'

print('Supported Instance Sizes:')
for slug in k8s_sizes_slugs:
print(f' {slug}')

config['digitalocean:instance_size'] = input(f'Instance size [{default_size}]: ').strip() or default_size
print(f"Instance size: {config['digitalocean:instance_size']}")
config['docean:instance_size'] = input(f'Instance size [{default_size}]: ').strip() or default_size
print(f"Instance size: {config['docean:instance_size']}")

# Kubernetes instance count
default_node_count = defaults['digitalocean:node_count'] or 3
while 'digitalocean:node_count' not in config:
default_node_count = defaults['docean:node_count'] or 3
while 'docean:node_count' not in config:
node_count = input('Node count for Kubernetes cluster '
f'[{default_node_count}]: ').strip() or default_node_count
if type(node_count) == int or node_count.isdigit():
config['digitalocean:node_count'] = int(node_count)
print(f"Node count: {config['digitalocean:node_count']}")
config['docean:node_count'] = int(node_count)
print(f"Node count: {config['docean:node_count']}")

return config

Expand Down Expand Up @@ -217,16 +217,16 @@ def token(stack_config: Union[Mapping[str, Any], MutableMapping[str, auto._confi
return env_config['DIGITALOCEAN_TOKEN']

# We were given a reference to a StackConfigParser object
if 'config' in stack_config and 'digitalocean:token' in stack_config['config']:
return stack_config['config']['digitalocean:token']
if 'config' in stack_config and 'docean:token' in stack_config['config']:
return stack_config['config']['docean:token']

# We were given a reference to a Pulumi Stack configuration
if 'digitalocean:token' in stack_config:
return stack_config['digitalocean:token'].value
if 'docean:token' in stack_config:
return stack_config['docean:token'].value

# Otherwise
msg = 'When using the Digital Ocean provider, an API token must be specified - ' \
'this token can be specified with the Pulumi config parameter digitalocean:token ' \
'this token can be specified with the Pulumi config parameter docean:token ' \
'or the environment variable DIGITALOCEAN_TOKEN'
raise InvalidConfigurationException(msg)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from kic_util import external_process

config = pulumi.Config('digitalocean')
config = pulumi.Config('docean')
# valid values: starter, basic, professional
subscription_tier = config.get('container_registry_subscription_tier')
if not subscription_tier:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,14 @@ def extract_ip_address(lb_ingress):
config = pulumi.Config('kic-helm')
fqdn = config.require('fqdn')

ingress_domain = docean.Domain.get(resource_name='ingress-domain', id=fqdn, name=fqdn)
#
# Split our hostname off the domain name to build the DNS records
#
hostname, domainname = fqdn.split('.',1)

ingress_domain = docean.Domain.get(resource_name='ingress-domain', id=domainname, name=domainname)
ingress_a_record = docean.DnsRecord(resource_name='ingress-a-record',
name='@',
name=hostname,
domain=ingress_domain.id,
type="A",
ttl=1800,
Expand Down
8 changes: 4 additions & 4 deletions pulumi/python/infrastructure/digitalocean/domk8s/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@

from kic_util import pulumi_config
# Configuration details for the K8 cluster
config = pulumi.Config('digitalocean')
config = pulumi.Config('docean')
instance_size = config.get('instance_size')
if not instance_size:
instance_size = 's-2vcpu-4gb'
instance_size = 's-4vcpu-8gb'
region = config.get('region')
if not region:
region = 'sfo3'
node_count = config.get('node_count')
node_count = config.get_int('node_count')
if not node_count:
node_count = 3
k8s_version = config.get('k8s_version')
Expand Down Expand Up @@ -41,7 +41,7 @@ def container_registry_project_name():
node_pool=KubernetesClusterNodePoolArgs(
name=pool_name,
size=instance_size,
node_count=node_count,
node_count=node_count
))

kubeconfig = cluster.kube_configs[0].raw_config
Expand Down
21 changes: 5 additions & 16 deletions pulumi/python/kubernetes/applications/sirius/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,22 +363,11 @@ def add_namespace(obj):
)],
))

# We use the kubernetes namespace for this
config = pulumi.Config('kubernetes')
infra_type = config.require('infra_type')
if infra_type == 'AWS':
application_url = sirius_host.apply(lambda host: f'https://{host}')
pulumi.export('application_url', application_url)
elif infra_type == 'kubeconfig':
pulumi.export('hostname', lb_ingress_hostname)
pulumi.export('ipaddress', lb_ingress_ip)
# pulumi.export('application_url', f'https://{lb_ingress_hostname}')
application_url = sirius_host.apply(lambda host: f'https://{host}')
elif infra_type == 'DO':
pulumi.export('hostname', lb_ingress_hostname)
pulumi.export('ipaddress', lb_ingress_ip)
# pulumi.export('application_url', f'https://{lb_ingress_hostname}')
application_url = sirius_host.apply(lambda host: f'https://{host}')
#
# Get the hostname for our connect URL
#
application_url = sirius_host.apply(lambda host: f'https://{host}')
pulumi.export('application_url', application_url)

#
# Get the chart values for both monitoring charts, switch back to the Sirius
Expand Down