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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
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)