Example #1
0
def code_rollback_process(request,
                          template_name='saltstack/code_rollback_form.html'):
    global status
    form = RollBackForm(request.POST or None)
    if form.is_valid():
        project = form.cleaned_data['repository_name'].repo_tag
        zone_name = form.cleaned_data['zones'].name
        deploy_path = form.cleaned_data['deploy_path'].path_value
        backup_package = form.cleaned_data['backup_package'].backup_path
        print backup_package
        rollback_script = '/data/agent_scripts/rollback.sh'

        if form.cleaned_data['use_zone']:
            deploy_abs_path = os.path.join(deploy_path,
                                           (project + '_' + zone_name))
        else:
            deploy_abs_path = os.path.join(deploy_path, project)

        shell_command = "sh %s %s %s" % (rollback_script, backup_package,
                                         deploy_abs_path)
        data = {
            'expr_form': 'list',
            'client': form.cleaned_data['client'],
            'tgt': [server.host_name for server in form.cleaned_data['tgt']],
            'fun': 'cmd.run',
            'arg': shell_command,
        }

        print data
        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        # print context

        for item in form.cleaned_data['tgt']:
            if regex_match_error(
                    yaml.load(context)['return'][0][item.host_name]):
                status = True
            else:
                status = False

        new_form = form.save(commit=False)
        new_form.context = context
        new_form.rollback_package = backup_package
        new_form.fun = 'cmd.run'
        new_form.operate = request.session['username']
        new_form.status = status
        new_form.save()
        form.save()

        return redirect('code_rollback_list')

    return render(
        request, template_name, {
            'highlight12': 'active',
            'username': request.session['username'],
            'form': form,
            'var7': 'active',
        })
Example #2
0
def running_command(command):
    shell_command = '%s' % command
    try:
        result = subprocess.check_output(shell_command,
                                         stderr=subprocess.STDOUT,
                                         shell=True)

        if regex_match_error(result):
            return True
    except subprocess.CalledProcessError:
        return False
Example #3
0
def system_user_add(request, template_name='saltstack/system_user_form.html'):
    form = SystemUserAddForm(request.POST or None)
    hosts = []
    if form.is_valid():
        for item in form.cleaned_data['tgt']:
            print item.host_name
            hosts.append(item.host_name)

        data = {
            'expr_form': 'list',
            'client': form.cleaned_data['client'],
            'tgt': hosts,
            'fun': form.cleaned_data['fun'],
            'arg': [form.cleaned_data['user'], 'home=%s' %
                    os.path.join(form.cleaned_data['home'], form.cleaned_data['user']),
                    'shell=%s' % dict(form.fields['shell'].choices)[form.cleaned_data['shell']]]
        }
        print data
        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        if regex_match_error(context):
            status = True
        else:
            status = False
        new_form = form.save(commit=False)
        new_form.context = context
        new_form.status = status
        new_form.operate = request.session['username']
        new_form.home = os.path.join(form.cleaned_data['home'], form.cleaned_data['user'])
        new_form.save()
        form.save()
        for item in form.cleaned_data['tgt']:
            # print form.cleaned_data['user']
            user_info = SysUser.objects.filter(sys_user=form.cleaned_data['user'])
            if not user_info:
                user_object = SysUser(sys_user=form.cleaned_data['user'], servers_id=item.id)
                user_object.save()
                # get_sys_user = SysUser.objects.get(sys_user=form.cleaned_data['user'])
                # Assets.objects.filter(host_name=item.host_name).update(sys_users=get_sys_user)
            else:
                return HttpResponse("user already exist.")
                # get_sys_user = SysUser.objects.get(sys_user=form.cleaned_data['user'], servers=item)
                # Assets.objects.filter(host_name=item.host_name).update(sys_users=get_sys_user)

        return redirect('system_user_list')

    return render(request, template_name, {'form': form,
                                           'username': request.session['username'],
                                           'var7': 'active',
                                           'highlight8': 'active'})
