import sys import json import requests import socket from xmlrpclib import ServerProxy import mtcmd from const import EXCHANGE_URL from const import JSON_HEADER azurecmd = mtcmd.Command() @azurecmd.define(name='azure.import-publishsetting', rqd_params='user_name, publishsetting', opt_params='', description='Import azure publishsetting', example='mt azure.import-publishsetting user_name=Yunshan ' 'publishsetting=8-6-2015-credentials.publishsettings') def azure_import_publishsetting(args): assert isinstance(args, dict) if args['user_name'] is None: print >> sys.stderr, 'No user specified' return -1 if args['publishsetting'] is None: print >> sys.stderr, 'No publishsetting specified' return -1 s = ServerProxy('http://%s:%d/' % ('172.16.20.248', 12346)) try:
import requests import sys import os import subprocess import mtcmd import models import data from const import TALKER_URL, PYAGEXEC_URL from const import HOST_HTYPE_KVM from utils import call_post_with_callback vmcmd = mtcmd.Command() @vmcmd.define(name='vm-agent.show', opt_params='launch-server', description='Show version of vagent in VMs', example='mt vm-agent.show launch-server=172.16.1.131') def vm_vagent_show(args): assert isinstance(args, dict) url = TALKER_URL + 'vms/' if 'launch-server' in args: url += '?launch_server=%s' % args['launch-server'] try: resp = requests.get(url) except requests.exceptions.ConnectionError: print >> sys.stderr, 'Error: unable to connet to talker' return -1 if resp.status_code != 200:
# -*- coding: utf-8 -*- import sys import commands import simplejson as json import mtcmd from const import HOST_TYPE_VM, HOST_TYPE_NSP, SCRIPT_SWITCH_CONF, \ VINTERFACE_TYPE_WAN, VIF_DEVICE_TYPE_VGATEWAY, VIF_DEVICE_TYPE_VM, \ SSH_OPTION_LIST, SSH_OPTION_STRING from data import HostDevice, NetworkDevice, Rack, VGateway, VInterface, VM, \ IpResource, VInterfaceIP from utils import call_system_streaming tracecmd = mtcmd.Command() kvm_trace_script = '/usr/local/livecloud/pyagexec/script/trace.sh' nsp_trace_script = '/usr/local/livegate/script/trace.sh' kvm_probe_script = '/usr/local/livecloud/pyagexec/script/net_ghost.py' nsp_probe_script = '/usr/local/livegate/script/net_ghost.py' def display_long_string(s, prefix=1, suffix=1): # 字符串过长时只显示前prefix和后suffix个字符 if len(s) > prefix + suffix + 2: if suffix: return s[:prefix] + '..' + s[-suffix:] else: return s[:prefix] + '..' return s @tracecmd.define(name='trace.l2', rqd_params='first_hop, dest_mac',
import requests from schematics.exceptions import ModelConversionError, ModelValidationError import simplejson as json import sys import mtcmd storage_cmd = mtcmd.Command() from const import TALKER_URL, STOREKEEPER_URL, PYAGEXEC_URL from const import JSON_HEADER import models @storage_cmd.define(name='storage.add', rqd_params='name, backend, domain, host, type', description='Add storage to livecloud', example='mt storage.add name=rbd backend=ceph-rbd ' 'domain=xxx host=all type=performance') def storage_add(args): assert isinstance(args, dict) if args['type'].lower() not in ['capacity', 'performance']: print >> sys.stderr, 'Error: type must be "capacity" or "performance"' return -1 url = TALKER_URL + 'domains/' try: resp = requests.get(url) except requests.exceptions.ConnectionError: print >> sys.stderr, 'Error: unable to connet to talker' return -1
import requests import simplejson as json import sys import mtcmd import models import data from const import STOREKEEPER_URL from const import JSON_HEADER blockcmd = mtcmd.Command() @blockcmd.define(name='block-device.import', rqd_params='name, storage, user-email, product-specification', opt_params='', description='Import BlockDevice to database', example='mt block-device.import name=block-1 ' 'storage=capacity [email protected] ' 'product-specification=CloudDisk') def block_import(args): assert isinstance(args, dict) url = STOREKEEPER_URL + 'storages/' try: resp = requests.get(url) except requests.exceptions.ConnectionError: print >> sys.stderr, 'Error: unable to connet to storekeeper' return -1 if resp.status_code != 200: print >> sys.stderr, 'Error: unable to get storages'
import sys import requests import mtcmd import models import simplejson as json from const import TALKER_URL, CASHIER_URL, JSON_HEADER from const import CHARGE_DETAIL_VM_TYPE from peewee import MySQLDatabase import copy import data import datetime charge_cmd = mtcmd.Command() @charge_cmd.define(name='vm-plan-charge.config', rqd_params='product_specification_lcuuid', description='Modify vm-plan charge details', example='mt vm-plan-charge.config ' 'product_specification_lcuuid=' '1a53f2bd-c874-41de-923b-c93a37df6b72') def modify_vmplan_price(args): assert isinstance(args, dict) ps_info = data.ProductSpec.get( data.ProductSpec.lcuuid == args['product_specification_lcuuid']) end_time = datetime.datetime.now() vm_plan = json.loads(ps_info.content) vm_plan_request = models.VmPlanRequest() vm_plan_request.cpu = vm_plan['compute_size']['vcpu_num']
import sys import json import requests import mtcmd from const import EXCHANGE_URL from const import JSON_HEADER openstackcmd = mtcmd.Command() @openstackcmd.define(name='openstack.import-tenant', rqd_params='user_name, openstack_tenant', opt_params='', description='Import openstack tenant', example='mt openstack.import-tenant user_name=admin ' 'openstack_tenant=admin') def openstack_import_tenant(args): assert isinstance(args, dict) if args['user_name'] is None: print >>sys.stderr, 'No user specified' return -1 if args['openstack_tenant'] is None: print >>sys.stderr, 'No openstack_tenant specified' return -1 import_tenant_req = {} import_tenant_req['USER'] = args['user_name'] import_tenant_req['OPENSTACK_TENANT'] = args['openstack_tenant']
import requests import simplejson as json import sys import mtcmd from const import TALKER_URL, JSON_HEADER syscmd = mtcmd.Command() @syscmd.define(name='vcpu-over-allocation-ratio.config', rqd_params='ratio', description=('Change VCPU over allocation ratio, ' '0 for unlimited'), example='mt vcpu-over-allocation-ratio.config ratio=2.5') def vcpu_over_allocation_ratio_config(args): assert isinstance(args, dict) url = TALKER_URL + 'sys/vcpu-over-allocation-ratio/' wrapped_data = json.dumps({'RATIO': args['ratio']}) try: r = requests.post(url, wrapped_data, headers=JSON_HEADER) except requests.exceptions.ConnectionError: print >> sys.stderr, 'Error: unable to connet to talker' return -1 if r.status_code != 200: print >> sys.stderr, ('Error: request failed (%s)' % r.json()['DESCRIPTION']) return -1 return 0
import sys import mtcmd import models from const import TALKER_URL from utils import call_post_with_callback, call_patch_with_callback hostcmd = mtcmd.Command() @hostcmd.define(name='host.add', rqd_params='ip, user_name, user_passwd, type, rack_name, ' 'htype, nic_type', opt_params='uplink_ip, uplink_netmask, uplink_gateway, misc, ' 'brand, model, storage_link_ip', description='Add host device to LiveCloud', example='mt host.add ip=x.x.x.x user_name=USER ' 'user_passwd=PASSWD type=VM/Gateway/NSP ' 'rack_name=rackname htype=Xen/VMWare/KVM ' 'nic_type=Gigabit/10Gigabit [ uplink_ip=x.x.x.x ' 'uplink_netmask=x.x.x.x uplink_gateway=x.x.x.x ' 'storage_link_ip=x.x.x.x]') def host_add(args): assert isinstance(args, dict) # remove this assert after adding more type and htype assert (args['type'].lower() in ['vm', 'server', '1'] and args['htype'].lower() == 'kvm') host_info = models.HostAdd() host_info.ip = args['ip']
import requests import sys import commands import mtcmd import models import json from const import TALKER_URL, PYAGEXEC_URL, JSON_HEADER, \ SCRIPT_SWITCH_CONF from data import NetworkDevice switchcmd = mtcmd.Command() @switchcmd.define( name='switch-port-mirror.add', rqd_params='mip, src_ports_eth, dst_ports_eth, src_ports_po, dst_ports_po', description='Mirror switch ports for capturing', example='mt switch-port-mirror.add ' 'mip=172.17.1.111 src_ports_eth=47,48 dst_ports_eth=46 src_ports_po=10' ' dst_ports_po=none') def switch_port_mirror_add(args): assert isinstance(args, dict) switch_info = NetworkDevice.get(NetworkDevice.mip == args['mip']) cmd = SCRIPT_SWITCH_CONF cmd += "add-mirror %s %s %s %s '%s' %s %s %s %s" % ( switch_info.brand, switch_info.mip, switch_info.username, switch_info.password, switch_info.enable, args['src_ports_eth'], args['dst_ports_eth'], args['src_ports_po'], args['dst_ports_po']) rc, output = commands.getstatusoutput(cmd) if rc:
# -*- coding: utf-8 -*- import mtcmd allcmd = mtcmd.Command() groups = [ (u'部署 - 域', ['domain\..*']), (u'部署 - 物理集群', ['cluster\..*']), (u'部署 - 逻辑机架', ['rack\..*']), (u'部署 - 交换机', ['torswitch\..*']), (u'部署 - 虚拟化服务器', ['host\..*']), (u'部署 - 产品规格', [ 'product-specification\..*', 'product-charge\..*', 'live-x\..*', 'vm-parts-charge\..*', 'service-charge\..*', 'vm-plan-charge\..*' ]), (u'部署 - 资源池', [ 'pool\..*', 'vgateway-connection-limit\..*', 'nsp-vgateway-upper-limit\..*', 'vcpu-over-allocation-ratio\..*' ]), (u'部署 - 存储资源', ['storage\..*']), (u'部署 - 服务', ['service-vendor\..*', 'vul-scanner\..*']), (u'部署 - 网络配置', [ 'ip-ranges\..*', '-plane-.*\..*', '^vlan\..*', 'vlan-range\..*', 'tunnel-protocol\..*', 'vlantag-ranges\..*' ]), (u'部署 - ISP', ['ip\..*', 'isp\..*']), (u'部署 - 镜像', ['template\..*']), ('', []), # dummy node (u'运维 - 部署检查、故障排查', ['debug\..*', 'trace\..*']), (u'运维 - 租户虚拟设备', ['vm\..*', 'vgateway\..*', 'vm-agent\..*', 'block-device\..*']),
import sys import mtcmd import models import simplejson as json from const import TALKER_URL, CASHIER_URL, JSON_HEADER from peewee import MySQLDatabase import copy import data import datetime service_cmd = mtcmd.Command() @service_cmd.define(name='nas-storage.config', rqd_params='lcuuid, path, service_vendor_lcuuid', description='Config nas storage info for ' 'user to LiveCloud', example='mt nas-storage.config lcuuid=xxx-ddd ' 'path=/mnt/nas ' 'service_vendor_lcuuid=xxx-ddd-aaa') def nas_storage_config(args): assert isinstance(args, dict) try: nas_storages = data.NasStorage.get( data.NasStorage.lcuuid == args['lcuuid']) except Exception: print >> sys.stderr, 'Error: Nas Storage %s not found' % args['lcuuid'] return -1 try:
# -*- coding: utf-8 -*- import sys import commands import mtcmd from const import VINTERFACE_STATE_ATTACH, VINTERFACE_DEVICETYPE, \ VINTERFACE_TYPE_WAN, VINTERFACE_CONFIG_VLANTAG_LEVEL, \ VINTERFACE_CONFIG_BROADC_BANDW_LEVEL from data import VInterface, VM, VGateway, IP, HostDevice, Syslog vifcmd = mtcmd.Command() def vif_syslog(**args): vifname = '%s_%s_VIF_%d' % (args['devicetype'], args['deviceid'], args['ifindex']) syslog_new = Syslog( module='MNTNCT', action='Config VINTERFACE', objecttype=args['viftype'], objectname=vifname, objectid=args['vifid'], loginfo='Config VINTERFACE ' + vifname + ': ' + args['loginfo'], level=args['level']) syslog_new.save() @vifcmd.define(name='vif.config', rqd_params='devicetype, deviceid, ifindex', opt_params='vlantag, broadc_bandw, broadc_ceil_bandw', description='对于vif.config vlantag,是将指定<deviceid>的'
import requests import sys import mtcmd import models import json from const import TALKER_URL, PYAGEXEC_URL, JSON_HEADER vgatewaycmd = mtcmd.Command() @vgatewaycmd.define(name='vgateway-connection-limit.add', rqd_params='lcuuid, conn_max', opt_params='new_conn_per_sec', description='Add connection limit for vgateway', example='mt vgateway-connection-limit.add ' 'lcuuid=cd10be82-a146-4707-b670-19eb23aef379 ' 'conn_max=4294967295 new_conn_per_sec=10000') def vgateway_connection_limit_add(args): assert isinstance(args, dict) conn_info = models.Conntrack() conn_info.conn_max = int(args['conn_max']) conn_info.new_conn_per_sec = 0 if 'new_conn_per_sec' in args: conn_info.new_conn_per_sec = int(args['new_conn_per_sec']) url = TALKER_URL + 'vgateways' if 'lcuuid' in args: url += '/%s/conntracks/' % args['lcuuid'] payload = conn_info.to_primitive()