def main(): linodeutils.init() parser = argparse.ArgumentParser(description="Create Linode User Data") parser.add_argument( "--public-key", action="append", required=True, type=file, dest="public_key_files", help="Authorized SSH Keys" ) parser.add_argument("--etcd-token", required=False, default=None, dest="etcd_token", help="Etcd Token") args = parser.parse_args() etcd_token = args.etcd_token if etcd_token is None: etcd_token = generate_etcd_token() else: if not validate_etcd_token(args.etcd_token): raise ValueError("Invalid Etcd Token. You can generate a new token at https://discovery.etcd.io/new.") public_keys = [] for public_key_file in args.public_key_files: public_key = public_key_file.read() if validate_public_key(public_key): public_keys.append(public_key) else: linodeutils.log_warning("Invalid public key: " + public_key_file.name) if not len(public_keys) > 0: raise ValueError("Must supply at least one valid public key") linode_user_data = linodeutils.get_file("linode-user-data.yaml", "w", True) linode_template = linodeutils.get_file("linode-user-data-template.yaml") coreos_template = linodeutils.get_file("../coreos/user-data.example") coreos_template_string = coreos_template.read() coreos_template_string = coreos_template_string.replace( "#DISCOVERY_URL", "https://discovery.etcd.io/" + str(etcd_token) ) configuration_linode_template = yaml.safe_load(linode_template) configuration_coreos_template = yaml.safe_load(coreos_template_string) configuration = linodeutils.combine_dicts(configuration_coreos_template, configuration_linode_template) configuration["ssh_authorized_keys"] = public_keys dump = yaml.dump(configuration, default_flow_style=False, default_style="|") with linode_user_data as outfile: outfile.write("#cloud-config\n\n" + dump) linodeutils.log_success("Wrote Linode user data to " + linode_user_data.name)
def get_discovery_url_from_user_data(self): name = 'linode-user-data.yaml' linodeutils.log_info('Loading discovery url from ' + name) try: user_data_file = linodeutils.get_file(name) user_data_yaml = yaml.safe_load(user_data_file) return user_data_yaml['coreos']['etcd2']['discovery'] except: raise IOError('Could not load discovery url from ' + name)
def main(): linodeutils.init() parser = argparse.ArgumentParser(description='Create Linode User Data') parser.add_argument('--public-key', action='append', required=True, type=file, dest='public_key_files', help='Authorized SSH Keys') parser.add_argument('--etcd-token', required=False, default=None, dest='etcd_token', help='Etcd Token') args = parser.parse_args() etcd_token = args.etcd_token if etcd_token is None: etcd_token = generate_etcd_token() else: if not validate_etcd_token(args.etcd_token): raise ValueError( 'Invalid Etcd Token. You can generate a new token at https://discovery.etcd.io/new.' ) public_keys = [] for public_key_file in args.public_key_files: public_key = public_key_file.read() if validate_public_key(public_key): public_keys.append(public_key) else: linodeutils.log_warning('Invalid public key: ' + public_key_file.name) if not len(public_keys) > 0: raise ValueError('Must supply at least one valid public key') linode_user_data = linodeutils.get_file("linode-user-data.yaml", "w", True) linode_template = linodeutils.get_file("linode-user-data-template.yaml") coreos_template = linodeutils.get_file("../coreos/user-data.example") coreos_template_string = coreos_template.read() coreos_template_string = coreos_template_string.replace( '#DISCOVERY_URL', 'https://discovery.etcd.io/' + str(etcd_token)) configuration_linode_template = yaml.safe_load(linode_template) configuration_coreos_template = yaml.safe_load(coreos_template_string) configuration = linodeutils.combine_dicts(configuration_coreos_template, configuration_linode_template) configuration['ssh_authorized_keys'] = public_keys dump = yaml.dump(configuration, default_flow_style=False, default_style='|') with linode_user_data as outfile: outfile.write("#cloud-config\n\n" + dump) linodeutils.log_success('Wrote Linode user data to ' + linode_user_data.name)