Example #4
0
def services_handle_process(request,
                            template_name='saltstack/services_handle_form.html'
                            ):
    servers = Assets.objects.all()
    departments = Department.objects.all()
    services = Services.objects.all()

    form = ServicesHandleForm(request.POST or None)
    if form.is_valid():
        data = {
            'expr_form': 'list',
            'client': form.cleaned_data['client'],
            'fun': form.cleaned_data['fun'],
            'tgt': [item.host_name for item in form.cleaned_data['tgt'].all()],
            'arg': form.cleaned_data['services'].name,
        }

        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        if regex_match_error(context):
            status = True
        else:
            status = False

        new_form = form.save(commit=False)
        new_form.context = context
        new_form.status = status
        new_form.operate = request.session['username']
        new_form.save()
        form.save()

        return redirect('services_handle_list')

    return render(
        request, template_name, {
            'highlight4': 'active',
            'username': request.session['username'],
            'form': form,
            'servers': servers,
            'departments': departments,
            'services': services,
            'var7': 'active'
        })
Example #5
0
def system_user_del(request, template_name='saltstack/system_user_form.html'):
    form = SystemUserDelForm(request.POST or None)
    hosts = []
    if form.is_valid():
        for item in form.cleaned_data['tgt']:
            hosts.append(item.host_name)

        data = {
            'expr_form': 'list',
            'client': form.cleaned_data['client'],
            'tgt': hosts,
            'fun': form.cleaned_data['fun'],
            'arg': [form.cleaned_data['user'], 'remove=True', 'force=True']
        }
        print data
        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        print context
        if regex_match_error(context):
            status = True
        else:
            status = False
        new_form = form.save(commit=False)
        new_form.context = context
        new_form.status = status
        new_form.operate = request.session['username']
        new_form.home = os.path.join(form.cleaned_data['home'], form.cleaned_data['user'])
        new_form.save()
        form.save()
        for item in form.cleaned_data['tgt']:
            # server_info = Assets.objects.get(host_name=item.host_name)
            # server_info.sys_users.remove(SysUser.objects.get(sys_user=form.cleaned_data['user']))
            SysUser.objects.filter(servers_id=item.id, sys_user=form.cleaned_data['user']).delete()

        return redirect('system_user_list')

    return render(request, template_name, {'form': form,
                                           'username': request.session['username'],
                                           'var7': 'active',
                                           'highlight8': 'active'})
Example #6
0
def yum_install_soft_process(request, template_name='saltstack/yum_install_soft_form.html'):
    form = PackageInstallForm(request.POST or None)
    server_list = []
    if form.is_valid():
        skip_verify = 'False'
        refresh = 'False'
        for item in form.cleaned_data['tgt']:
            server_list.append(item.host_name)
        data = {
            'expr_form': 'list',
            'client': 'local',
            'fun': form.cleaned_data['fun'],
            'tgt': server_list,
            'arg': [form.cleaned_data['yum_package_name'], refresh, skip_verify]
        }
        print data
        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)

        if regex_match_error(json.dumps(context)):
            status = True
        else:
            status = False

        new_form = form.save(commit=False)
        new_form.status = status
        new_form.context = context
        new_form.operate = request.session['username']
        new_form.save()
        form.save()

        return redirect('yum_install_soft_record')

    return render(request, template_name, {'form': form,
                                           'var7': 'active',
                                           'highlight10': 'active',
                                           'username': request.session['username'],
                                           })
