下面是简单示例:
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 # ['wupeqii','alex','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