|
import json
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
try:
import salt.client
except:
pass
from cmdb.models import *
class Salt_jenkins:
def __init__(self, host_list, job):
self.client = salt.client.LocalClient()
self.host_list = host_list
self.type = type
self.job = job
def upgradeavailable(self):
"""检测目标主机组项目在yum上是否有新版本更新,返回可以更新的主机"""
ret = self.client.cmd('%s'% self.host_list, 'pkg.upgrade_available', ['%s'% self.job],expr_form='list',ret='return_redis')
true_hostlist = []
for host in ret.keys():
if ret['%s' % host]:
true_hostlist.append(host)
else:
pass
return true_hostlist
def install(self):
"""YUM安装项目RPM包"""
ret = self.client.cmd('%s'% self.host_list, 'pkg.install', ['%s'% self.job],expr_form='list',ret='return_redis')
true_hostlist = []
for host in ret.keys():
if ret['%s' % host] != {}:
install_ret = ret['%s' % host]['%s' % self.job]
if install_ret != '':
true_hostlist.append(host)
else:
pass
else:
pass
return true_hostlist
def modrepo(self):
"""创建项目YUM源"""
ret = self.client.cmd('%s'% self.host_list, 'pkg.mod_repo',['repo=%s'% self.job,'baseurl=http://172.18.11.98/release/%s'% self.job,'enabled=1','gpgcheck=0','name=%s'% self.job,'priority=10'],expr_form='list',ret='return_redis')
true_hostlist = []
for host in ret.keys():
if type(ret['%s' % host]) == dict:
true_hostlist.append(host)
else:
pass
return true_hostlist
def getrepo(self):
"""验证项目YUM源是否存在"""
ret = self.client.cmd('%s'% self.host_list, 'pkg.get_repo', ['repo=%s'% self.job],expr_form='list',ret='return_redis')
true_hostlist = []
for host in ret.keys():
if ret['%s' % host] != {}:
true_hostlist.append(host)
else:
pass
return true_hostlist
def intro(self):
"""执行svn_intro内命令"""
command = Svn.objects.get(svn_name = self.job).svn_intro
ret = self.client.cmd('%s'% self.host_list, 'cmd.run', ['%s'% command],expr_form='list',ret='return_redis')
return ret
@csrf_exempt
def salt_jenkins_post(request):
if request.method == 'POST':
ip = request.META.get("REMOTE_ADDR", None)
if ip == '172.18.11.98':
job = request.POST.get('job_id')
job_hosts = Svn.objects.get(svn_name=job).svn_hosts
if job =='cms_template.youth.cn' or job =='cms_assets.youth.cn':
pass
else:
"""初始化Salt_jenkins"""
salt_jenkins = Salt_jenkins(job_hosts, job)
"""目标主机检查YUM源是否存在"""
if sorted(salt_jenkins.getrepo()) == sorted(str(job_hosts).split(',')):
pass
else:
"""不存在就创建YUM源"""
salt_jenkins.modrepo()
"""目标主机检查YUM源是否更新"""
if sorted(salt_jenkins.upgradeavailable()) == sorted(str(job_hosts).split(',')):
if sorted(salt_jenkins.install()) == sorted(str(job_hosts).split(',')):
"""目标主机执行命令"""
salt_jenkins.install()
"""目标主机执行命令"""
salt_jenkins.intro()
return HttpResponse('install success')
else:
return HttpResponse('install fail')
else:
return HttpResponse('upgradeavailable fail')
else:
return HttpResponse('ip deny')
else:
return HttpResponse('get deny')
|
|
|