Example #7
0
def push_process(request, template_name='saltstack/file_push_form.html'):
    form = PushForm(request.POST or None)
    servers = Assets.objects.all().order_by('alias_name')
    departments = Department.objects.all()
    zones = Zone.objects.all()
    files = Produce.objects.all()

    if form.is_valid():
        # department = form.cleaned_data['departments'].name
        zone = form.cleaned_data['zones'].name
        domain = form.cleaned_data['domains'].name
        service = form.cleaned_data['service_name']
        service_name = dict(form.fields['service_name'].choices)[service]
        file_name = form.cleaned_data['file_name']
        source_path = form.cleaned_data['source_path']
        target_path = form.cleaned_data['target_path'].path_value
        generate_file = zone + '_' + file_name
        conf_templates_path = os.path.join('/srv/salt/service_config/templates', service_name)
        conf_generate_path = os.path.join('/srv/salt/service_config/', zone, service_name)

        if not os.path.exists(conf_generate_path):
            makedir_p(conf_generate_path)

        commands = "sh /data/deploy/OMS/saltstack/scripts/shell/replace_service_conf.sh %s %s %s %s %s %s" % \
                   (file_name, generate_file, domain, zone, conf_templates_path, conf_generate_path)

        # 生成新配置文件
        running_command(commands)

        salt_file_storage = os.path.join(source_path, zone, service_name, generate_file)
        print salt_file_storage
        target_abs_path = os.path.join(target_path, generate_file)
        print target_abs_path

        template = 'jinja'
        env = 'base'
        makedirs = False

        data = {
            'expr_form': 'list',
            'client': form.cleaned_data['client'],
            'fun': 'cp.get_template',
            'tgt': [item.host_name for item in form.cleaned_data['tgt'].all()],
            'arg': [salt_file_storage, target_abs_path, template, env, makedirs],
        }
        print data
        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        print context
        if regex_match_error(context):
            status = True
        else:
            status = False
        print status

        new_form = form.save(commit=False)
        new_form.context = context
        new_form.source_path = salt_file_storage
        new_form.file_name = target_abs_path
        new_form.status = status
        new_form.operate = request.session['username']
        new_form.save()
        form.save()

        return redirect('file_push_list')

    return render(request, template_name, {'highlight3': 'active',
                                           'username': request.session['username'],
                                           'form': form,
                                           'servers': servers,
                                           'departments': departments,
                                           'zones': zones,
                                           'files': files,
                                           'var7': 'active',
                                           })
