def do_cmd(self, cmd, pattern): # get instances instance_list = util.get_instances(self.gcm_data.artifact_instances, pattern) if not instance_list: LogError('find no instance in pattern: %s' % pattern) return # get host set host_set = set() for instance in instance_list: host_set.add(instance.deploy_ip) # get user and passwd self._get_user_and_passwd(instance_list) # do real jobs if cmd == 'push_agent': self._push_agent(instance_list, list(host_set), pattern) elif cmd == 'start_agent': self._start_agent(instance_list, list(host_set), pattern) elif cmd == 'start': self._start(instance_list, list(host_set), pattern) elif cmd == 'stop': self._stop(instance_list, list(host_set), pattern) elif cmd == 'check': self._check(instance_list, list(host_set), pattern) elif cmd == 'push': self._push(instance_list, list(host_set), pattern) elif cmd == 'reload': self._reload(instance_list, list(host_set), pattern) elif cmd == 'clean': self._clean(instance_list, list(host_set), pattern)
def main(): fragment = args.fragment # TODO: prevent CTRL+c/CTRL+d from killing session if not args.skip_tmux: print("Launching into TMUX session, use CTRL+b d to exit") region = u.get_region() client = u.create_ec2_client() ec2 = u.create_ec2_resource() response = client.describe_instances() username = os.environ.get("USERNAME", "ubuntu") print("Using username '%s'" % (username, )) instance_list = [] for instance in ec2.instances.all(): if instance.state['Name'] != 'running': continue name = u.get_name(instance.tags) if (fragment in name or fragment in str(instance.public_ip_address) or fragment in str(instance.id) or fragment in str(instance.private_ip_address)): instance_list.append((u.toseconds(instance.launch_time), instance)) from tzlocal import get_localzone # $ pip install tzlocal filtered_instance_list = u.get_instances(fragment) if not filtered_instance_list: print("no instance id contains fragment '%s'" % (fragment, )) return # connect to most recent instance print(filtered_instance_list) instance = filtered_instance_list[0] print("Connecting to ", u.get_name(instance), " launched ", instance.launch_time.astimezone(get_localzone())) cmd = '' keypair_fn = u.get_keypair_fn() cmd = make_cmd(keypair_fn, username, instance.public_ip_address) print(cmd) result = os.system(cmd) if username == 'ubuntu': username = '******' elif username == 'ec2-user': username = '******' if result != 0: print("ssh failed with code %d, trying username %s" % (result, username)) cmd = make_cmd(keypair_fn, username, instance.public_ip_address) os.system(cmd)
def resync(self): procs = [] for sync in self.sync: instance = u.get_instances(args.name, verbose=False)[0] print("Syncing with ", u.get_name(instance)) command = sync.command(instance) popen = subprocess.Popen(command) procs.append({ 'popen': popen, 'command': command, }) # Wait for proc in procs: print(proc["command"]) proc['popen'].communicate() for proc in procs: if proc['popen'].returncode != 0: raise Error('Bad returncode from %s: %d', proc['command'], proc['popen'].returncode) logger.info('Resync %d complete', self.counter) self.counter += 1