-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge changes from feature/dns branch and conditionally disable DNS s…
…tuff if terraform/dns.tf is not present.
- Loading branch information
Showing
4 changed files
with
124 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
root = true | ||
|
||
[*] | ||
indent_style = space | ||
indent_size = 4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,122 +1,150 @@ | ||
#!/usr/bin/env python2 | ||
|
||
from collections import OrderedDict | ||
import json | ||
import os | ||
from os import path | ||
import socket | ||
import urllib2 | ||
|
||
local_vars_path = './terraform/local-vars.tf' | ||
local_vars = {} | ||
local_vars_path = path.join(path.dirname(__file__), 'terraform/local-vars.tf') | ||
|
||
# Quick-and-dirty questions and answers | ||
variable_descriptions = OrderedDict() | ||
variable_descriptions['client_ip'] = 'Client IP address' | ||
variable_descriptions['ssh_public_key_file'] = 'SSH public key file' | ||
variable_descriptions['ssh_bootstrap_password'] = 'SSH bootstrap password' | ||
variable_descriptions['dns_domain_name'] = 'Top-level domain name' | ||
variable_descriptions['dns_subdomain_name'] = 'Sub-domain name' | ||
variable_descriptions['dns_hosted_zone_id'] = 'AWS hosted DNS zone Id' | ||
variable_descriptions['aws_access_key'] = 'AWS access key' | ||
variable_descriptions['aws_secret_key'] = 'AWS secret key' | ||
|
||
# For padding questions so text lines up | ||
variable_description_max = max( | ||
len(description) for description in variable_descriptions.values() | ||
) | ||
|
||
|
||
def load_config(): | ||
variables = {} | ||
local_vars['ssh_public_key_file'] = path.join( | ||
os.getenv('HOME'), ".ssh/id_rsa" | ||
) | ||
|
||
try: | ||
with open(local_vars_path, 'r') as local_vars_file: | ||
# Read local variables | ||
local_vars_config = json.load(local_vars_file)['variable'] | ||
try: | ||
with open(local_vars_path, 'r') as local_vars_file: | ||
# Read local variables | ||
local_vars_config = json.load(local_vars_file)['variable'] | ||
|
||
for variable_name in local_vars_config.keys(): | ||
variable_value = local_vars_config[variable_name]['default'] | ||
for variable_name in local_vars_config.keys(): | ||
variable_value = local_vars_config[variable_name]['default'] | ||
|
||
variables[variable_name] = variable_value | ||
except IOError: | ||
pass # No existing configuration. | ||
local_vars[variable_name] = variable_value | ||
except IOError: | ||
print('(no existing configuration)') | ||
pass # No existing configuration. | ||
|
||
return variables | ||
|
||
def save_config(variables): | ||
local_vars_data = { | ||
'variable': {} | ||
} | ||
for name, value in variables.items(): | ||
local_vars_data['variable'][name] = { | ||
'default': value | ||
def save_config(): | ||
local_vars_data = { | ||
'variable': {} | ||
} | ||
for name, value in local_vars.items(): | ||
local_vars_data['variable'][name] = { | ||
'default': value | ||
} | ||
|
||
with open(local_vars_path, 'w') as local_vars_file: | ||
json.dump(local_vars_data, local_vars_file, indent=2) | ||
with open(local_vars_path, 'w') as local_vars_file: | ||
json.dump(local_vars_data, local_vars_file, indent=2) | ||
|
||
def show_config(variables): | ||
if 'client_ip' in variables: | ||
print('Client IP = "{}"'.format( | ||
variables['client_ip']) | ||
) | ||
if 'ssh_public_key_file' in variables: | ||
print('SSH public key file = "{}"'.format( | ||
variables['ssh_public_key_file']) | ||
) | ||
if 'ssh_bootstrap_password' in variables: | ||
print('SSH bootstrap password = "{}"'.format( | ||
variables['ssh_bootstrap_password']) | ||
) | ||
if 'dns_domain_name' in variables: | ||
print('Top-level domain name = "{}"'.format( | ||
variables['dns_domain_name']) | ||
) | ||
if 'dns_subdomain_name' in variables: | ||
print('Sub-domain name = "{}"'.format( | ||
variables['dns_subdomain_name']) | ||
) | ||
if 'dns_hosted_zone_id' in variables: | ||
print('AWS DNS hosted zone Id = "{}"'.format( | ||
variables['dns_hosted_zone_id']) | ||
) | ||
if 'aws_access_key' in variables: | ||
print('AWS access key = "{}"'.format( | ||
variables['aws_access_key']) | ||
|
||
def show_config(): | ||
for variable_name in variable_descriptions.keys(): | ||
if variable_name not in local_vars: | ||
continue | ||
|
||
print('{} = "{}"'.format( | ||
variable_descriptions[variable_name].ljust( | ||
variable_description_max, ' ' | ||
), | ||
local_vars[variable_name] | ||
)) | ||
|
||
|
||
def ask_variable(key): | ||
value = raw_input('{} (currently "{}")] = '.format( | ||
variable_descriptions[key], | ||
local_vars.get(key, '') | ||
)) | ||
|
||
if value != "": | ||
local_vars[key] = value.strip() | ||
|
||
|
||
def clear_variable(key): | ||
local_vars.pop(key, None) | ||
|
||
|
||
def detect_client_ip(): | ||
request = urllib2.Request( | ||
'http://{}/json'.format( | ||
socket.gethostbyname('ifconfig.co') # We need the IPv4 address | ||
), | ||
headers={'Host': 'ifconfig.co'} | ||
) | ||
if 'aws_secret_key' in variables: | ||
print('AWS secret key = "{}"'.format( | ||
variables['aws_secret_key']) | ||
|
||
response = json.loads( | ||
urllib2.urlopen(request).read() | ||
) | ||
|
||
def ask_variable(variables, key, prompt): | ||
value = raw_input('{} (currently "{}"): '.format( | ||
prompt, variables.get(key, '') | ||
)) | ||
if value != "": | ||
local_vars[key] = value | ||
|
||
def detect_client_ip(variables): | ||
request = urllib2.Request( | ||
'http://{}/json'.format( | ||
socket.gethostbyname('ifconfig.co') # We need the IPv4 address | ||
), | ||
headers = {'Host': 'ifconfig.co'} | ||
) | ||
|
||
response = json.loads( | ||
urllib2.urlopen(request).read() | ||
) | ||
|
||
variables['client_ip'] = response['ip'] | ||
|
||
local_vars = load_config() | ||
local_vars['client_ip'] = response['ip'] | ||
|
||
|
||
def have_dns_config(): | ||
try: | ||
os.stat( | ||
path.join(path.dirname(__file__), 'terraform/dns.tf') | ||
) | ||
except FileNotFoundError: | ||
return False | ||
else: | ||
return True | ||
|
||
|
||
load_config() | ||
if len(local_vars) > 0: | ||
print('Existing configuration:\n') | ||
show_config(local_vars) | ||
print('Existing configuration:\n') | ||
show_config() | ||
|
||
print('') | ||
print('=' * 80) | ||
print('') | ||
|
||
ask_variable(local_vars, 'client_ip', 'Client IP address') | ||
ask_variable('client_ip') | ||
if 'client_ip' not in local_vars: | ||
print('Detecting client IP...') | ||
detect_client_ip(local_vars) | ||
ask_variable(local_vars, 'ssh_public_key_file', 'SSH public key file') | ||
ask_variable(local_vars, 'ssh_bootstrap_password', 'SSH bootstrap password file') | ||
ask_variable(local_vars, 'dns_domain_name', 'Top-level domain name') | ||
ask_variable(local_vars, 'dns_subdomain_name', 'Sub-domain name') | ||
ask_variable(local_vars, 'dns_hosted_zone_id', 'AWS DNS hosted zone Id') | ||
ask_variable(local_vars, 'aws_access_key', 'AWS access key') | ||
ask_variable(local_vars, 'aws_secret_key', 'AWS secret key') | ||
|
||
save_config(local_vars) | ||
print('Detecting client IP...') | ||
detect_client_ip() | ||
ask_variable('ssh_public_key_file') | ||
ask_variable('ssh_bootstrap_password') | ||
if have_dns_config(): | ||
ask_variable('dns_domain_name') | ||
ask_variable('dns_subdomain_name') | ||
ask_variable('dns_hosted_zone_id') | ||
ask_variable('aws_access_key') | ||
ask_variable('aws_secret_key') | ||
else: | ||
clear_variable('dns_domain_name') | ||
clear_variable('dns_subdomain_name') | ||
clear_variable('dns_hosted_zone_id') | ||
clear_variable('aws_access_key') | ||
clear_variable('aws_secret_key') | ||
|
||
save_config() | ||
|
||
print('') | ||
print('=' * 80) | ||
print('') | ||
|
||
print('Current configuration:\n') | ||
show_config(local_vars) | ||
show_config() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,5 @@ | ||
provider "ddcloud" { | ||
region = "AU" | ||
|
||
auto_create_tag_keys = true | ||
region = "AU" | ||
} | ||
|
||
################# | ||
|