远程执行命令我使用saltstack这个运维工具,执行一些系统命令可以直接使用salt,执行一些相关的游戏脚本,则可以使用salt的模块功能,最后还可以把结果存入数据库,太方便了

saltstack 自定义modules:http://lihuipeng.blog.51cto.com/3064864/1396279

saltstack return的使用:

saltstack API的使用:

我这里使用了多数据库,django多数据库的配置参考:

models.py(这个salt官方需要的两个表)

class QjshsaJids(models.Model):    _database = 'kaifu'    id = models.IntegerField(primary_key=True)    jid = models.CharField(unique=True, max_length=255)    load = models.TextField()    class Meta:        managed = False        db_table = 'QjshSa_jids'class QjshsaSaltreturns(models.Model):    _database = 'kaifu'    id = models.IntegerField(primary_key=True)    fun = models.CharField(max_length=50)    jid = models.CharField(max_length=255)    result = models.TextField()    host = models.CharField(max_length=255)    success = models.CharField(max_length=10)    full_ret = models.TextField()    class Meta:        managed = False        db_table = 'QjshSa_saltreturns'

forms.py

systemcommand = [                        ('df -lh','df -lh'),                        ('free -m','free -m'),                        ('uptime','uptime'),                        ('netstat -tunlp','netstat -tunlp'),                        ('ps aux | grep "daemon"','ps aux | grep "daemon"'),                        ('crontab -l', 'crontab -l'),                     ]class ExecuteSystemForm(forms.Form):    plat = forms.CharField(required=True,                           widget=forms.TextInput(attrs={'readonly':'True', 'class':"form-control"}))    server_id = forms.CharField(required=True,                                widget=forms.TextInput(attrs={'readonly':'True', 'class':"form-control"}))    server_name = forms.CharField(required=True,                                widget=forms.TextInput(attrs={'readonly':'True', 'class':"form-control"}))    host = forms.CharField(required=True,                           widget=forms.TextInput(attrs={'readonly':'True', 'class':"form-control"}))    command = forms.ChoiceField(required=True,                                choices=systemcommand,                                widget=forms.Select(attrs={'class':"form-control"}))

我限定了可以执行某些命令,感觉这样我安心一些。。。

views.py

class ExecuteSystem(FormView):    template_name = 'execute_system.jinja.html'    form_class = ExecuteSystemForm    def get_initial(self, **kwargs):        initial = {}        kaifuid = self.kwargs['pk']        serverinfo = ServerList.objects.get(kaifu_id=kaifuid)        initial['plat'] = serverinfo.plat        initial['server_id'] = serverinfo.server_id        initial['server_name'] = serverinfo.server_name        initial['host'] = serverinfo.dx_ip        return initial    def form_valid(self, form):        formdata = form.cleaned_data        host = formdata['host']        command = formdata['command']        saltconnection = salt.client.LocalClient()        result = saltconnection.cmd(host, 'cmd.run', [command], ret='qjsh_mysql')        result = result[host]        messages.success(self.request,'执行成功!')        return render_to_response(self.template_name,                                  {'form':form,'kaifuid':self.kwargs['pk'],'result':result},                                  context_instance=RequestContext(self.request))    def get_context_data(self, **kwargs):        context = super(ExecuteSystem,self).get_context_data(**kwargs)        context['kaifuid'] = self.kwargs['pk']        return context

get_inital是初始化form

form_valid是表单通过验证后执行的

execute_system.jinja.html

{% from "form_macro.html" import render_field, render_checkbox%}{% extends "execute_cmd_index.jinja.html" %}{% set active_page2 = 'executesystem' -%}{% block content %}    
        
{% csrf_token %}                
                                            平台名称:                        {
{ form.plat|safe }}                                                                服务器ID:                        {
{ form.server_id|safe }}                                                                服务器名称:                        {
{ form.server_name|safe }}                                                                执行IP:                        {
{ form.host|safe }}                                                                执行命令:                                                    
                                {
{ form.command|safe }}                                                                                                                    
确定
                                                     {% if result %}    

    
        
            
                
执行结果:                        
                
`result`
                            {% endif %}{% endblock %}

最后我实现的效果: