def paasta_sysdig(args): if not args.local: mesos_master = get_any_mesos_master(cluster=args.cluster) ssh_cmd = 'ssh -At -o LogLevel=QUIET {0} "sudo paasta {1} --local"'.format( mesos_master, ' '.join(sys.argv[1:])) return_code, output = _run(ssh_cmd) if return_code != 0: print output sys.exit(return_code) slave, command = output.split(':', 1) subprocess.call( shlex.split("ssh -tA {0} '{1}'".format(slave, command.strip()))) return status = get_status_for_instance(cluster=args.cluster, service=args.service, instance=args.instance) slave = pick_slave_from_status(status=status, host=args.host) marathon_config = load_marathon_config() marathon_url = marathon_config.get_url()[0] marathon_user = marathon_config.get_username() marathon_pass = marathon_config.get_password() mesos_url = get_mesos_master().host marathon_parsed_url = urlparse(marathon_url) marathon_creds_url = marathon_parsed_url._replace( netloc="{0}:{1}@{2}".format(marathon_user, marathon_pass, marathon_parsed_url.netloc)) print format_mesos_command(slave, status.marathon.app_id, mesos_url, marathon_creds_url.geturl())
def paasta_sysdig(args): if not args.local: mesos_master = get_any_mesos_master(cluster=args.cluster) ssh_cmd = 'ssh -At -o LogLevel=QUIET {0} "sudo paasta {1} --local"'.format(mesos_master, ' '.join(sys.argv[1:])) return_code, output = _run(ssh_cmd) if return_code != 0: print output sys.exit(return_code) slave, command = output.split(':', 1) subprocess.call(shlex.split("ssh -tA {0} '{1}'".format(slave, command.strip()))) return status = get_status_for_instance(cluster=args.cluster, service=args.service, instance=args.instance) slave = pick_slave_from_status(status=status, host=args.host) marathon_config = load_marathon_config() marathon_url = marathon_config.get_url()[0] marathon_user = marathon_config.get_username() marathon_pass = marathon_config.get_password() mesos_url = get_mesos_master().host marathon_parsed_url = urlparse(marathon_url) marathon_creds_url = marathon_parsed_url._replace(netloc="{0}:{1}@{2}".format(marathon_user, marathon_pass, marathon_parsed_url.netloc)) print format_mesos_command(slave, status.marathon.app_id, mesos_url, marathon_creds_url.geturl())
def paasta_docker_stop(args): status = get_status_for_instance(cluster=args.cluster, service=args.service, instance=args.instance) slave = pick_slave_from_status(status=status, host=args.host) container = get_container_name(status.marathon.app_id, slave_hostname=slave, task_id=args.mesos_id) command = "sudo docker stop {0}".format(container) subprocess.call(["ssh", "-o", "LogLevel=QUIET", "-tA", slave, command])
def paasta_sysdig(args): system_paasta_config = load_system_paasta_config() if not args.local: mesos_master = get_any_mesos_master( cluster=args.cluster, system_paasta_config=system_paasta_config) ssh_cmd = ('ssh -At -o StrictHostKeyChecking=no -o LogLevel=QUIET {0} ' '"sudo paasta {1} --local"').format(mesos_master, ' '.join(sys.argv[1:])) return_code, output = _run(ssh_cmd) if return_code != 0: paasta_print(output) sys.exit(return_code) slave, command = output.split(':', 1) subprocess.call( shlex.split("ssh -tA {} '{}'".format(slave, command.strip()))) return status = get_status_for_instance( cluster=args.cluster, service=args.service, instance=args.instance, ) slave = pick_slave_from_status( status=status, host=args.host, ) job_config = load_marathon_service_config( service=args.service, instance=args.instance, cluster=args.cluster, ) marathon_servers = get_marathon_servers(system_paasta_config) marathon_clients = get_marathon_clients(marathon_servers) # Unfortunately, sysdig seems to only be able to take one marathon URL, so hopefully the service in question is not # currently moving between shards. client = marathon_clients.get_current_client_for_service( job_config=job_config, ) marathon_url = client.servers[0] marathon_user, marathon_pass = client.auth mesos_url = get_mesos_master().host marathon_parsed_url = urlparse(marathon_url) marathon_creds_url = marathon_parsed_url._replace(netloc="{}:{}@{}".format( marathon_user, marathon_pass, marathon_parsed_url.netloc, )) paasta_print( format_mesos_command(slave, status.marathon.app_id, mesos_url, marathon_creds_url.geturl()))
def test_get_status_for_instance(mock_client): mock_client.get_paasta_api_client.return_value = None with raises(SystemExit): utils.get_status_for_instance('cluster1', 'my-service', 'main') mock_client.get_paasta_api_client.assert_called_with(cluster='cluster1') mock_api = mock.Mock() mock_client.get_paasta_api_client.return_value = mock_api mock_result = mock.Mock(return_value=mock.Mock(marathon=False)) mock_api.service.status_instance.return_value = mock.Mock(result=mock_result) with raises(SystemExit): utils.get_status_for_instance('cluster1', 'my-service', 'main') mock_result = mock.Mock(return_value=mock.Mock(marathon=True)) mock_api.service.status_instance.return_value = mock.Mock(result=mock_result) utils.get_status_for_instance('cluster1', 'my-service', 'main') mock_api.service.status_instance.assert_called_with(service='my-service', instance='main')