def __init__(self, ctx, unit_name, role_name=None, num_instances=1): self.region_context = ctx self.unit_name = unit_name if role_name is None: self.role_name = unit_name else: self.role_name = role_name self.num_instances = int(num_instances) self.env_name = ctx.specific_environment['name'] self.env_group_name = util.env_prefix(ctx) + self.env_name self.group_name = self.env_group_name + "-" + unit_name self.context = dict(ctx.region_config.items() + ctx.default_environment.items() + ctx.specific_environment.items()) # print "raw context is "+pformat(self.context) self.context['unit_name'] = unit_name self.context['env_name'] = self.env_name self.context['env_group_name'] = self.env_group_name self.unit_yml_dir = ctx.blueprints_dir + "/units/" + unit_name self.yml = self.unit_yml_dir + "/unit.yml" self.config = util.load_yaml(self.yml, self.context) print "loaded "+unit_name+" yml: "+pformat(self.config) if 'override_region_context' in self.config: for key, value in self.config['override_region_context'].iteritems(): self.region_context.region_config[key] = value print("config====") pprint(self.config)
def add_to_haproxy(unit, host, iid): while True: # add it to the chef config output = knife_environment_show(unit.env_name) if util.is_noop(): temp = "debug-knife-file.json" iid2privipv4(iid) else: data = json.loads(output) block = 'haproxy-' + unit.unit_name region_context = unit.region_context host = util.env_prefix(region_context)+unit.env_name+"-"+unit.unit_name+"-"+iid+"."+ region_context.region_config['unit_domain'] ip = iid2privipv4(iid) # print("looking for override/haproxy/"+block+"/servers/ to add host:"+host) data['override_attributes']['haproxy'][block]["servers"].append([host, ip]) temp = util.write_temp_file(json.dumps(data), suffix=".json") util.execute_shell(["knife", "environment", "from", "file", temp]) # verify host is now in output output = knife_environment_show(unit.env_name) print >> sys.stderr, "looking for host="+host+" in output: "+str(output) if util.is_noop(): return if host in output: return else: time.sleep(10)
def create_environment(self, unit_name): # Create the EC2 group env_name = self.specific_environment['name'] group_name = util.env_prefix(self) + env_name region_name = self.region_config['EC2_REGION'] ec2.create_group(group_name, 'Environment ' + env_name, region_name) for env in [ self.default_environment, self.specific_environment ]: if 'authorizations' in env: for auth in env['authorizations']: ec2.authorize(auth, group_name, self.region_config) active_unit = unit.ChinaUnit(self, unit_name) active_unit.create_ec2_group() if 'authorizations' in active_unit.config: authorizations = active_unit.config['authorizations'] # default and env-specific grants for env in ['default', active_unit.env_name]: if env in authorizations: for auth in authorizations[env]: ec2.authorize(auth, active_unit.group_name, self.region_config)