saltstack官方有个web ui 叫 halite      一个在页面执行管理的ui。后端用的是saltstack api    


补充saltstack api的相关文档:

http://rfyiamcool.blog.51cto.com/1030776/1345518


前段时间我一直在自己写ui,用flask和metro 。  项目也放一边了,懒得动弹了 。 今个看到官网的ui的工具,虽然功能都很不全,但是基本的执行,状态查看还是有的。

我们先把halite给搭建出来,然后我们在上面做一些功能上的开发。。。。


这是地址哈:

https://github.com/saltstack/halite



先上图~


关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第1张图片


源地址:http://rfyiamcool.blog.51cto.com/1030776/1275443



关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第2张图片



官网是有教程的,但是能按照这个教程做出来的都是神人。。。

总结,有问题

我把官方的配置文档修改下,贴出来


1  克隆地址,你懂的:


git clone https://github.com/saltstack/halite


2  生成index.html文件:


cd halite/halite
./genindex.py -C


3   安装salt-api

看这个安装

https://github.com/saltstack/salt-api

或者你直接yum install salt-api


4     配置master文件

我们配置salt的master文件,有访问的ip和端口,以及路径。

rest_cherrypy:
 host: 0.0.0.0
 port: 8080
 debug: true
 static: /ui/halite/halite
 app: /ui/halite/halite/index.html
external_auth:
   pam:
     admin:
         - '*'


关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第3张图片


5 跑起来!

增加一个 rui 的系统账号和密码。

然后   salt-api 跑起来~~~   浏览器就可以访问了~


关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第4张图片


halite 可以跑了~   saltstack halite  是基于cherrypy web框架开发的ui。既然是cherrypy写的,那咱们就要学这个框架。

我用cherrypy简单写了个常用的demo     感觉他的用法挺稀奇的,是默认CherryPy将URI映射到Python可调用对象(Python callable)。当然 CherryPy 还提供其他分派机制。


先来一个hello的demo ~


import cherrypy
class HelloWorld:
    def index(self):
        return "Hello world!"
    index.exposed = True
cherrypy.quickstart(HelloWorld())


结果是:

162344941.jpg


一个套嵌的

import cherrypy
class OnePage(object):
    def index(self):
        return "one page!"
    index.exposed = True
class HelloWorld(object):
    onepage = OnePage()
    def index(self):
        return "hello world"
    index.exposed = True
root = HelloWorld()
cherrypy.quickstart(root)


结果:

162543840.jpg


#coding:utf-8
import cherrypy
import os,sys
#curl http://localhost:8080   or /index
class HelloWorld:
    def index(self):
        return "Hello world!"
    index.exposed = True
root = HelloWorld()
'''
def foo():
    return 'Foo!'
foo.exposed = True
root.foo = foo
'''
'''
dir 是路由地址
'''
#curl http://localhost:8080/dir
def dir():
    return '%s'%os.popen('dir').read()
dir.exposed = True
root.dir = dir
def foo(year, month, day):
    return '\n\n第一个:%s \n第二个: %s \n第三个: %s\n\n'%(year, month, day)
foo.exposed = True
root.foo = foo
#@cherrypy.expose
def xiaorui(form):
#    return '{}{}'.format(form['username'], form['password'])
    return '%s %s'%(form['username'],form['password'])
xiaorui.exposed = True
root.xiaorui = xiaorui
'''
conf = {
    'global': {
        'server.socket_host': '0.0.0.0',
        'server.socket_port': 1970,
        'tools.encode.on':True,
        'tools.encode.encoding':'utf8',
    },
}
'''
#cherrypy.quickstart(root,'/',conf)
cherrypy.quickstart(root)


我测试接口用的demo ~

关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第5张图片


文件上传的demo ~


import os
localDir = os.path.dirname(__file__)
absDir = os.path.join(os.getcwd(), localDir)
import cherrypy
class FileDemo(object):
    def index(self):
        return """
        
            

Upload a file

filename:

Download a file

This one """ index.exposed = True def upload(self, myFile): out = """ myFile length: %s
myFile filename: %s
myFile mime-type: %s """ size = 0 while True: data = myFile.file.read(8192) if not data: break size += len(data) return out % (size, myFile.filename, myFile.content_type) upload.exposed = True tutconf = os.path.join(os.path.dirname(__file__), 'tutorial.conf') if __name__ == '__main__': cherrypy.quickstart(FileDemo()) else: cherrypy.tree.mount(FileDemo(), config=tutconf)


源地址http://rfyiamcool.blog.51cto.com/1030776/1275443


关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第6张图片

我用lynx访问的~

yum -y install lynx
lynx 127.0.0.1:8080


关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第7张图片

关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第8张图片


halite很多的东西是用angularjs来渲染的,页面太复杂了。。。。

官方也没有写好文档,及开发的日志。。。

关于Saltstack halite 配置管理及二次开发ui [原salt-ui]_第9张图片

代码如下:


源地址:  http://rfyiamcool.blog.51cto.com/1030776/1275443

现在前端偶了,我居然找不到他给js框架提供的CRUD接口。。。。

坑爹呀。。。。  继续找

官方既然用js的框架,那我也就用这个框架。。。