關於Saltstack halite 配置管理及二次開發ui [原salt-ui]

saltstack官方有個web ui 叫 halite      一個在頁面執行管理的ui。後端用的是saltstack api     html


補充saltstack api的相關文檔:前端

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


前段時間我一直在本身寫ui,用flask和metro 。  項目也放一邊了,懶得動彈了 。 今個看到官網的ui的工具,雖然功能都很不全,可是基本的執行,狀態查看仍是有的。angularjs

咱們先把halite給搭建出來,而後咱們在上面作一些功能上的開發。。。。github


這是地址哈:web

https://github.com/saltstack/haliteflask



先上圖~後端


155857289.jpg


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



155857262.jpg



官網是有教程的,可是能按照這個教程作出來的都是神人。。。瀏覽器

總結,有問題

我把官方的配置文檔修改下,貼出來


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:
         - '*'


160742291.jpg


5 跑起來!

增長一個 rui 的系統帳號和密碼。

而後   salt-api 跑起來~~~   瀏覽器就能夠訪問了~


161745469.jpg


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 ~

162802181.jpg


文件上傳的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


084104230.jpg

我用lynx訪問的~

yum -y install lynx
lynx 127.0.0.1:8080


084104340.jpg

084104255.jpg


halite不少的東西是用angularjs來渲染的,頁面太複雜了。。。。

官方也沒有寫好文檔,及開發的日誌。。。

090942183.jpg

代碼以下:

<div class="row-fluid">
  <div class="span12">
                  <a href="checkacceptkey"  class="btn btn-primary" >已經認證的key </a>
                  <a href="acceptkey"  class="btn btn-success" >執行所有認證</a>
                  <br/><br/>
                  <div class='well' id='jieguo'>
                  </div>
                  <br/><br/>
                  <form  action="rmkey" method='post'>
                        <input type="text" class="input-medium search-query">
                        <button type="submit" class="btn btn-danger">刪除認證</button>
                  </form>
  </div>
</div><!-- /row-fluid -->


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

如今前端偶了,我竟然找不到他給js框架提供的CRUD接口。。。。

坑爹呀。。。。  繼續找

官方既然用js的框架,那我也就用這個框架。。。

相關文章
相關標籤/搜索