예제 #1
0
def command_exec(username, phone, ip, svc_name, cmd, zone, output):
    cmd_host = cmd_host_qcd if zone == 'qcd' else cmd_host_aws

    _cmd = 'svn co http://svn.65dg.me/svn/gotemplate /srv/gotemplate ' \
           ' --non-interactive --username={username} --password={password} && ' \
           'svn co http://svn.65dg.me/svn/{svc_name} /srv/{svc_name} ' \
           ' --non-interactive --username={username} --password={password} && ' \
           'mkdir -p {log_path} && ' \
           'cd /srv/{svc_name} && ' \
           '/srv/{svc_name}/{cmd} -c /srv/gotemplate/{svc_name}/conf.ctmpl >> {output} 2>&1' \
           ''.format(username=svn_username, password=svn_password,
                     svc_name=svc_name, cmd=cmd, output=output, log_path=os.path.dirname(output))
    print(_cmd)

    salt_api = SaltApi()
    data = {
        'client': 'local',
        'fun': 'cmd.run',
        'tgt': cmd_host,
        'arg': _cmd
    }
    result = salt_api.salt_cmd(data)
    if result != 0:
        result = result['return']

    if not os.path.exists(os.path.dirname(output)):
        try:
            os.makedirs(os.path.dirname(output))
        except Exception as e:
            print(e)
            logs(username, ip, cmd, e)
            dingding_robo(cmd_host, 'command job', ' error ', username, phone)
            return str(e)

    with open(output, 'w') as f:
        if isinstance(result, list):
            for r in result:
                if isinstance(r, dict):
                    for k, v in r.items():
                        f.write('--> ')
                        f.write(k)
                        f.write('\n')
                        f.write(v)
                else:
                    f.write(str(r))
        else:
            f.write(str(result))

    logs(username, ip, cmd, 'running')
    dingding_robo(cmd_host, 'command job', result, username, phone)
    return result
예제 #2
0
def kettle_run(user, ip, cmd_type, file_path, kettle_log_file, phone_number):
    salt_api = SaltApi()
    file_path = kettle_svn_path + file_path
    kettle_log_file = kettle_log_path + kettle_log_file

    if int(cmd_type) == 1:
        cmd = '%span.sh -file %s -logfile %s' % (kettle_install_dir, file_path,
                                                 kettle_log_file)
    elif int(cmd_type) == 2:
        cmd = '%skitchen.sh -file %s -logfile %s' % (
            kettle_install_dir, file_path, kettle_log_file)

    exists_file_cmd = 'ls %s' % file_path
    exists_file = {
        'client': 'local',
        'tgt': kettle_host,
        'fun': 'cmd.run',
        'arg': exists_file_cmd
    }

    file_result = salt_api.salt_cmd(exists_file)
    if file_result['return'][0][kettle_host] != file_path:
        logs(user, ip, cmd, 'not %s file.' % file_path)
        dingding_robo(kettle_host, 'kettle job', 'it is error', user,
                      phone_number)
        return 0

    data = {
        'client': 'local',
        'tgt': kettle_host,
        'fun': 'cmd.run',
        'arg': cmd
    }

    result = salt_api.salt_cmd(data)
    if result != 0:
        result = result['return']

    logs(user, ip, cmd, 'running')
    dingding_robo(kettle_host, 'kettle job', result, user, phone_number)
    return result
예제 #3
0
def mautic_restart(request):
    user = request.user
    ip = request.META['REMOTE_ADDR']
    host = request.POST['host']

    try:
        if not user.groups.filter(name__in=['admin', 'mautic']).exists():
            raise Exception('Permission Denied!')

        salt_api = SaltApi()
        data = {
            'client': 'local',
            'fun': 'cmd.run',
            'tgt': host,
            'arg': 'service php7.1-fpm restart',
        }
        result = salt_api.salt_cmd(data)['return']
        logs(user, ip, host, 'service php7.1-fpm restart')
    except Exception as e:
        print e
        result = [{'restart mautic failed': str(e)}]

    return render(request, 'getdata.html', {'result': result})
