Beispiel #1
0
    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)
Beispiel #2
0
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)
Beispiel #3
0
    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