Example #1
0
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:
Example #2
0
File: vm.py Project: oksbsb/lcm
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:
Example #3
0
File: trace.py Project: oksbsb/lcm
# -*- 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',
Example #4
0
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
Example #5
0
File: block.py Project: oksbsb/lcm
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'
Example #6
0
File: charge.py Project: oksbsb/lcm
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']
Example #7
0
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']
Example #8
0
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
Example #9
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']
Example #10
0
File: switch.py Project: oksbsb/lcm
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:
Example #11
0
# -*- 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\..*']),
Example #12
0
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:
Example #13
0
# -*- 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>的'
Example #14
0
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()