Example #8
0
def merge_server_process(request,
                         template_name='saltstack/merge_server_form.html'):
    departments = Department.objects.all()
    zones = Zone.objects.all()
    # repo_object = Repository.objects.filter(repo_tag=u'war_data')
    repo_object = Repository.objects.all()
    assets = Assets.objects.all()
    war_object = Assets.objects.filter(tag__name='War')
    chat_object = Assets.objects.filter(tag__name='Chat')
    web_object = Assets.objects.filter(tag__name='Web')

    zone_list = []
    form = MergeServersForm(request.POST or None)
    if form.is_valid():
        information = {}
        context = {}
        war_server_id = form.cleaned_data['data_server']
        chat_server_id = form.cleaned_data['chat_server']
        war_servers = Assets.objects.filter(id=war_server_id)
        for item in war_servers:
            information['{{WAR_DATA_HOST}}'] = item.alias_name
            information['{{WAR_DATA_ADDR}}'] = item.networks.private_address
            information['{{REDIS_ADDR}}'] = item.networks.private_address

        chat_servers = Assets.objects.filter(id=chat_server_id)
        for item in chat_servers:
            information['{{CHAT_PUBLIC_ADDR}}'] = item.networks.public_address
            information[
                '{{CHAT_PRIVATE_ADDR}}'] = item.networks.private_address
            information['{{CHAT_HOST}}'] = item.alias_name

        project_list = ['war_data', 'pxqb_base', 'pxqb_login']

        merge_path = form.cleaned_data['merge_path']
        # print merge_path

        if not os.path.exists(merge_path):
            makedir_p(merge_path)

        merge_zones = form.cleaned_data['merge_zones']

        for zone in merge_zones:
            zone_list.append(zone.name)

        zone_shell_array = ' '.join(zone_list)
        # print zone_shell_array
        merge_name = '_'.join(zone_list)
        # print merge_name

        deploy_path = '/data/deploy'

        source_path = '/srv/salt/app_config'

        # 合并、复制、生成新配置
        for project_name in project_list:
            if project_name == 'war_data':
                script = "sh /data/deploy/OMS/saltstack/scripts/shell/merge_config_file.sh '%s' '%s' '%s' '%s' '%s'" \
                          % (source_path, merge_path, zone_shell_array, merge_name, project_name)
                # print script
                running_command(script)

            if project_name == 'pxqb_base':
                project_abs_path = os.path.join(merge_path, merge_name,
                                                project_name, 'config')
                if not os.path.exists(project_abs_path):
                    makedir_p(project_abs_path)

                # 合并conf.allserver.php文件
                file_list = []
                for zone in zone_list:
                    file_list.append('%s/%s/%s/config/conf.allserver.php' %
                                     (source_path, zone, project_name))
                # print file_list
                one_file = file_list[0]
                do_copy_new_file(one_file, merge_name)
                file_list.pop(0)
                # print file_list
                merge_all_server(file_list, merge_name)

                # 生成新dataserver.php文件
                dataserver_file = '/data/deploy/OMS/media/Upload/conf.dataserver.php'
                merge_target_file = '/srv/salt/merge_config/%s/pxqb_base/config/conf.dataserver.php' % merge_name
                execute_replace(information, dataserver_file,
                                merge_target_file)

            if project_name == 'pxqb_login':
                for zone in zone_list:
                    full_project_name = project_name + '_' + zone
                    copy_target_path = os.path.join(merge_path, merge_name)
                    if not os.path.exists(copy_target_path):
                        makedir_p(copy_target_path)
                    script = "sh /data/deploy/OMS/saltstack/scripts/shell/copy_pxqb_login_config.sh %s %s %s" \
                             % (full_project_name, copy_target_path, zone)
                    # print script
                    running_command(script)

        # 同步配置
        project_tmp = project_list
        for project_name in project_list:
            if project_name == 'pxqb_login':
                for zone in zone_list:
                    project_tmp.append(project_name + '_' + zone)

        project_tmp.remove('pxqb_login')

        for project_name in project_tmp:
            salt_abs_url = 'salt://merge_config/%s/%s' % (merge_name,
                                                          project_name)
            data = {
                'expr_form': 'list',
                'client': 'local',
                'fun': 'cp.get_dir',
                'tgt':
                [item.host_name for item in form.cleaned_data['tgt'].all()],
                'arg': [salt_abs_url, deploy_path],
            }
            # print data
            salt = SaltApi()
            salt.get_token()
            header = salt.get_header()
            context['%s' % project_name] = process(header, **data)
            print context['%s' % project_name]

        print context

        if regex_match_error(json.dumps(context)):
            status = True
        else:
            status = False
        new_form = form.save(commit=False)
        new_form.operate = request.session['username']
        new_form.status = status
        new_form.chat_server = information['{{CHAT_HOST}}']
        new_form.data_server = information['{{WAR_DATA_HOST}}']
        new_form.context = json.dumps(context)
        new_form.save()
        form.save()

        return redirect('merge_server_list')

    return render(
        request, template_name, {
            'highlight13': 'active',
            'username': request.session['username'],
            'form': form,
            'var7': 'active',
            'repo_object': repo_object,
            'assets': assets,
            'zones': zones,
            'departments': departments,
            'war_object': war_object,
            'web_object': web_object,
            'chat_object': chat_object,
        })
