本文整理汇总了Python中marathon.MarathonClient.get_app方法的典型用法代码示例。如果您正苦于以下问题:Python MarathonClient.get_app方法的具体用法?Python MarathonClient.get_app怎么用?Python MarathonClient.get_app使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类marathon.MarathonClient
的用法示例。
在下文中一共展示了MarathonClient.get_app方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: rolling_replace_app
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def rolling_replace_app(service_name, app1_id, app2_id, app2_config, labels):
print ' replacing '+app1_id+' with '+app2_id
marathon_client = MarathonClient('http://' + str(marathon_host) + ':' + str(marathon_port))
app1 = marathon_client.get_app(app1_id)
old_tasks = app1.tasks
# launcher.launch(group2.service.name, group2.encode_marathon_id, group2.config, instances = 0)
launcher.launch_app(service_name, app2_id, app2_config, labels, instances = 0 )
new_app = marathon_client.get_app(app2_id)
for old_task in old_tasks:
#
# replace each old task with a new task of the new app
#
num_started = num_started_tasks(app2_id)
new_instances = num_started+1
# add 1 instance of new task
launcher.update_app(app2_id, app2_config, new_instances)
while num_started < new_instances:
time.sleep(1)
print 'waiting for app to start '+str(num_started)
num_started = num_started_tasks(app2_id)
#
# take down old task
#
marathon_client.kill_task(app1_id, old_task.id, scale=True)
marathon_client.delete_app(app1_id)
示例2: update_app
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def update_app(app_id, config, instances = 1):
#
# set up marathon client and launch container
#
image_string = 'docker:///' + config['image']
marathon_client = MarathonClient('http://' + str(marathon_host) + ':' + str(marathon_port))
app = marathon_client.get_app(app_id)
#
# set up options for cassandra TODO this is terrible dawg
#
decoded = namespacer.decode_marathon_id(app_id)
options = []
if str(decoded['service']) == "cassandra":
options = ["-p", "7000:7000", "-p", "9042:9042", "-p", "9160:9160", "-p", "22000:22", "-p", "5000:5000"]
# ports = []
# constraints = [["hostname", "UNIQUE"]]
marathon_client.update_app(
app_id,
app,
instances = instances,
container = {
"image" : image_string,
"options" : options
}
)
示例3: MarathonDeployer
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
class MarathonDeployer(object):
def __init__(self, marathon_url):
self.url = marathon_url
self.client = MarathonClient(self.url)
def deploy(self, task_chain, environment_name):
deployed_chain = DeployedTaskChain(task_chain, environment_name)
for task in deployed_chain.list_all_tasks():
task_id = task['id']
safe_name = task_id.lower()
# safe_name = task['name'].replace('.', '').lower()
try:
if self.client.get_app(safe_name):
self.client.delete_app(safe_name)
time.sleep(2)
except Exception:
pass
app = MarathonApp(cmd='/var/riversnake/invoke.py {0} {1} {2}'.format(
task_chain.flow_name,
environment_name,
task_id),
mem=16, cpus=1)
self.client.create_app(safe_name, app)
示例4: send_to_marathon
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def send_to_marathon(request):
try:
if request.method == 'POST':
action = request.POST.get('action', None)
id = request.POST.get('id', None)
mc = MarathonClient('http://{}:{}'.format(settings.MARATHON['host'], settings.MARATHON['port']))
if action == 'stop':
mc.scale_app(id, 0, force=True)
elif action == 'start':
mc.scale_app(id, 1)
elif action == 'destroy':
if request.user.has_perm("auth.can_init_app"):
mc.delete_app(id)
else:
raise PermissionDenied
elif action == 'restart':
mc.restart_app(id)
elif action == 'scale':
mc.scale_app(id, int(request.POST.get('number_instance')))
elif action == 'update':
app = mc.get_app(id)
app.cpus = float(request.POST.get('cpus'))
app.mem = float(request.POST.get('mem'))
app.container.docker.image = request.POST.get('version')
mc.update_app(id, app)
elif action == "stop-deployment":
mc.delete_deployment(id)
result = '{"status":"success", "msg": "%(action)s success"}'%{"action":action}
except Exception as e:
result = '{"status":"error", "msg": "%(action)s fail: %(error)s" }'%{"action":action, "error": html.escape(str(e))}
return HttpResponse(result)
示例5: update
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def update(service, instances = 1):
#
# set up marathon client and launch container
#
print 'updating ' + service
image_string = 'docker:///' + data['services'][service]['image']
print image_string
marathon_client = MarathonClient('http://' + str(data['marathon']['host']) + ':' + str(data['marathon']['port']))
app = marathon_client.get_app(service)
#
# set up options for cassandra
#
options = []
if service == "cassandra":
options = ["-p", "7000:7000", "-p", "9042:9042", "-p", "9160:9160", "-p", "22000:22", "-p", "5000:5000"]
# ports = []
# constraints = [["hostname", "UNIQUE"]]
marathon_client.update_app(
service,
app,
instances = instances,
container = {
"image" : image_string,
"options" : options
}
)
示例6: sync_marathon_app
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def sync_marathon_app():
"""Identify the hosts and ports of executing tasks
Optional environment variables:
MARATHON_ROOT_URL: protocol, address or ip and port to Marathon
MARATHON_APP: app name within Marathon used to group all tasks (server instances)
MARATHON_APP_PORT: internal port of service (internal to docker container: default of 8080)
:return:
"""
# Identify the hosts and ports of executing tasks
try:
c = None
if len(DCOS_OAUTH_TOKEN):
c = MarathonClient(MARATHON_ROOT_URLS, auth_token=DCOS_OAUTH_TOKEN)
else:
c = MarathonClient(MARATHON_ROOT_URLS)
app = c.get_app(MARATHON_APP)
port_index = find_port_index_by_container_port(app, MARATHON_APP_PORT)
if port_index is None:
raise Exception('Unable to correlate container to host port.')
instances = []
for task in app.tasks:
logging.info('Queuing configuration refresh of %s at %s:%s' %
(task.id, task.host, task.ports[port_index]))
instances.append('%s:%s' % (task.host, task.ports[port_index]))
reload_config(instances)
except MarathonError, ex:
print 'Error making Marathon API call: %s' % ex.message
示例7: num_started_tasks
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def num_started_tasks(app_id):
count = 0
marathon_client = MarathonClient('http://' + str(marathon_host) + ':' + str(marathon_port))
app = marathon_client.get_app(app_id)
tasks = app.tasks
for task in tasks:
if task.started_at:
count += 1
return count
示例8: get_hosts_dict
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def get_hosts_dict(self):
hosts={}
for app in MarathonClient.list_apps(self):
for task in MarathonClient.get_app(self,app.id).tasks:
host = task.host
if not host in hosts:
hosts[host]=[]
hosts[host].append(task)
return hosts
示例9: ServiceRun
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
class ServiceRun():
def __init__(self, gluster_directory, list_volumes, transport, stripe = None, replica = None, quota = None):
""" Init gluster
"""
print("init")
if gluster_directory is None or gluster_directory == "":
raise Exception("You must set te directory to store gluster folume")
if transport is None or transport == "":
raise Exception("You must set the transport")
self.__gluster_directory = gluster_directory
self.__list_volumes = list_volumes
self.__transport = transport
self.__stripe = stripe
self.__replica = replica
self.__quota = quota
self.__is_on_cluster = False
self.__marathon_client = MarathonClient(os.environ['MARATHON_URL'])
self.__gluster_app_id = os.environ['GLUSTER_APP_ID']
self.__marathon_app = self.__marathon_client.get_app(self.__gluster_app_id)
self.__task_id = os.environ['MESOS_TASK_ID']
def __is_already_on_glusterfs(self):
gluster = Gluster()
peer_manager = gluster.get_peer_manager()
peer_status = peer_manager.status()
if peer_status["peers"] == 0:
return False
else:
return True
def __is_cluster_already_exist(self, list_nodes):
for node in list_nodes.itervalues():
gluster = Gluster(node['ip'])
peer_status = gluster.get_peer_manager().status()
if peer_status["peers"] > 0:
return True
return False
def __wait_all_glusterfs_start(self, list_nodes):
loop = True
while loop:
time.sleep(1)
try:
for node in list_nodes.itervalues():
gluster = Gluster(node['ip'])
peer_status = gluster.get_peer_manager().status()
loop = False
except Exception,e:
loop = True
示例10: TestCreateApp
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
class TestCreateApp(unittest.TestCase):
"""
Test the creation of a Marathon app against a live endpoint. Configure MARATHON_SERVER in tests.config.
"""
def setUp(self):
self._app = get_app() # Generate a random server configuration.
self.client = MarathonClient(MARATHON_SERVER)
self.client.create_app(app_id=self._app.id, app=self._app)
time.sleep(2) # Wait two seconds for the POST to be processed by Marathon.
self.app = self.client.get_app(self._app.id)
while not self.app.tasks_healthy: # Wait until the app becomes healthy.
self.app = self.client.get_app(self._app.id)
time.sleep(1)
def test_create(self):
self.assertIsInstance(self.app, MarathonApp)
self.assertIsInstance(self.app.upgrade_strategy, MarathonUpgradeStrategy)
self.assertIsInstance(self.app.tasks.pop(), MarathonTask)
self.assertIsInstance(self.app.health_checks.pop(), MarathonHealthCheck)
def tearDown(self):
self.client.delete_app(self.app.id, force=True)
示例11: get_random_marathon_task
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def get_random_marathon_task(app_id):
"""Connect to Marathon and return a random task for a given application ID.
:param app_id: The Marathon application ID.
:return: tuple of the instance IP or hostname and listening port.
"""
c = MarathonClient("http://{}".format(options.marathon_host))
app = c.get_app(app_id)
task_host, task_port = None, None
rand = randrange(0, len(app.tasks))
task_host = app.tasks[rand].host
task_port = app.tasks[rand].ports[0]
return task_host, task_port
示例12: launch_elsa
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def launch_elsa(marathon, stats_file, scale_window):
logging.info('Start monitoring the inbound traffic on topics using %s' %(stats_file))
# make sure the stats file is properly initialized:
if not os.path.exists(stats_file):
f = open(stats_file, 'w')
f.write('0')
f.close()
# launch the Elsa app via Marathon
c = MarathonClient(marathon)
c.create_app('elsa', MarathonApp(cmd='/home/vagrant/elsa/launch-elsa.sh', mem=200, cpus=1, user='vagrant'))
# c.list_apps()
print('ElSA is deployed and running, waiting now 5 sec before starting auto-scale ...')
time.sleep(5) # allow time to deploy before autoscaling sets in
# kick off traffic monitoring and trigger autoscaling:
previous_topic_traffic = 0
try:
while True:
with open(stats_file, 'r') as elsa_file:
topic_traffic = int(elsa_file.read())
topic_traffic_diff = topic_traffic - previous_topic_traffic
print('Difference in traffic in the past %d seconds: %d' %(scale_window, topic_traffic_diff))
previous_topic_traffic = topic_traffic
current_instance_num = c.get_app('elsa').instances
if topic_traffic_diff > TRAFFIC_INCREASE_THRESHOLD: # we see a surge of traffic above threshold ...
instance_multiplier = int(topic_traffic_diff / SCALE_FACTOR) # ... increase number of instances
c.scale_app('elsa', current_instance_num * instance_multiplier)
print('Increasing number of instances to %d' %(current_instance_num * instance_multiplier))
elif topic_traffic_diff < 0: # negative, back off exponentially
target_instance_num = int(current_instance_num/2)
if target_instance_num > 1:
c.scale_app('elsa', target_instance_num)
print('Decreasing number of instances to %d' %(target_instance_num))
else:
c.scale_app('elsa', 1)
print('Resetting number of instances to 1')
time.sleep(scale_window)
except KeyboardInterrupt:
print('ElSA has been stopped by user, halting app and rolling back deployment. Thanks and bye!')
c.delete_app('elsa', force=True)
示例13: sync_marathon_app
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def sync_marathon_app():
"""Identify the hosts and ports of executing tasks
Optional environment variables:
MARATHON_ROOT_URL: protocol, address or ip and port to Marathon
MARATHON_APP: app name within Marathon used to group all tasks (server instances)
MARATHON_APP_PORT: internal port of service (internal to docker container: default of 8080)
:return:
"""
# Identify the hosts and ports of executing tasks
try:
c = MarathonClient(MARATHON_ROOT_URL)
app = c.get_app(MARATHON_APP)
container_port = MARATHON_APP_PORT
port_index = None
if app and app.container and app.container.docker and app.container.docker.port_mappings:
for i in range(len(app.container.docker.port_mappings)):
if container_port == app.container.docker.port_mappings[i].container_port:
# Set port index to use for identifying the exposed port
# that maps to internal container port
port_index = i
break
if port_index is None:
raise Exception('Unable to correlate container to host port.')
instances = []
for task in app.tasks:
logging.info('Queuing configuration refresh of %s at %s:%s' %
(task.id, task.host, task.ports[port_index]))
instances.append('%s:%s' % (task.host, task.ports[port_index]))
reload_config(instances)
except MarathonError, ex:
print 'Error making Marathon API call: %s' % ex.message
示例14: __init__
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
class Scaler:
"""Class for Scaling"""
def __init__(self, app_name, config):
self.logger = logging.getLogger("autoscaling")
self.logger.setLevel(logging.DEBUG)
self.logger.debug("Init object scaler...")
self.config = config
self.logger.debug("Connect RESTful mariadb and get policies...")
conn = http.client.HTTPConnection(config["MARIA_RESTFUL"]['host'], config["MARIA_RESTFUL"]['port'])
conn.request("GET", "/app/name/"+app_name)
json_app = conn.getresponse().read().decode("utf-8")
self.app = json.loads(json_app)
conn.request("GET", "/app/name/"+app_name+"/policies")
json_policies = conn.getresponse().read().decode("utf-8")
self.app["policies"] = json.loads(json_policies)
self.logger.debug("Connect influxdb and marathon...")
self.influx_client = InfluxDBClient(config["INFLUXDB"]["host"], config["INFLUXDB"]["port"], config["INFLUXDB"]["username"], config["INFLUXDB"]["password"], config["INFLUXDB"]["db_name"])
self.marathon_client = MarathonClient('http://'+config["MARATHON"]['host']+':'+config["MARATHON"]['port'])
self.app["instance"] = self.marathon_client.get_app(app_name).instances
self.app["mem"] = self.marathon_client.get_app(app_name).mem
self.app["cpus"] = self.marathon_client.get_app(app_name).cpus
self.logger.debug("Reconfig haproxy.cfg...")
os.system("sudo ./servicerouter.py --marathon http://"+config["MARATHON"]["host"]+":"+config["MARATHON"]["port"]+" --haproxy-config /etc/haproxy/haproxy.cfg")
def setup_logging(self, log_file = "autoscaling.log", level = logging.INFO, formatter = None):
if(formatter == None):
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh = logging.FileHandler(log_file)
fh.setLevel(level)
fh.setFormatter(formatter)
self.logger.addHandler(fh)
def get_cpu_usage(self, container_name):
"""Return cpu usage of container_name
@param string container_name container name
"""
query = "select DERIVATIVE(cpu_cumulative_usage) as cpu_usage from stats where container_name = '"+container_name+"' and time > now()-5m group by time(2s) "
result = self.influx_client.query(query)
points = result[0]["points"]
return (points[0][1]/1000000000/self.app["cpus"])*100
def get_container_name(self, mesos_task_id):
"""Return container name mapping with mesos_task_id in messos
@param string mesos_task_id
"""
query = "select container_name from "+self.config["INFLUXDB"]["ts_mapping"]+" where time>now() - 5m and mesos_task_id = '" +mesos_task_id+"' limit 1"
result = self.influx_client.query(query)
points = result[0]["points"]
return points[0][2]
def get_containers_name(self):
"""Return list all containers name of application have name app_name
@param string app_name name of application
@return list all containers name of app_name
"""
tasks = self.marathon_client.list_tasks(self.app["name"])
containers_name = []
for task in tasks:
containers_name.append(self.get_container_name(task.id))
return containers_name
def avg_mem_usage(self, containers_name):
"""Return avg memmory usage of all containers in list containers_name
@param list containers_name list containers name
@return float avg mem usage
"""
number_container = len(containers_name)
containers_name = ["'"+x+"'" for x in containers_name]
containers_name = ",".join(containers_name)
query = "select memory_usage,container_name from stats where time > now()-5m and container_name in ("+containers_name+") limit "+str(number_container*2)
result = self.influx_client.query(query)
points = result[0]["points"]
sum_memory_usage = 0
for point in points:
if(point[3] != None):
sum_memory_usage += point[3]/(self.app["mem"]*1048576)*100
return sum_memory_usage / number_container
def avg_cpu_usage(self, containers_name):
"""Return avg cpu usage of all containers in list containers_name
@param list containers_name list containers name
@return float avg cpu usage
"""
number_container = len(containers_name)
containers_name = ["'"+x+"'" for x in containers_name]
containers_name = ",".join(containers_name)
query = "select DERIVATIVE(cpu_cumulative_usage) as cpu_usage,container_name from stats where time > now()-5m and container_name in ("+containers_name+") group by time(10s),container_name limit "+str(number_container)
result = self.influx_client.query(query)
points = result[0]["points"]
#.........这里部分代码省略.........
示例15: get_app_port
# 需要导入模块: from marathon import MarathonClient [as 别名]
# 或者: from marathon.MarathonClient import get_app [as 别名]
def get_app_port(app_id):
json_result = MarathonClient.get_app(app_id)
port = json_result['apps'][0]["ports"][0]
return port