def main(): linodeutils.init() parser = argparse.ArgumentParser(description='Provision Linode Deis Cluster') parser.add_argument('--api-key', required=True, dest='linode_api_key', help='Linode API Key') subparsers = parser.add_subparsers() provision_parser = subparsers.add_parser('provision', help="Provision the Deis cluster") provision_parser.add_argument('--num', required=False, default=3, type=int, dest='num_nodes', help='Number of nodes to provision') provision_parser.add_argument('--name-prefix', required=False, default='deis', dest='node_name_prefix', help='Node name prefix') provision_parser.add_argument('--display-group', required=False, default='deis', dest='node_display_group', help='Node display group') provision_parser.add_argument('--plan', required=False, default=4, type=int, dest='node_plan', help='Node plan id. Use list-plans to find the id.') provision_parser.add_argument('--datacenter', required=False, default=2, type=int, dest='node_data_center', help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') provision_parser.add_argument('--coreos-version', required=False, default='835.13.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') provision_parser.set_defaults(cmd=ProvisionCommand) list_data_centers_parser = subparsers.add_parser('list-data-centers', help="Lists the available Linode data centers.") list_data_centers_parser.set_defaults(cmd=ListDataCentersCommand) list_plans_parser = subparsers.add_parser('list-plans', help="Lists the available Linode plans.") list_plans_parser.set_defaults(cmd=ListPlansCommand) args = parser.parse_args() args.cmd(args).run()
def main(): linodeutils.init() parser = argparse.ArgumentParser(description='Provision Linode Deis Cluster') parser.add_argument('--api-key', required=True, dest='linode_api_key', help='Linode API Key') subparsers = parser.add_subparsers() provision_parser = subparsers.add_parser('provision', help="Provision the Deis cluster") provision_parser.add_argument('--num', required=False, default=3, type=int, dest='num_nodes', help='Number of nodes to provision') provision_parser.add_argument('--name-prefix', required=False, default='deis', dest='node_name_prefix', help='Node name prefix') provision_parser.add_argument('--display-group', required=False, default='deis', dest='node_display_group', help='Node display group') provision_parser.add_argument('--plan', required=False, default=4, type=int, dest='node_plan', help='Node plan id. Use list-plans to find the id.') provision_parser.add_argument('--datacenter', required=False, default=2, type=int, dest='node_data_center', help='Node data center id. Use list-data-centers to find the id.') provision_parser.add_argument('--cloud-config', required=False, default='linode-user-data.yaml', type=file, dest='cloud_config', help='CoreOS cloud config user-data file') provision_parser.add_argument('--coreos-version', required=False, default='899.15.0', dest='coreos_version', help='CoreOS version number to install') provision_parser.add_argument('--coreos-channel', required=False, default='stable', dest='coreos_channel', help='CoreOS channel to install from') provision_parser.set_defaults(cmd=ProvisionCommand) list_data_centers_parser = subparsers.add_parser('list-data-centers', help="Lists the available Linode data centers.") list_data_centers_parser.set_defaults(cmd=ListDataCentersCommand) list_plans_parser = subparsers.add_parser('list-plans', help="Lists the available Linode plans.") list_plans_parser.set_defaults(cmd=ListPlansCommand) args = parser.parse_args() args.cmd(args).run()
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 main(): linodeutils.init() parser = argparse.ArgumentParser( description='Apply a "Security Group" to a Deis cluster') parser.add_argument('--api-key', dest='linode_api_key', help='Linode API Key') parser.add_argument('--private-key', required=True, type=file, dest='private_key', help='Cluster SSH Private Key') parser.add_argument( '--private', action='store_true', dest='private', help='Only allow access to the cluster from the private network') parser.add_argument( '--adding-new-nodes', action='store_true', dest='adding_new_nodes', help='When adding new nodes to existing cluster, allows access to etcd' ) parser.add_argument('--discovery-url', dest='discovery_url', help='Etcd discovery url') parser.add_argument('--display-group', required=False, dest='node_display_group', help='Display group (used for Linode IP discovery).') parser.add_argument( '--hosts', nargs='+', dest='hosts', help='The public IP addresses of the hosts to apply rules to (for ssh)' ) parser.add_argument( '--nodes', nargs='+', dest='nodes', help='The private IP addresses of the hosts (for iptable setup)') parser.set_defaults(cmd=FirewallCommand) args = parser.parse_args() cmd = args.cmd(args) args.cmd(args).run()
def main(): linodeutils.init() parser = argparse.ArgumentParser(description='Apply a "Security Group" to a Deis cluster') parser.add_argument('--api-key', dest='linode_api_key', help='Linode API Key') parser.add_argument('--private-key', required=True, type=file, dest='private_key', help='Cluster SSH Private Key') parser.add_argument('--private', action='store_true', dest='private', help='Only allow access to the cluster from the private network') parser.add_argument('--adding-new-nodes', action='store_true', dest='adding_new_nodes', help='When adding new nodes to existing cluster, allows access to etcd') parser.add_argument('--discovery-url', dest='discovery_url', help='Etcd discovery url') parser.add_argument('--display-group', required=False, dest='node_display_group', help='Display group (used for Linode IP discovery).') parser.add_argument('--hosts', nargs='+', dest='hosts', help='The public IP addresses of the hosts to apply rules to (for ssh)') parser.add_argument('--nodes', nargs='+', dest='nodes', help='The private IP addresses of the hosts (for iptable setup)') parser.set_defaults(cmd=FirewallCommand) args = parser.parse_args() cmd = args.cmd(args) args.cmd(args).run()
def main(): linodeutils.init() parser = argparse.ArgumentParser(description="Provision Linode Deis Cluster") parser.add_argument("--api-key", required=True, dest="linode_api_key", help="Linode API Key") subparsers = parser.add_subparsers() provision_parser = subparsers.add_parser("provision", help="Provision the Deis cluster") provision_parser.add_argument( "--num", required=False, default=3, type=int, dest="num_nodes", help="Number of nodes to provision" ) provision_parser.add_argument( "--name-prefix", required=False, default="deis", dest="node_name_prefix", help="Node name prefix" ) provision_parser.add_argument( "--display-group", required=False, default="deis", dest="node_display_group", help="Node display group" ) provision_parser.add_argument( "--plan", required=False, default=4, type=int, dest="node_plan", help="Node plan id. Use list-plans to find the id.", ) provision_parser.add_argument( "--datacenter", required=False, default=2, type=int, dest="node_data_center", help="Node data center id. Use list-data-centers to find the id.", ) provision_parser.add_argument( "--cloud-config", required=False, default="linode-user-data.yaml", type=file, dest="cloud_config", help="CoreOS cloud config user-data file", ) provision_parser.add_argument( "--coreos-version", required=False, default="835.13.0", dest="coreos_version", help="CoreOS version number to install", ) provision_parser.add_argument( "--coreos-channel", required=False, default="stable", dest="coreos_channel", help="CoreOS channel to install from", ) provision_parser.set_defaults(cmd=ProvisionCommand) list_data_centers_parser = subparsers.add_parser( "list-data-centers", help="Lists the available Linode data centers." ) list_data_centers_parser.set_defaults(cmd=ListDataCentersCommand) list_plans_parser = subparsers.add_parser("list-plans", help="Lists the available Linode plans.") list_plans_parser.set_defaults(cmd=ListPlansCommand) args = parser.parse_args() args.cmd(args).run()
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)