<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      saltstack源碼詳解一

      @(python之路)[saltstack源碼詳解一]
      saltstack源碼詳解

      初識源碼流程

      環境準備:

      # 安裝
      yum install salt-ssh
      pip3 install salt-ssh
      
      # 命令
      salt-ssh
      # 配置
      /etc/salt/roster
      # 功能
      salt-ssh "*" cmd.run "ls"
      

      下面我們查看源碼

      入口

      yum install salt-ssh后,他就會把代碼放到python中的lib中。他會觸發這個腳本

      from salt.scripts import salt_ssh
      
      if __name__ == '__main__':
          salt_ssh()
      

      他會調用這里邊的東西并執行。
      解析salt-ssh "*" cmd.run "ls" -i 命令
      源碼流程:

      • 啟動命令時python腳本
      • 讀取默認配置文件
        obj = salt.clissh.SaltSSH()
        obj.run()
      • 執行命令
        obj = SSH(配置文件)
        obj.run()
      • 創建進程間供享的隊列;[]
      • 讀取配置文件中的主機,給每個符合條件的主機創建一個進程;
        host = next(target_iter)
        routine = MultiprocessingProcess(target=self.handle_routine,args=args)
        每個進程執行得到結果后,將結果放入隊列中
        ret = self.handle_routing(……)
        ?觸發Single
        ??觸發Shell
        ??觸發terminal
        ?que.put(ret)

      salt日常使用

      from salt.client.ssh.shell import Shell
      shell = Shell({_ssh_version:(4,9 )})
      result = shell.exec_cmd("ls")
      print(result)
      

      預留python接口:

      from salt.client.ssh.client import SSHClient
      
      client = SSHClient()
      
      ret = client.cmd('*','cmd.run',('ls',),30)
      print(ret)
      

      1.grains.items

      salt-ssh '*' grains.items
      grains一般用于獲取服務的靜態信息
      自定義

      # /srv/salt/_grains/xx.py
      預留python接口
      from salt.client.ssh.client import SSHClient
      client = SSHClient()
      ret = client.cmd("*",'grains.items')
      print(ret)
      

      2.pillar.items

      salt-ssh "*" pillar.items
      pillar一般用于獲取服務器動態信息
      方式一

      # /srv/pillar/top.sls
      base:
        "*":          # "*" 表示所有的分組
          - xxx       # 文件名
      
      # /srv/pillar/xxx.sls
      x1:
      	{% if grains['os_family'] == 'Debian' %}
      	  xxx1: 111111111111111
      	  {% elif grains['os_family'] == 'RedHat' %}
      	  xxx1: 222222222222222
      	  {% elif grains['os'] == 'Arch' %}
      	  xxx1: 333333333333333
      	{% endif %}
      

      2/3: 是否可以用python腳本實現

      # /etc/salt/master
      ext_pillar:
        - xiaohua:
      	     api: 123
        - tom:
       
       # /var/cache/salt/master/extmods/pillar/tom.py  # [**推薦使用**]
      def ext_pillar(minion_id,pillar,*args,**kwargs):
      	import time
      	return {'alexcccccccccccccctime':str(time.time())}
      
      # /usr/lib/python2.7/site-packages/salt/pillar/wupeiqi.py
      def ext_pillar(minion_id,pillar,*args,**kwargs):
      	import time
      	return {'alexcccccccccccccctime':str(time.time())}
      

      總結pillar源碼分析:

      salt/script.py 
      	client = salt.cli.ssh.SaltSSH()
      	client.run()
      
      salt/cli/ssh.py 
      	# self.config是讀取的配置文件
      	ssh = salt.client.ssh.SSH(self.config)
      	ssh.run()
      
      salt/client/ssh/__init__.py 
      	class SSH(object):
      		def run(self, jid=None):
      			if self.opts.get('raw_shell', False):
      				fun = 'ssh._raw'
      				args = argv
      			else:
      				fun = argv[0] if argv else ''
      				args = argv[1:]
      			for ret in self.handle_ssh():
      				pass 
      		
      		def handle_ssh():
      			routine = MultiprocessingProcess(target=self.handle_routine,args=args)
      			routine.start()
      		def handle_routine(self, que, opts, host, target, mine=False):
      			single = Single(...)
      			single.run()
      
      salt/client/ssh/__init__.py 							
      	class Single(object):
      		def run(self, deploy_attempted=False):
      			stdout, retcode = self.run_wfunc()
      			return stdout, stderr, retcode
      		def run_wfunc(self):
      			
      			# 實例化Pillar對象
      			pillar = salt.pillar.Pillar(
      					opts_pkg,
      					opts_pkg['grains'],
      					opts_pkg['id'],
      					opts_pkg.get('environment', 'base')
      					)
      			pillar_dirs = {}
      			
      			# pillar對象.pillar => 去三個地方獲取所有pillar
      			pillar_data = pillar.compile_pillar(pillar_dirs=pillar_dirs)
      			
      			print(pillar_data)
      	
      salt/pillar/__init__.py 
      	class Pillar(object):
      		
      		def __init__(...):
      			# 去中找自定義pillar
      			# /var/cache/salt/master/extmods/pillar/alex.py  # [**推薦使用**]
      			# /usr/lib/python2.7/site-packages/salt/pillar/wupeiqi.py
      			
      			# ['xiaohua','tom','cmd_json',.....]
      			self.ext_pillars = salt.loader.pillars(ext_pillar_opts, self.functions)
      			
      	def compile_pillar(self, ext=True, pillar_dirs=None):
      		
      		# 1. top.sls 
      		# 去中找自定義pillar
      		# 2. /var/cache/salt/master/extmods/pillar/alex.py  # [**推薦使用**]
      		# 3. /usr/lib/python2.7/site-packages/salt/pillar/wupeiqi.py
      		
      		pillar1 = self.render_pillar('top.cls')
      		pillar2 = self.ext_pillar(pillar1,...)
      		
      		return pillar1 + pillar2
      			
      	def self.ext_pillar(...):
      		return self._external_pillar_data(....)
      	
      	def _external_pillar_data(self, pillar, val, pillar_dirs, key):
      		ext = self.ext_pillars[key](self.minion_id,pillar,*val)
      		return ext 
      
      posted @ 2018-06-20 15:27  zz小公子  閱讀(1380)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美成人aaa片一区国产精品| 国产在线无码精品无码| 免费无码观看的AV在线播放| 老太脱裤子让老头玩xxxxx| 高颜值午夜福利在线观看| 陆河县| 资源新版在线天堂偷自拍| 亚洲精品国产一二三区| 青青草无码免费一二三区| 亚洲精品成人网久久久久久| 麻豆a级片| 国产精品久久久久鬼色| 国产精品视频一区二区三区不卡 | 风流老熟女一区二区三区| 国产精品自在自线视频| 精品自拍自产一区二区三区| 免费看视频的网站| 亚洲欧美日韩久久一区二区| 国产乱码精品一区二区三上| 伊人成人在线视频免费| 天干天干夜啦天干天干国产| 亚洲天堂激情av在线| 国精无码欧精品亚洲一区| 漂亮人妻被中出中文字幕| av日韩在线一区二区三区| 日韩精品有码中文字幕| 深水埗区| 男女性高爱潮免费网站| 国内精品视频一区二区三区八戒 | 久久精品噜噜噜成人av| 国产情侣一区二区三区| 又爽又黄又无遮挡的激情视频| 欧美牲交a欧美牲交aⅴ图片| 国产亚洲av夜间福利香蕉149| 久久亚洲精品情侣| 池州市| 久久av无码精品人妻出轨| 国产精品鲁鲁鲁| 蜜臀av黑人亚洲精品| 成人区精品一区二区不卡| 欧美高清精品一区二区|