Example #9
0
def code_release(request, template_name='saltstack/code_release_form.html'):
    form = ReleaseForm(request.POST or None)
    servers = Assets.objects.all()
    departments = Department.objects.all()
    zones = Zone.objects.all()
    repo = Repository.objects.all()
    deploy_path = Path.objects.all()
    global status

    if form.is_valid():
        repo_name = form.cleaned_data['repository_name']
        result = Repository.objects.filter(repo_name__contains=repo_name)[0]
        if result.repo_protocol == '3':
            repository_url = 'https://%s:%s@%s' % (result.repo_user, result.repo_pass, result.repo_address)
        elif result.repo_protocol == '2':
            repository_url = 'http://%s:%s@%s' % (result.repo_user, result.repo_pass, result.repo_address)
        else:
            repository_url = '%s@%s' % (result.repo_user, result.repo_address)

        project_name = form.cleaned_data['repository_name'].repo_tag
        zone_name = form.cleaned_data['zones'].name
        deploy_path = form.cleaned_data['deploy_path'].path_value
        release_path = form.cleaned_data['release_path'].path_value
        # versions = form.cleaned_data['versions']
        # version = versions.version
        # version_id = versions.id
        print project_name, zone_name, release_path

        if form.cleaned_data['use_zone']:
            deploy_abs_path = os.path.join(deploy_path, (project_name + '_' + zone_name))
            release_abs_path = release_path + '_' + zone_name
        else:
            deploy_abs_path = os.path.join(deploy_path, project_name)
            release_abs_path = release_path

        fun_value = dict(RELEASE_FUN_CHOICES).get(form.cleaned_data['fun'])

        data = {
            'expr_form': 'list',
            'client': form.cleaned_data['client'],
            'tgt': [item.host_name for item in form.cleaned_data['tgt']],
            'fun': fun_value,
            'arg': [deploy_abs_path, repository_url],
        }
        print data
        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        print context

        if form.cleaned_data['fun'] == u'1':
            shell = 'rm -rf %s && ln -s %s %s' % (release_abs_path, deploy_abs_path, release_abs_path)
            data = {
                'expr_form': 'list',
                'client': form.cleaned_data['client'],
                'tgt': [item.host_name for item in form.cleaned_data['tgt']],
                'fun': 'cmd.run',
                'arg': shell,
            }
            # print data
            release_context = process(header, **data)
        else:
            release_context = "symlink not change."

        for item in form.cleaned_data['tgt']:
            result = yaml.load(context)['return'][0][item.host_name]
            if result is True or result == "Already up-to-date." and regex_match_error(release_context) is True:
                status = True
            else:
                status = False
        new_form = form.save(commit=False)
        new_form.context = context
        new_form.deploy_path = deploy_abs_path
        new_form.release_path = release_abs_path
        new_form.operate = request.session['username']
        new_form.status = status
        new_form.save()
        form.save()
        return redirect('code_release_list')

    return render(request, template_name, {'highlight2': 'active',
                                           'username': request.session['username'],
                                           'form': form,
                                           'servers': servers,
                                           'departments': departments,
                                           'zones': zones,
                                           'deploy_path': deploy_path,
                                           'repo': repo,
                                           'var7': 'active',
                                           })
Example #10
0
def sync_config_process(request,
                        template_name='saltstack/sync_config_form.html'):
    form = SyncConfigForm(request.POST or None)
    if form.is_valid():
        project_name = form.cleaned_data['repository'].repo_tag
        zone = form.cleaned_data['zones'].name
        salt_url = os.path.join('salt://app_config', zone)
        print salt_url
        dest_path = form.cleaned_data['dest_path'].path_value
        if form.cleaned_data['use_zone']:
            salt_abs_url = os.path.join(salt_url, (project_name + '_' + zone))
        else:
            salt_abs_url = os.path.join(salt_url, project_name)

        data = {
            'expr_form': 'list',
            'client': 'local',
            'fun': 'cp.get_dir',
            'tgt': [item.host_name for item in form.cleaned_data['tgt'].all()],
            'arg': [salt_abs_url, dest_path],
        }
        print data

        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        print context

        if project_name == 'pxqb_login':
            info = Information.objects.filter(zones=form.cleaned_data['zones'],
                                              key__contains="SERVER_ID")
            if info:
                for item in info:
                    server_id = item.value
                    filename = os.path.join(dest_path,
                                            project_name + '_' + zone,
                                            'server.php')
                    command = "sh /data/agent_scripts/enable_entrance.sh %s %s" % (
                        server_id, filename)

                    data = {
                        'expr_form':
                        'list',
                        'client':
                        'local',
                        'fun':
                        'cmd.run',
                        'tgt': [
                            item.host_name
                            for item in form.cleaned_data['tgt'].all()
                        ],
                        'arg':
                        command,
                    }

                    print data

                    salt = SaltApi()
                    salt.get_token()
                    header = salt.get_header()
                    result = process(header, **data)
                    print result

        if regex_match_error(context):
            status = True
        else:
            status = False
        new_form = form.save(commit=False)
        new_form.operate = request.session['username']
        new_form.dest_path = dest_path
        new_form.salt_url = salt_abs_url
        new_form.status = status
        new_form.context = context
        new_form.save()
        form.save()

        return redirect('sync_config_list')

    return render(
        request, template_name, {
            'highlight14': 'active',
            'username': request.session['username'],
            'form': form,
            'var7': 'active',
        })
