wqee2 发表于 2015-5-28 08:40:15

salt-call源码分析

使用salt-call可以在minion本机执行salt命令

/usr/bin/salt-call

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'salt==2014.7.0','console_scripts','salt-call'
__requires__ = 'salt==2014.7.0'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
      load_entry_point('salt==2014.7.0', 'console_scripts', 'salt-call')()
    )





/usr/lib/python2.6/site-packages/salt/scripts.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def salt_call():
    '''
    Directly call a salt command in the modules, does not require a running
    salt minion to run.
    '''
    if '' in sys.path:
      sys.path.remove('')
    client = None
    try:
      client = salt.cli.SaltCall()
      client.run()
    except KeyboardInterrupt, err:
      trace = traceback.format_exc()
      try:
            hardcrash = client.options.hard_crash
      except (AttributeError, KeyError):
            hardcrash = False
      _handle_interrupt(
            SystemExit('\nExiting gracefully on Ctrl-c'),
            err,
            hardcrash, trace=trace)





client=salt.cli.SaltCall() 一行,调用了/usr/lib/python2.6/site-packages/salt/cli/__init__.py中的SaltCall类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class SaltCall(parsers.SaltCallOptionParser):
    '''
    Used to locally execute a salt command
    '''

    def run(self):
      '''
      Execute the salt call!
      '''
      self.parse_args()

      if self.config['verify_env']:
            verify_env([
                  self.config['pki_dir'],
                  self.config['cachedir'],
                ],
                self.config['user'],
                permissive=self.config['permissive_pki_access'],
                pki_dir=self.config['pki_dir'],
            )
            if not self.config['log_file'].startswith(('tcp://',
                                                       'udp://',
                                                       'file://')):
                # Logfile is not using Syslog, verify
                verify_files(
                  ],
                  self.config['user']
                )

      if self.options.file_root:
            # check if the argument is pointing to a file on disk
            file_root = os.path.abspath(self.options.file_root)
            self.config['file_roots'] = {'base': }

      if self.options.pillar_root:
            # check if the argument is pointing to a file on disk
            pillar_root = os.path.abspath(self.options.pillar_root)
            self.config['pillar_roots'] = {'base': }

      if self.options.local:
            self.config['file_client'] = 'local'
      if self.options.master:
            self.config['master'] = self.options.master

      # Setup file logging!
      self.setup_logfile_logger()

      #caller = salt.cli.caller.Caller(self.config)
      caller = salt.cli.caller.Caller.factory(self.config)

      if self.options.doc:
            caller.print_docs()
            self.exit(os.EX_OK)

      if self.options.grains_run:
            caller.print_grains()
            self.exit(os.EX_OK)

      caller.run()









页: [1]
查看完整版本: salt-call源码分析