def main(): """ The Fun Starts Here. """ detect_debug_mode() # Shell out to the oddball storage script from external deps. # See the external_dependencies.yml for details. # By default, put the storage script in "Big Hammer" mode. os.environ["VERBOSE"] = "1" os.environ["FORCE"] = "1" os.environ["DRY"] = "0" # The new storage script does not consistently honor all of the names # dumped in the environment by previous iterations of the RightScripts # so we're going to have to do a dirty little translation. translated = {"STORAGE_MOUNTPOINT": "MOUNT_POINT"} for key, val in translated.items(): if key in environ: log_and_stdout( " *** Translating {}={} into {}={} for mount" " script *** ".format(key, environ.get(key), val, environ.get(key)) ) os.environ[val] = os.environ.get(key) assert_command( "chmod +x ./setup.sh ./setup_aws.sh ./common.sh" " ./addons/bcache.sh", "Failed to mark storage scripts executable!", cwd="./lib/shell/storage-scripts", ) assert_command("./setup.sh", "Storage/Volume setup failed!", cwd="./lib/shell/storage-scripts")
def elb_connect(): """ Wire the node into ELB using RightInputs as parameters. """ dmc = '^.+$' # don't much care if 'ELB_NAME' in environ: # FIXME: What are the validations for these things? for key, validation in { 'ELB_NAME': dmc, 'AWS_ACCESS_KEY_ID': dmc, 'AWS_SECRET_ACCESS_KEY': dmc, 'EC2_PLACEMENT_AVAILABILITY_ZONE': dmc, 'EC2_INSTANCE_ID': dmc, 'HOME': dmc, }.items(): utils.validate_env(key, validation) # Extract a temp copy of Kingpin into /tmp before doing the ELB reg. # This *should* be possible to do without extracting Kingpin from the # zip *EXCEPT* boto has problems referencing some templates within # a zip file which it does not have if the files live in the # filesystem. apt_get_update() assert_command('apt-get install -y unzip', 'Failed to install unzip utility!') assert_command('mkdir -p /tmp/kingpin', 'Failed to create temporary directorty for Kingping!') assert_command('unzip -o -u ./lib/python/kingpin.zip -d /tmp/kingpin', 'Failed to unzip temporary Kingpin instance!') # Note: this dereferences envvars and plugs them into the JSON. # Kingpin can handle this dereferencing as well butI do it here for \ # transparency in that I also validate and print the resulting template # when in DEBUG mode. try: template_file = './lib/templates/elb-connect.json.template' with NamedTemporaryFile() as kp_script: log_and_stdout( "Kingpin script temporary file is {}".format( kp_script.name)) kp_template = Template( open(template_file, 'r').read()).safe_substitute(environ) log_and_stdout( "Content of Kingpin script is:\n{}".format(kp_template)) kp_script.write(kp_template.encode('utf-8')) kp_script.flush() kp_script.seek(0) log_and_stdout("Kingpin script created.".format(kp_template)) environ['SKIP_DRY'] = "1" cmd = "python2.7 /tmp/kingpin --debug -j {}".format( kp_script.name) assert_command(cmd, "Failed during Kingpin run!") except KeyError as e: log_and_stdout(str(e)) sys.exit(-1) except IOError as e: log_and_stdout("Output: {}".format(e.strerror)) log_and_stdout("Exit code: {}".format(e.errno)) log_and_stdout("Failed when creating Kingpin script!") sys.exit(str(e.errno)) assert_command('rm -rf /tmp/kingpin', 'Failed to remove temporary Kingpin instance!') else: log_and_stdout( ' *** No ELB_NAME specified and thus no ELB membership. This is not an error! *** ')