예제 #4
0
파일: views.py 프로젝트: YunShiTiger/cmdb-2
def _online_go(name, host):
    svc = goservices.objects.filter(name=name).first()
    nvs = svn.objects.get(project=svc.group)

    if host.find(salt_location) > 0:
        print '-----salt_location:', salt_location
        salt_run = SaltApi(salt_location)
    else:
        salt_run = SaltApi()

    data = {
        'client':
        'local_async',
        'fun':
        'state.sls',
        'tgt':
        host,
        'arg': [
            'goservices.supervisor_submodule',
            'pillar={'
            '"goprograme":"%s",'
            '"svnrepo":"%s",'
            '"supProgrameName":"%s",'
            '"goRunCommand":"%s -c /srv/gotemplate/%s/conf.ctmpl"}' %
            (nvs.project, nvs.repo, name, ' '.join(
                name.split('_')), nvs.project)
        ]
    }
    result = salt_run.salt_cmd(data)
    jid = result['return'][0]['jid']
    print '------jid------:', jid

    jid_data = {'client': 'runner', 'fun': 'jobs.exit_success', 'jid': jid}
    while 1:
        jid_result = salt_run.salt_cmd(jid_data)
        print '----jid_result----', jid_result['return'][0][host]
        if jid_result['return'][0][host]:
            break
        else:
            time.sleep(10)

    print '---jid_result-----', jid_result
    return result
예제 #5
0
import gitlab
from jenkinsapi.jenkins import Jenkins
from mico.settings import gitlab_url, gitlab_private_token, jenkins_webhook_url
from mico.settings import jenkins_url, jenkins_username, jenkins_password
from mico.settings import svn_host
from salt_api.api import SaltApi

salt_api = SaltApi()


def existGitlabProject(project_name, uat_env):
    '''
    error code:
     1. sucessful.
     2. gitlab  project name is not exist.
     3. jenkins creating is error.
     4. svn repo creating is error.
     5. gitlab webhook creating is error.
    '''
    gl = gitlab.Gitlab(gitlab_url, gitlab_private_token)
    project = gl.projects.search(project_name)

    print '------------1---', project
    if len(project) > 0:
        if jenkins_create_job(project_name, uat_env):
            for info in project:
                print '-------info.name---', info.name
                if info.name == project_name:
                    print '-------ok-------'
                    project_id = info.id
                    #####webhook url is exist#######
예제 #6
0
from django.contrib.auth.decorators import login_required
from asset.utils import deny_resubmit,logs
from models import TicketType,TicketTasks,TicketOperating
from django.contrib.auth.models import User
from django.db.models import Q
from salt_api.api import SaltApi
from asset.models import gogroup,svn,minion,GOTemplate,goservices,gostatus,UserProfile
from mico.settings import svn_username,svn_password,go_local_path,go_move_path,go_revert_path,svn_gotemplate_repo
from mico.settings import svn_gotemplate_local_path,webpage_host,svn_host,svn_repo_url
from asset.utils import dingding_robo
import json
import uuid
import xmlrpclib
from utils import existGitlabProject

salt_api = SaltApi()


# Create your views here.
@login_required
@deny_resubmit(page_key='submit_tickets')
def index(request):
    ticket_type = TicketType.objects.all()
    return render(request,'workflow_index.html',{'ticket_type':ticket_type})


@login_required
def get_hosts(request):
    ticket_type = request.GET['ticket_type']
    obj = TicketType.objects.get(type_name=ticket_type)
    content = []
