Example #1
0
 def _check_num_nodes(self):
     if self.num_nodes < 1:
         raise ValueError('Must provision at least one node.')
     elif self.num_nodes < 3:
         linodeutils.log_warning('A Deis cluster must have 3 or more nodes, only continue if you adding to a current cluster.')
         linodeutils.log_warning('Continue? (y/n)')
         accept = None
         while True:
             if accept == 'y':
                 return
             elif accept == 'n':
                 raise StandardError('User canceled provisioning')
             else:
                 accept = self._get_user_input('--> ').strip().lower()
Example #2
0
 def _check_num_nodes(self):
     if self.num_nodes < 1:
         raise ValueError('Must provision at least one node.')
     elif self.num_nodes < 3:
         linodeutils.log_warning('A Deis cluster must have 3 or more nodes, only continue if you adding to a current cluster.')
         linodeutils.log_warning('Continue? (y/n)')
         accept = None
         while True:
             if accept == 'y':
                 return
             elif accept == 'n':
                 raise StandardError('User canceled provisioning')
             else:
                 accept = self._get_user_input('--> ').strip().lower()
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 _check_num_nodes(self):
     if self.num_nodes < 1:
         raise ValueError("Must provision at least one node.")
     elif self.num_nodes < 3:
         linodeutils.log_warning(
             "A Deis cluster must have 3 or more nodes, only continue if you adding to a current cluster."
         )
         linodeutils.log_warning("Continue? (y/n)")
         accept = None
         while True:
             if accept == "y":
                 return
             elif accept == "n":
                 raise StandardError("User canceled provisioning")
             else:
                 accept = self._get_user_input("--> ").strip().lower()
Example #5
0
    def run(self):
        #NOTE: defaults to using display group, then manual input (via nodes/hosts), then discovery_url
        if self.node_display_group:
            self.acquire_linode_ips()
            nodes = self.deis_privateips
            hosts = self.deis_publicips
        else:
            nodes = self.nodes if self.nodes is not None else self.get_nodes_from_args(
            )
            hosts = self.hosts if self.hosts is not None else nodes

        node_ips = []
        for ip in nodes:
            if self.validate_ip_address(ip):
                node_ips.append(ip)
            else:
                linodeutils.log_warning(
                    'Invalid IP will not be added to security group: ' + ip)

        if not len(node_ips) > 0:
            raise ValueError('No valid IP addresses in security group.')

        host_ips = []
        for ip in hosts:
            if self.validate_ip_address(ip):
                host_ips.append(ip)
            else:
                linodeutils.log_warning('Host has invalid IP address: ' + ip)

        if not len(host_ips) > 0:
            raise ValueError('No valid host addresses.')

        linodeutils.log_info('Generating iptables rules...')
        rules = self.get_firewall_contents(node_ips)
        linodeutils.log_success('Generated rules:')
        linodeutils.log_debug(rules)

        linodeutils.log_info('Applying rules...')
        self.apply_rules_to_all(host_ips, rules)
        linodeutils.log_success('Done!')
Example #6
0
    def run(self):
        #NOTE: defaults to using display group, then manual input (via nodes/hosts), then discovery_url
        if self.node_display_group:
            self.acquire_linode_ips()
            nodes = self.deis_privateips
            hosts = self.deis_publicips
        else:
            nodes = self.nodes if self.nodes is not None else self.get_nodes_from_args()
            hosts = self.hosts if self.hosts is not None else nodes

        node_ips = []
        for ip in nodes:
            if self.validate_ip_address(ip):
                node_ips.append(ip)
            else:
                linodeutils.log_warning('Invalid IP will not be added to security group: ' + ip)

        if not len(node_ips) > 0:
            raise ValueError('No valid IP addresses in security group.')

        host_ips = []
        for ip in hosts:
            if self.validate_ip_address(ip):
                host_ips.append(ip)
            else:
                linodeutils.log_warning('Host has invalid IP address: ' + ip)

        if not len(host_ips) > 0:
            raise ValueError('No valid host addresses.')

        linodeutils.log_info('Generating iptables rules...')
        rules = self.get_firewall_contents(node_ips)
        linodeutils.log_success('Generated rules:')
        linodeutils.log_debug(rules)
        
        linodeutils.log_info('Applying rules...')
        self.apply_rules_to_all(host_ips, rules)
        linodeutils.log_success('Done!')
Example #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)