Example #11
0
def cron_jobs(request, template_name='saltstack/cron_form.html'):
    data = {}
    servers = Assets.objects.all()
    s = .objects.all()
    zones = Zone.objects.all()

    form = CronForm(request.POST or None)
    if form.is_valid():
        # print form
        if form.cleaned_data['fun'] == 'cron.rm_job':
            data = {
                'expr_form': 'list',
                'client': form.cleaned_data['client'],
                'fun': form.cleaned_data['fun'],
                'tgt': [item.host_name for item in form.cleaned_data['tgt'].all()],
                'arg': [form.cleaned_data['sys_user'],
                        form.cleaned_data['arg']]
            }

        if form.cleaned_data['fun'] == 'cron.set_job':
            data = {
                'expr_form': 'list',
                'client': form.cleaned_data['client'],
                'fun': form.cleaned_data['fun'],
                'tgt': [item.host_name for item in form.cleaned_data['tgt'].all()],
                'arg': [form.cleaned_data['sys_user'],
                        form.cleaned_data['minute'],
                        form.cleaned_data['hour'],
                        form.cleaned_data['day'],
                        form.cleaned_data['month'],
                        form.cleaned_data['day_week'],
                        form.cleaned_data['arg']]
            }

        if form.cleaned_data['fun'] == 'cron.raw_cron':
            data = {
                'expr_form': 'list',
                'client': form.cleaned_data['client'],
                'fun': form.cleaned_data['fun'],
                'tgt': [item.host_name for item in form.cleaned_data['tgt'].all()],
                'arg': [form.cleaned_data['sys_user']]
            }

        print data
        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        print context
        if regex_match_error(context):
            status = True
        else:
            status = False
        new_form = form.save(commit=False)
        new_form.context = context
        new_form.operate = request.session['username']
        new_form.status = status
        new_form.save()
        form.save()

        return redirect('cron_list')

    return render(request, template_name, {'highlight6': 'active',
                                           'username': request.session['username'],
                                           'form': form,
                                           'servers': servers,
                                           'zones': zones,
                                           's': s,
                                           'var7': 'active'
                                           })
Example #12
0
def all_zone_update_process(request, template_name='saltstack/all_zone_update_form.html'):
    departments = Department.objects.all()
    zones = Zone.objects.all()
    path_object = Path.objects.filter(path_key__contains=u'部署')
    repo_object = Repository.objects.all()
    global status
    global commands
    global assets
    context = {}
    cmds = {}
    form = UpdatesForm(request.POST or None)
    if form.is_valid():
        # print form
        zone_list = form.cleaned_data['zones']
        repo_name = form.cleaned_data['repository_name']
        project_name = repo_name.repo_tag
        for zone in zone_list:
            host_list = []
            # print form.cleaned_data['use_zone']
            if form.cleaned_data['use_zone']:
                abs_path = os.path.join(form.cleaned_data['deploy_path'].path_value, (project_name + '_' + zone.name))
            else:
                abs_path = os.path.join(form.cleaned_data['deploy_path'].path_value, project_name)
            print abs_path
            commands = '%s %s' % (form.cleaned_data['commands'], abs_path)
            print commands
            cmds['%s' % zone] = commands

            assets = Assets.objects.filter(departments=form.cleaned_data['departments'], game_zone=zone)
            for item in assets:
                host_list.append(item.host_name)

            print host_list

            data = {
                'expr_form': 'list',
                'client': form.cleaned_data['client'],
                'fun': form.cleaned_data['fun'],
                'arg': commands,
                'tgt': host_list,
            }

            # print data

            if host_list:
                salt = SaltApi()
                salt.get_token()
                header = salt.get_header()
                context['%s' % zone] = process(header, **data)
            else:
                context['%s' % zone] = "not found servers"

        if regex_match_error(json.dumps(context)):
            status = True
        else:
            status = False

        new_form = form.save(commit=False)
        new_form.context = json.dumps(context, encoding='UTF-8', ensure_ascii=False)
        new_form.operate = request.session['username']
        new_form.status = status
        new_form.save()
        form.save()
        # updates = Updates(departments=form.cleaned_data['departments'],
        #                   operate=request.session['username'], client=form.cleaned_data['client'],
        #                   use_zone=form.cleaned_data['use_zone'], fun=form.cleaned_data['fun'],
        #                   commands=commands, deploy_path=form.cleaned_data['deploy_path'].path_value,
        #                   status=status, content=form.cleaned_data['content'], context=json.dumps(context),
        #                   repository_name_id=repo_name.id)
        # updates.save()
        # updates.tgt = assets
        # updates.zones = form.cleaned_data['zones']
        # updates.save()
        return redirect('all_zone_update_list')

    return render(request, template_name, {'form': form,
                                           'highlight7': 'active',
                                           'username': request.session['username'],
                                           'var7': 'active',
                                           'departments': departments,
                                           'zones': zones,
                                           'path_object': path_object,
                                           'repo_object': repo_object,
                                           })
