|
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
先上图~
源地址:http://rfyiamcool.blog.51cto.com/1030776/1275443
官网是有教程的,但是能按照这个教程做出来的都是神人。。。
总结,有问题。
我把官方的配置文档修改下,贴出来
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:
- '*'
5 跑起来!
增加一个 rui 的系统账号和密码。
然后 salt-api 跑起来~~~ 浏览器就可以访问了~
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())
结果是:
一个套嵌的
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)
结果:
#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 ~
文件上传的demo ~
import os
localDir = os.path.dirname(__file__)
absDir = os.path.join(os.getcwd(), localDir)
import cherrypy
class FileDemo(object):
def index(self):
return """
<html><body>
<h2>Upload a file</h2>
<form action="upload" method="post" enctype="multipart/form-data">
filename: <input type="file" name="myFile" /><br />
<input type="submit" />
</form>
<h2>Download a file</h2>
<a href='download'>This one</a>
</body></html>
"""
index.exposed = True
def upload(self, myFile):
out = """<html>
<body>
myFile length: %s<br />
myFile filename: %s<br />
myFile mime-type: %s
</body>
</html>"""
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
我用lynx访问的~
yum -y install lynx
lynx 127.0.0.1:8080
halite很多的东西是用angularjs来渲染的,页面太复杂了。。。。
官方也没有写好文档,及开发的日志。。。
代码如下:
<div> <div>
<a href="checkacceptkey" >已经认证的key </a>
<a href="acceptkey" >执行全部认证</a>
<br/><br/>
<div> </div>
<br/><br/>
<form action="rmkey" method='post'>
<input type="text">
<button type="submit">删除认证</button>
</form>
</div>
</div><!-- /row-fluid -->
源地址: http://rfyiamcool.blog.51cto.com/1030776/1275443
现在前端偶了,我居然找不到他给js框架提供的CRUD接口。。。。
坑爹呀。。。。 继续找
官方既然用js的框架,那我也就用这个框架。。。 |
|