コード例 #1
0
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()
コード例 #2
0
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()
コード例 #3
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)
コード例 #4
0
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()
コード例 #5
0
ファイル: apply-firewall.py プロジェクト: CloudSide/deis
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()
コード例 #6
0
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()
コード例 #7
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)