Example #13
0
def change_sys_password(
        request, template_name='saltstack/change_sys_password_process.html'):
    departments = Department.objects.all()
    tgt = Assets.objects.filter(is_online=True)
    form = PasswordFrom(request.POST or None)
    gen_string = {}
    hash_string = {}
    context = {}

    if form.is_valid():
        for item in form.cleaned_data['tgt']:
            password_charset = string.ascii_letters + string.digits
            gen_string['%s' % item.host_name] = gen_random_string(
                password_charset, 16)
            data = {
                'expr_form': 'list',
                'client': form.cleaned_data['client'],
                'tgt': item.host_name,
                'fun': 'shadow.gen_password',
                'arg': gen_string[item.host_name]
            }
            print data

            salt = SaltApi()
            salt.get_token()
            header = salt.get_header()
            result = change_password(header, **data)
            hash_string[item.host_name] = result[item.host_name]
            data = {
                'expr_form': 'list',
                'client': form.cleaned_data['client'],
                'tgt': item.host_name,
                'fun': 'shadow.set_password',
                'arg':
                [form.cleaned_data['user'], hash_string[item.host_name]]
            }
            print data

            context[item.host_name] = process(header, **data)

            if form.cleaned_data['user'] == 'root':
                Assets.objects.filter(host_name=item.host_name).update(
                    superuser_pass=gen_string[item.host_name])
            else:
                SysUser.objects.filter(
                    servers__host_name=item.host_name,
                    sys_user=form.cleaned_data['user']).update(
                        sys_pass=gen_string[item.host_name])
                # for assets in Assets.objects.filter(host_name=item.host_name):
                #     assets.sys_users.filter(sys_user=form.cleaned_data['user']).\
                #         update(sys_pass=gen_string[item.host_name])
        if regex_match_error(json.dumps(context)):
            status = True
        else:
            status = False
        new_form = form.save(commit=False)
        new_form.operate = request.session['username']
        new_form.status = status
        new_form.context = json.dumps(context)
        # new_form.context = context
        new_form.save()
        form.save()

        return redirect('change_password_record')

    return render(
        request, template_name, {
            'form': form,
            'var7': 'active',
            'highlight9': 'active',
            'username': request.session['username'],
            'departments': departments,
            'tgt': tgt
        })