예제 #7
0
def handle_tickets(request):
    task_id = request.POST['id']
    submit = request.POST['submit']
    reply = request.POST['reply']
    operating_id = TicketTasks.objects.get(tasks_id=task_id)
    content = TicketTasks.objects.get(tasks_id=task_id).content
    content = json.loads(content)
    username = User.objects.get(username=content['handler'])
    phone_number = UserProfile.objects.get(user=username).phone_number
    handle_result = 0

    if submit == 'reject':
        TicketTasks.objects.filter(tasks_id=task_id).update(state='4')
        TicketOperating.objects.create(operating_id=operating_id,
                                       handler=username,
                                       content=reply,
                                       result='2',
                                       submitter=content['owner'])

        logs(user=request.user,
             ip=request.META['REMOTE_ADDR'],
             action='handle ticket (%s)' % content['title'],
             result='successful')
        info = 'Your "%s" order be reject,please visit to workflow page.' % content[
            'title']
        owner = User.objects.get(username=content['owner'])
        owner_phone_number = UserProfile.objects.get(user=owner).phone_number
        dingding_robo(phone_number=owner_phone_number, types=2, info=info)
        result = [{'HandleTasks': 'The task_id handle to success!'}]
        return render(request, 'getdata.html', {'result': result})

    if content['ticket_type'] == 'go':
        #'----------------------------ticket_type--------------------'
        for host in content['hosts']:
            try:
                if host.find(salt_location) > 0:
                    print '-----salt_location:', salt_location
                    salt_run = SaltApi(salt_location)
                else:
                    salt_run = SaltApi()
                data = {
                    'client':
                    'local_async',
                    'tgt':
                    host,
                    'fun':
                    'state.sls',
                    'arg': [
                        'goservices.supervisor_submodule',
                        'pillar={"goprograme":"%s","svnrepo":"%s","supProgrameName":"%s","goRunCommand":"%s"}'
                        % (content['project'], content['svn_repo'],
                           content['supervisor_name'], content['go_command'])
                    ]
                }
                result = salt_run.salt_cmd(data)
                jid = result['return'][0]['jid']
                print '------jid------:', jid

                jid_data = {
                    'client': 'runner',
                    'fun': 'jobs.exit_success',
                    'jid': jid
                }
                tag = True
                while tag:
                    jid_result = salt_run.salt_cmd(jid_data)
                    print '----jid_result----', jid_result['return'][0][host]
                    if jid_result['return'][0][host]:
                        tag = False
                    else:
                        time.sleep(10)

                print '---jid_result-----', jid_result

                minion_host = minion.objects.get(saltname=host)
                supervisor_info = gostatus.objects.get(hostname=minion_host)
                supervisor_obj = xmlrpclib.Server(
                    'http://%s:%s@%s:%s/RPC2' %
                    (supervisor_info.supervisor_username,
                     supervisor_info.supervisor_password,
                     supervisor_info.supervisor_host,
                     supervisor_info.supervisor_port))
                if supervisor_obj.supervisor.getProcessInfo(
                        content['supervisor_name']):
                    deploy_result = 1
                    print '-------successful-----'
            except Exception, e:
                print e
                deploy_result = 0
                handle_result = 1
                TicketTasks.objects.filter(tasks_id=task_id).update(state='5')
                TicketOperating.objects.create(operating_id=operating_id,
                                               handler=username,
                                               content=reply,
                                               result='3',
                                               submitter=content['owner'])
                logs(user=request.user,
                     ip=request.META['REMOTE_ADDR'],
                     action='handle ticket (%s)' % content['title'],
                     result='failed')
                info = 'The "%s" order is failed,please check in %s host.' % (
                    content['title'], host)
                dingding_robo(phone_number=phone_number, types=2, info=info)
                result = [{'HandleTasks': 'The task_id handle to failed!'}]
                print '------failed-------------'
                return render(request, 'getdata.html', {'result': result})

            #-------------------------new project-----------------------------------
            try:
                if deploy_result == 1:
                    if gogroup.objects.filter(name=content['project']):
                        print 'The %s project is existing!!' % content[
                            'project']
                    else:
                        obj = gogroup(name=content['project'])
                        obj.save()

                        project = gogroup.objects.get(name=content['project'])
                        obj = svn(username=svn_username,
                                  password=svn_password,
                                  repo=content['svn_repo'],
                                  localpath=go_local_path + content['project'],
                                  movepath=go_move_path + content['project'],
                                  revertpath=go_revert_path,
                                  executefile=go_local_path +
                                  content['project'] + '/' +
                                  content['project'],
                                  project=project)
                        obj.save()

                    #-------------------------gotemplate-----------------------------------
                    project = gogroup.objects.get(name=content['project'])
                    ip = minion_host.ip

                    if GOTemplate.objects.filter(hostname=minion_host).filter(
                            project=project).filter(env=1):
                        print 'The %s gotemplate project is existing!!' % content[
                            'project']
                    else:
                        obj = GOTemplate(username=svn_username,
                                         password=svn_password,
                                         repo=svn_gotemplate_repo +
                                         content['project'],
                                         localpath=svn_gotemplate_local_path +
                                         content['project'],
                                         env=1,
                                         hostname=minion_host,
                                         project=project)
                        obj.save()

                    #-------------------------goservices-----------------------------------
                    if goservices.objects.filter(
                            saltminion=minion_host).filter(
                                group=project).filter(
                                    name=content['supervisor_name']).filter(
                                        env=1):
                        print 'The %s goservice is existing!!' % content[
                            'supervisor_name']
                    else:
                        obj = goservices(ip=ip,
                                         name=content['supervisor_name'],
                                         env=1,
                                         group=project,
                                         saltminion=minion_host,
                                         owner=content['owner'],
                                         has_statsd=content['statsd'],
                                         has_sentry=content['sentry'],
                                         comment=content['function'])
                        obj.save()
            except Exception, e:
                print e
                handle_result = 1
                TicketTasks.objects.filter(tasks_id=task_id).update(state='5')
                TicketOperating.objects.create(operating_id=operating_id,
                                               handler=username,
                                               content=reply,
                                               result='3',
                                               submitter=content['owner'])
                logs(user=request.user,
                     ip=request.META['REMOTE_ADDR'],
                     action='handle ticket (%s)' % content['title'],
                     result='failed')
                result = [{'HandleTasks': 'The task_id handle to failed!'}]