def set_node_type(*args, **kwargs): """ec2 node set type cluster_name_or_config node nodetype [--pem=/path/to/pem.key] Set the given node (by index, hostname, IP, etc) to be of the specified node type in Puppet, e.g. setting sirikata_redis to make it a Redis server. Setting to 'default' reverts to the original config. """ name_or_config, nodeid, nodetype = arguments.parse_or_die(set_node_type, [object, str, str], *args) pemfile = os.path.expanduser(config.kwarg_or_get('pem', kwargs, 'SIRIKATA_CLUSTER_PEMFILE')) # Explicit check for known types so we don't get our config into a bad state if nodetype not in ['default', 'sirikata_redis']: print "The specified node type (%s) isn't known." % (nodetype) return 1 name, cc = name_and_config(name_or_config) if 'instances' not in cc.state: print "No active instances were found, are you sure this cluster is currently running?" exit(1) conn = EC2Connection(config.AWS_ACCESS_KEY_ID, config.AWS_SECRET_ACCESS_KEY) # Update entry in local storage so we can update later if 'node-types' not in cc.state: cc.state['node-types'] = {} if 'capabilities' not in cc.state: cc.state['capabilities'] = {} inst = get_node(cc, conn, nodeid) if nodetype == 'default': if pacemaker_id(inst) in cc.state['node-types']: del cc.state['node-types'][pacemaker_id(inst)] if inst.id in cc.state['capabilities']: del cc.state['capabilities'][inst.id] else: cc.state['node-types'][pacemaker_id(inst)] = nodetype # Note currently only 1, the puppet setup doesn't really have composability right now anyway... cc.state['capabilities'][inst.id] = 'redis' cc.save() # Generate config node_config = ''.join(["node '%s' inherits %s {}" % (pacemakerid,nt) for pacemakerid,nt in cc.state['node-types'].iteritems()]) data.save(node_config, 'puppet', 'manifests', 'nodes.pp') pem_kwargs = {} if pemfile is not None: pem_kwargs['pem'] = pemfile return puppet.update(cc, **pem_kwargs)
def generate_default_node_config(): """Generates a default empty node configuration (all nodes as default class) if a node config doesn't exist yet.""" if not data.exists('puppet', 'manifests', 'nodes.pp'): data.save('', 'puppet', 'manifests', 'nodes.pp')