Example #14
0
def p2p_scp_process(request, template_name='saltstack/code_release_form.html'):
    global status
    status = False
    form = P2PForm(request.POST or None)
    if form.is_valid():
        operate = request.session['username']
        # 项目名
        project = form.cleaned_data['repository_name'].repo_tag

        zones = form.cleaned_data['zones']
        # 归档路径
        archive_path = request.POST['archive_path']
        # 如果路径不存在,则创建
        if os.path.exists(archive_path):
            makedir_p(archive_path)

        # versions = form.cleaned_data['versions']
        get_deploy_path = form.cleaned_data['deploy_path'].path_value
        release_path = form.cleaned_data['release_path'].path_value

        # 部署路径 发布路径拼接
        if form.cleaned_data['use_zone']:
            deploy_path = os.path.join(get_deploy_path,
                                       (project + '_' + zones.name))
            release_abs_path = release_path + '_' + zones.name
        else:
            deploy_path = os.path.join(get_deploy_path, project)
            release_abs_path = release_path

        # 获取仓库地址
        repo_name = form.cleaned_data['repository_name']
        result = Repository.objects.filter(repo_name__contains=repo_name)[0]
        repository_url = get_repo_url(result)

        compress_file = os.path.join(archive_path, '%s.zip' % project)

        # 获取最新版并压缩
        git_checkout(archive_path, project, repository_url)
        archive_compress(archive_path, project, compress_file)

        # 获取md5码
        command = 'md5sum %s' % compress_file
        md5sum = get_md5sum(command)

        servers = form.cleaned_data['tgt']
        get_destination_list(servers)

        SOURCE.append(
            Assets.objects.filter(
                networks__private_address__icontains=MASTER_IP))
        source_server = SOURCE[0][0]

        do_copy_control(source_server, archive_path, compress_file,
                        deploy_path, release_abs_path, md5sum)

        # print return_result

        for item in return_result:
            for key in item:
                if regex_match_error(item[key]) is True:
                    status = True
                else:
                    status = False
        # print status
        # store to mysql
        # Version.objects.filter(Q(vernier=u'1') | Q(vernier=u'2') | Q(vernier=u'3')).update(vernier=u'0')
        # if status:
        #     Version.objects.filter(id=versions.id).update(vernier=1)
        new_form = form.save(commit=False)
        new_form.fun = 'P2P_SCP'
        new_form.deploy_path = deploy_path
        new_form.release_path = release_abs_path
        new_form.operate = operate
        new_form.status = status
        new_form.context = json.dumps(return_result)
        new_form.save()
        form.save()
        return redirect('code_release_list')

    return render(request, template_name, {
        'form': form,
        'highlight2': 'active',
        'var7': 'active',
    })
Example #15
0
def code_backup_process(request,
                        template_name='saltstack/code_backup_form.html'):
    global status
    form = BackupForm(request.POST or None)
    if form.is_valid():
        zone_name = form.cleaned_data['zones'].name
        deploy_path = form.cleaned_data['deploy_path'].path_value
        # versions = form.cleaned_data['versions']
        project_name = form.cleaned_data['repository_name'].repo_tag
        backup_path = form.cleaned_data['backup_path'].path_value

        if form.cleaned_data['use_zone']:
            deploy_abs_path = os.path.join(deploy_path,
                                           (project_name + '_' + zone_name))
            code_backup_package = project_name + '_' + zone_name + '_' + datetime.now(
            ).strftime("%Y%m%d%H") + '.tar.gz'
        else:
            deploy_abs_path = os.path.join(deploy_path, project_name)
            code_backup_package = project_name + '_' + datetime.now().strftime(
                "%Y%m%d%H") + '.tar.gz'

        shell_command = 'sh /data/agent_scripts/backup_code.sh %s %s %s' % (
            backup_path, deploy_abs_path, code_backup_package)

        code_backup_abs_path = os.path.join(backup_path, code_backup_package)

        data = {
            'expr_form': 'list',
            'client': form.cleaned_data['client'],
            'tgt': [item.host_name for item in form.cleaned_data['tgt']],
            'fun': 'cmd.run',
            'arg': shell_command,
        }

        print data
        salt = SaltApi()
        salt.get_token()
        header = salt.get_header()
        context = process(header, **data)
        print context

        for item in form.cleaned_data['tgt']:
            print yaml.load(context)['return'][0][item.host_name]
            if regex_match_error(context) is True:
                status = True
            else:
                status = False
        # Version.objects.filter(id=versions.id).update(vernier=u'2')
        new_form = form.save(commit=False)
        new_form.context = context
        new_form.deploy_path = deploy_abs_path
        new_form.backup_path = code_backup_abs_path
        new_form.fun = 'cmd.run'
        new_form.operate = request.session['username']
        new_form.status = status
        new_form.save()
        form.save()

        return redirect('code_backup_list')

    return render(
        request, template_name, {
            'highlight11': 'active',
            'username': request.session['username'],
            'form': form,
            'var7': 'active',
        })