zoukankan      html  css  js  c++  java
  • ansible 2.1.0 api 编程

    pdf文档
    https://media.readthedocs.org/pdf/ansible/latest/ansible.pdf

    api介绍
    http://blog.csdn.net/python_tty/article/details/51387667
    http://blog.itpub.net/30109892/viewspace-2063898/
    http://blog.toast38coza.me/custom-ansible-module-hello-world
    http://devopstarter.info/understand-ansible-execution-part01/
    http://docs.ansible.com/ansible/latest/dev_guide/developing_api.html
    http://swatij.me/python/ansible/programmatic-ansible-with-python
    http://www.cnblogs.com/lxmhhy/category/901145.html
    http://www.felixchr.com/2017/02/ansible-python-api-2-run-adhoc-and-collect-result/
    http://www.jeffgeerling.com/blog/creating-custom-dynamic-inventories-ansible
    http://www.jianshu.com/p/8558befb16c1
    http://www.jianshu.com/p/c1af78d75f45
    http://www.jusene.me/2017/04/16/ansible-api/
    http://www.sreguide.com/2017/04/26/ansible/ansible_api/
    http://www.voidcn.com/article/p-yroexafi-bdx.html
    http://zlgcoder.top/
    https://github.com/ansible-semaphore/semaphore/wiki/Installation
    https://github.com/ansiblebook/ansiblebook
    https://github.com/fengxsong/ansible-example/blob/master/ansible_api.py
    https://github.com/geerlingguy/ansible-for-devops
    https://github.com/linuxdynasty/ld-ansible-modules/blob/master/test/cloud/amazon/test_kinesis_stream.py
    https://serversforhackers.com/c/running-ansible-2-programmatically
    https://www.geekhub.cn/a/1193.html
    https://www.mindg.cn/?cat=36
    https://yoncan.github.io

    https://www.jeffgeerling.com/blog/creating-custom-dynamic-inventories-ansible
    https://tech.ga.gov.au/dynamic-inventory-ansible-behind-a-jumpbox-bastion-5c04a3e4b354
    https://pynet.twb-tech.com/blog/ansible/dynamic-inventory.html
    https://adamj.eu/tech/2016/12/04/writing-a-custom-ansible-dynamic-inventory-script/

    /usr/bin/ansible

    if __name__ == '__main__':
    
        display = LastResort()
        cli = None
        me = os.path.basename(sys.argv[0])
    
        try:
            display = Display()
            display.debug("starting run")
    
            sub = None
            try:
                if me.find('-') != -1:
                    target = me.split('-')
                    if len(target) > 1:
                        sub = target[1]
                        myclass = "%sCLI" % sub.capitalize()
                        mycli = getattr(__import__("ansible.cli.%s" % sub, fromlist=[myclass]), myclass)
                elif me == 'ansible':
                    from ansible.cli.adhoc import AdHocCLI as mycli
                    # ansible命令行是调用AdHocCLI类运行
                else:
                    raise AnsibleError("Unknown Ansible alias: %s" % me)
            except ImportError as e:
                if e.message.endswith(' %s' % sub):
                    raise AnsibleError("Ansible sub-program not implemented: %s" % me)
                else:
                    raise
    
            cli = mycli(sys.argv)
            cli.parse()
            exit_code = cli.run()
    
        except AnsibleOptionsError as e:
            cli.parser.print_help()
            display.error(to_unicode(e), wrap_text=False)
            exit_code = 5
        except AnsibleParserError as e:
            display.error(to_unicode(e), wrap_text=False)
            exit_code = 4
    

    /usr/lib/python2.6/site-packages/ansible/cli/adhoc.py

    class AdHocCLI(CLI):
        # AdHocCLI类继承于CLI父类
        ''' code behind ansible ad-hoc cli'''
    
    ......
            loader = DataLoader()
    
            if self.options.vault_password_file:
                # read vault_pass from a file
                vault_pass = CLI.read_vault_password_file(self.options.vault_password_file, loader=loader)
                loader.set_vault_password(vault_pass)
            elif self.options.ask_vault_pass:
                vault_pass = self.ask_vault_passwords()[0]
                loader.set_vault_password(vault_pass)
    
            variable_manager = VariableManager()
            variable_manager.extra_vars = load_extra_vars(loader=loader, options=self.options)
    
            variable_manager.options_vars = load_options_vars(self.options)
    
            inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list=self.options.inventory)
            variable_manager.set_inventory(inventory)
            # 定义loader,variable_manager,inventory
    ......
    
            play_ds = self._play_ds(pattern, self.options.seconds, self.options.poll_interval)
            play = Play().load(play_ds, variable_manager=variable_manager, loader=loader)
            # 定义play_ds,play
    ......
    
            # now create a task queue manager to execute the play
            self._tqm = None
            try:
                self._tqm = TaskQueueManager(
                        inventory=inventory,
                        variable_manager=variable_manager,
                        loader=loader,
                        options=self.options,
                        passwords=passwords,
                        stdout_callback=cb,
                        run_additional_callbacks=C.DEFAULT_LOAD_CALLBACK_PLUGINS,
                        run_tree=run_tree,
                    )
    
                result = self._tqm.run(play)
                # 调用TaskQueueManager类运行play
            finally:
                if self._tqm:
                    self._tqm.cleanup()
                if loader:
                    loader.cleanup_all_tmp_files()
    
            return result
    

    /usr/lib/python2.6/site-packages/ansible/cli/__init__.py

    class CLI(object):
        ''' code behind bin/ansible* programs '''
    
    ......
    
        def normalize_become_options(self):
            ''' this keeps backwards compatibility with sudo/su self.options '''
            self.options.become_ask_pass = self.options.become_ask_pass or self.options.ask_sudo_pass or self.options.ask_su_pass or C.DEFAULT_BECOME_ASK_PASS
            self.options.become_user     = self.options.become_user or self.options.sudo_user or self.options.su_user or C.DEFAULT_BECOME_USER
    
            if self.options.become:
                pass
            elif self.options.sudo:
                self.options.become = True
                self.options.become_method = 'sudo'
            elif self.options.su:
                self.options.become = True
                self.options.become_method = 'su'
    
    ......
    
        @staticmethod
        def base_parser(usage="", output_opts=False, runas_opts=False, meta_opts=False, runtask_opts=False, vault_opts=False, module_opts=False,
                async_opts=False, connect_opts=False, subset_opts=False, check_opts=False, inventory_opts=False, epilog=None, fork_opts=False, runas_prompt_opts=False):
            ''' create an options parser for most ansible scripts '''
    
            # TODO: implement epilog parsing
            #       OptionParser.format_epilog = lambda self, formatter: self.epilog
    
            # base opts
            parser = SortedOptParser(usage, version=CLI.version("%prog"))
            parser.add_option('-v','--verbose', dest='verbosity', default=0, action="count",
                help="verbose mode (-vvv for more, -vvvv to enable connection debugging)")
    
            if inventory_opts:
                parser.add_option('-i', '--inventory-file', dest='inventory',
                    help="specify inventory host path (default=%s) or comma separated host list." % C.DEFAULT_HOST_LIST,
                    default=C.DEFAULT_HOST_LIST, action="callback", callback=CLI.expand_tilde, type=str)
                parser.add_option('--list-hosts', dest='listhosts', action='store_true',
                    help='outputs a list of matching hosts; does not execute anything else')
                parser.add_option('-l', '--limit', default=C.DEFAULT_SUBSET, dest='subset',
                    help='further limit selected hosts to an additional pattern')
    
            if module_opts:
                parser.add_option('-M', '--module-path', dest='module_path', default=None,
                    help="specify path(s) to module library (default=%s)" % C.DEFAULT_MODULE_PATH,
                    action="callback", callback=CLI.expand_tilde, type=str)
            if runtask_opts:
                parser.add_option('-e', '--extra-vars', dest="extra_vars", action="append",
                    help="set additional variables as key=value or YAML/JSON", default=[])
    
            if fork_opts:
                parser.add_option('-f','--forks', dest='forks', default=C.DEFAULT_FORKS, type='int',
                    help="specify number of parallel processes to use (default=%s)" % C.DEFAULT_FORKS)
    
            if vault_opts:
                parser.add_option('--ask-vault-pass', default=C.DEFAULT_ASK_VAULT_PASS, dest='ask_vault_pass', action='store_true',
                    help='ask for vault password')
                parser.add_option('--vault-password-file', default=C.DEFAULT_VAULT_PASSWORD_FILE, dest='vault_password_file',
                    help="vault password file", action="callback", callback=CLI.expand_tilde, type=str)
                parser.add_option('--new-vault-password-file', dest='new_vault_password_file',
                    help="new vault password file for rekey", action="callback", callback=CLI.expand_tilde, type=str)
                parser.add_option('--output', default=None, dest='output_file',
                    help='output file name for encrypt or decrypt; use - for stdout',
                    action="callback", callback=CLI.expand_tilde, type=str)
    
            if subset_opts:
                parser.add_option('-t', '--tags', dest='tags', default='all',
                    help="only run plays and tasks tagged with these values")
                parser.add_option('--skip-tags', dest='skip_tags',
                    help="only run plays and tasks whose tags do not match these values")
    
            if output_opts:
                parser.add_option('-o', '--one-line', dest='one_line', action='store_true',
                    help='condense output')
                parser.add_option('-t', '--tree', dest='tree', default=None,
                    help='log output to this directory')
    
            if connect_opts:
                connect_group = optparse.OptionGroup(parser, "Connection Options", "control as whom and how to connect to hosts")
                connect_group.add_option('-k', '--ask-pass', default=C.DEFAULT_ASK_PASS, dest='ask_pass', action='store_true',
                    help='ask for connection password')
                connect_group.add_option('--private-key','--key-file', default=C.DEFAULT_PRIVATE_KEY_FILE, dest='private_key_file',
                    help='use this file to authenticate the connection')
                connect_group.add_option('-u', '--user', default=C.DEFAULT_REMOTE_USER, dest='remote_user',
                    help='connect as this user (default=%s)' % C.DEFAULT_REMOTE_USER)
                connect_group.add_option('-c', '--connection', dest='connection', default=C.DEFAULT_TRANSPORT,
                    help="connection type to use (default=%s)" % C.DEFAULT_TRANSPORT)
                connect_group.add_option('-T', '--timeout', default=C.DEFAULT_TIMEOUT, type='int', dest='timeout',
                    help="override the connection timeout in seconds (default=%s)" % C.DEFAULT_TIMEOUT)
                connect_group.add_option('--ssh-common-args', default='', dest='ssh_common_args',
                    help="specify common arguments to pass to sftp/scp/ssh (e.g. ProxyCommand)")
                connect_group.add_option('--sftp-extra-args', default='', dest='sftp_extra_args',
                    help="specify extra arguments to pass to sftp only (e.g. -f, -l)")
                connect_group.add_option('--scp-extra-args', default='', dest='scp_extra_args',
                    help="specify extra arguments to pass to scp only (e.g. -l)")
                connect_group.add_option('--ssh-extra-args', default='', dest='ssh_extra_args',
                    help="specify extra arguments to pass to ssh only (e.g. -R)")
    
                parser.add_option_group(connect_group)
    
            runas_group = None
            rg = optparse.OptionGroup(parser, "Privilege Escalation Options", "control how and which user you become as on target hosts")
            if runas_opts:
                runas_group = rg
                # priv user defaults to root later on to enable detecting when this option was given here
                runas_group.add_option("-s", "--sudo", default=C.DEFAULT_SUDO, action="store_true", dest='sudo',
                    help="run operations with sudo (nopasswd) (deprecated, use become)")
                runas_group.add_option('-U', '--sudo-user', dest='sudo_user', default=None,
                                  help='desired sudo user (default=root) (deprecated, use become)')
                runas_group.add_option('-S', '--su', default=C.DEFAULT_SU, action='store_true',
                    help='run operations with su (deprecated, use become)')
                runas_group.add_option('-R', '--su-user', default=None,
                    help='run operations with su as this user (default=%s) (deprecated, use become)' % C.DEFAULT_SU_USER)
    
                # consolidated privilege escalation (become)
                runas_group.add_option("-b", "--become", default=C.DEFAULT_BECOME, action="store_true", dest='become',
                    help="run operations with become (does not imply password prompting)")
                runas_group.add_option('--become-method', dest='become_method', default=C.DEFAULT_BECOME_METHOD, type='choice', choices=C.BECOME_METHODS,
                    help="privilege escalation method to use (default=%s), valid choices: [ %s ]" % (C.DEFAULT_BECOME_METHOD, ' | '.join(C.BECOME_METHODS)))
                runas_group.add_option('--become-user', default=None, dest='become_user', type='string',
                    help='run operations as this user (default=%s)' % C.DEFAULT_BECOME_USER)
    
            if runas_opts or runas_prompt_opts:
                if not runas_group:
                    runas_group = rg
                runas_group.add_option('--ask-sudo-pass', default=C.DEFAULT_ASK_SUDO_PASS, dest='ask_sudo_pass', action='store_true',
                    help='ask for sudo password (deprecated, use become)')
                runas_group.add_option('--ask-su-pass', default=C.DEFAULT_ASK_SU_PASS, dest='ask_su_pass', action='store_true',
                    help='ask for su password (deprecated, use become)')
                runas_group.add_option('-K', '--ask-become-pass', default=False, dest='become_ask_pass', action='store_true',
                    help='ask for privilege escalation password')
    
            if runas_group:
                parser.add_option_group(runas_group)
    
            if async_opts:
                parser.add_option('-P', '--poll', default=C.DEFAULT_POLL_INTERVAL, type='int', dest='poll_interval',
                    help="set the poll interval if using -B (default=%s)" % C.DEFAULT_POLL_INTERVAL)
                parser.add_option('-B', '--background', dest='seconds', type='int', default=0,
                    help='run asynchronously, failing after X seconds (default=N/A)')
    
            if check_opts:
                parser.add_option("-C", "--check", default=False, dest='check', action='store_true',
                    help="don't make any changes; instead, try to predict some of the changes that may occur")
                parser.add_option('--syntax-check', dest='syntax', action='store_true',
                    help="perform a syntax check on the playbook, but do not execute it")
                parser.add_option("-D", "--diff", default=False, dest='diff', action='store_true',
                    help="when changing (small) files and templates, show the differences in those files; works great with --check")
    
    
            if meta_opts:
                parser.add_option('--force-handlers', default=C.DEFAULT_FORCE_HANDLERS, dest='force_handlers', action='store_true',
                    help="run handlers even if a task fails")
                parser.add_option('--flush-cache', dest='flush_cache', action='store_true',
                    help="clear the fact cache")
    
            return parser
    
    # 可以找到options的各项,变量的默认值在/usr/lib/python2.6/site-packages/ansible/constants.py
    # verbosity 
    # inventory '/etc/ansible/hosts'
    # listhosts subset 
    # module_path 
    # extra_vars 
    # forks '5'
    # ask_vault_pass vault_password_file new_vault_password_file 
    # output_file 
    # tags skip_tags 
    # one_line 
    # tree 
    # ask_pass private_key_file 
    # remote_user 
    # connection 
    # timeout  
    # ssh_common_args sftp_extra_args scp_extra_args ssh_extra_args 
    # sudo sudo_user 
    # become become_method become_user 
    # ask_sudo_pass ask_su_pass become_ask_pass 
    # poll_interval seconds check syntax diff force_handlers flush_cache
    

    /usr/lib/python2.6/site-packages/ansible/constants.py

    # sections in config file
    DEFAULTS='defaults'
    
    # FIXME: add deprecation warning when these get set
    #### DEPRECATED VARS #### 
    # use more sanely named 'inventory'
    DEPRECATED_HOST_LIST  = get_config(p, DEFAULTS, 'hostfile', 'ANSIBLE_HOSTS', '/etc/ansible/hosts', ispath=True)
    # this is not used since 0.5 but people might still have in config
    DEFAULT_PATTERN           = get_config(p, DEFAULTS, 'pattern', None, None)
    
    #### GENERALLY CONFIGURABLE THINGS ####
    DEFAULT_DEBUG             = get_config(p, DEFAULTS, 'debug',            'ANSIBLE_DEBUG',            False, boolean=True)
    DEFAULT_HOST_LIST         = get_config(p, DEFAULTS,'inventory', 'ANSIBLE_INVENTORY', DEPRECATED_HOST_LIST, ispath=True)
    DEFAULT_MODULE_PATH       = get_config(p, DEFAULTS, 'library',          'ANSIBLE_LIBRARY',          None, ispathlist=True)
    DEFAULT_ROLES_PATH        = get_config(p, DEFAULTS, 'roles_path',       'ANSIBLE_ROLES_PATH',       '/etc/ansible/roles', ispathlist=True)
    DEFAULT_REMOTE_TMP        = get_config(p, DEFAULTS, 'remote_tmp',       'ANSIBLE_REMOTE_TEMP',      '$HOME/.ansible/tmp')
    DEFAULT_LOCAL_TMP         = get_config(p, DEFAULTS, 'local_tmp',        'ANSIBLE_LOCAL_TEMP',      '$HOME/.ansible/tmp', istmppath=True)
    DEFAULT_MODULE_NAME       = get_config(p, DEFAULTS, 'module_name',      None,                       'command')
    DEFAULT_FORKS             = get_config(p, DEFAULTS, 'forks',            'ANSIBLE_FORKS',            5, integer=True)
    DEFAULT_MODULE_ARGS       = get_config(p, DEFAULTS, 'module_args',      'ANSIBLE_MODULE_ARGS',      '')
    DEFAULT_MODULE_LANG       = get_config(p, DEFAULTS, 'module_lang',      'ANSIBLE_MODULE_LANG',      os.getenv('LANG', 'en_US.UTF-8'))
    DEFAULT_MODULE_SET_LOCALE = get_config(p, DEFAULTS, 'module_set_locale','ANSIBLE_MODULE_SET_LOCALE',True, boolean=True)
    DEFAULT_MODULE_COMPRESSION= get_config(p, DEFAULTS, 'module_compression', None, 'ZIP_DEFLATED')
    DEFAULT_TIMEOUT           = get_config(p, DEFAULTS, 'timeout',          'ANSIBLE_TIMEOUT',          10, integer=True)
    DEFAULT_POLL_INTERVAL     = get_config(p, DEFAULTS, 'poll_interval',    'ANSIBLE_POLL_INTERVAL',    15, integer=True)
    DEFAULT_REMOTE_USER       = get_config(p, DEFAULTS, 'remote_user',      'ANSIBLE_REMOTE_USER',      None)
    DEFAULT_ASK_PASS          = get_config(p, DEFAULTS, 'ask_pass',  'ANSIBLE_ASK_PASS',    False, boolean=True)
    DEFAULT_PRIVATE_KEY_FILE  = get_config(p, DEFAULTS, 'private_key_file', 'ANSIBLE_PRIVATE_KEY_FILE', None, ispath=True)
    DEFAULT_REMOTE_PORT       = get_config(p, DEFAULTS, 'remote_port',      'ANSIBLE_REMOTE_PORT',      None, integer=True)
    DEFAULT_ASK_VAULT_PASS    = get_config(p, DEFAULTS, 'ask_vault_pass',    'ANSIBLE_ASK_VAULT_PASS',    False, boolean=True)
    DEFAULT_VAULT_PASSWORD_FILE = get_config(p, DEFAULTS, 'vault_password_file', 'ANSIBLE_VAULT_PASSWORD_FILE', None, ispath=True)
    DEFAULT_TRANSPORT         = get_config(p, DEFAULTS, 'transport',        'ANSIBLE_TRANSPORT',        'smart')
    DEFAULT_SCP_IF_SSH        = get_config(p, 'ssh_connection', 'scp_if_ssh',       'ANSIBLE_SCP_IF_SSH',       False, boolean=True)
    DEFAULT_SFTP_BATCH_MODE   = get_config(p, 'ssh_connection', 'sftp_batch_mode', 'ANSIBLE_SFTP_BATCH_MODE', True, boolean=True)
    DEFAULT_MANAGED_STR       = get_config(p, DEFAULTS, 'ansible_managed',  None,           'Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}')
    DEFAULT_SYSLOG_FACILITY   = get_config(p, DEFAULTS, 'syslog_facility',  'ANSIBLE_SYSLOG_FACILITY', 'LOG_USER')
    DEFAULT_KEEP_REMOTE_FILES = get_config(p, DEFAULTS, 'keep_remote_files', 'ANSIBLE_KEEP_REMOTE_FILES', False, boolean=True)
    DEFAULT_HASH_BEHAVIOUR    = get_config(p, DEFAULTS, 'hash_behaviour', 'ANSIBLE_HASH_BEHAVIOUR', 'replace')
    DEFAULT_PRIVATE_ROLE_VARS = get_config(p, DEFAULTS, 'private_role_vars', 'ANSIBLE_PRIVATE_ROLE_VARS', False, boolean=True)
    DEFAULT_JINJA2_EXTENSIONS = get_config(p, DEFAULTS, 'jinja2_extensions', 'ANSIBLE_JINJA2_EXTENSIONS', None)
    DEFAULT_EXECUTABLE        = get_config(p, DEFAULTS, 'executable', 'ANSIBLE_EXECUTABLE', '/bin/sh')
    DEFAULT_GATHERING         = get_config(p, DEFAULTS, 'gathering', 'ANSIBLE_GATHERING', 'implicit').lower()
    
    DEFAULT_GATHER_SUBSET     = get_config(p, DEFAULTS, 'gather_subset', 'ANSIBLE_GATHER_SUBSET', 'all').lower()
    DEFAULT_LOG_PATH          = get_config(p, DEFAULTS, 'log_path',           'ANSIBLE_LOG_PATH', '', ispath=True)
    DEFAULT_FORCE_HANDLERS    = get_config(p, DEFAULTS, 'force_handlers', 'ANSIBLE_FORCE_HANDLERS', False, boolean=True)
    DEFAULT_INVENTORY_IGNORE  = get_config(p, DEFAULTS, 'inventory_ignore_extensions', 'ANSIBLE_INVENTORY_IGNORE', ["~", ".orig", ".bak", ".ini", ".cfg", ".retry", ".pyc", ".pyo"], islist=True)
    DEFAULT_VAR_COMPRESSION_LEVEL = get_config(p, DEFAULTS, 'var_compression_level', 'ANSIBLE_VAR_COMPRESSION_LEVEL', 0, integer=True)
    
    # static includes
    DEFAULT_TASK_INCLUDES_STATIC    = get_config(p, DEFAULTS, 'task_includes_static', 'ANSIBLE_TASK_INCLUDES_STATIC', False, boolean=True)
    DEFAULT_HANDLER_INCLUDES_STATIC = get_config(p, DEFAULTS, 'handler_includes_static', 'ANSIBLE_HANDLER_INCLUDES_STATIC', False, boolean=True)
    
    # disclosure
    DEFAULT_NO_LOG           = get_config(p, DEFAULTS, 'no_log', 'ANSIBLE_NO_LOG', False, boolean=True)
    DEFAULT_NO_TARGET_SYSLOG   = get_config(p, DEFAULTS, 'no_target_syslog', 'ANSIBLE_NO_TARGET_SYSLOG', False, boolean=True)
    ALLOW_WORLD_READABLE_TMPFILES = get_config(p, DEFAULTS, 'allow_world_readable_tmpfiles', None, False, boolean=True)
    
    # selinux
    DEFAULT_SELINUX_SPECIAL_FS = get_config(p, 'selinux', 'special_context_filesystems', None, 'fuse, nfs, vboxsf, ramfs', islist=True)
    DEFAULT_LIBVIRT_LXC_NOSECLABEL = get_config(p, 'selinux', 'libvirt_lxc_noseclabel', 'LIBVIRT_LXC_NOSECLABEL', False, boolean=True)
    
    ### PRIVILEGE ESCALATION ###
    # Backwards Compat
    DEFAULT_SU                = get_config(p, DEFAULTS, 'su', 'ANSIBLE_SU', False, boolean=True)
    DEFAULT_SU_USER           = get_config(p, DEFAULTS, 'su_user', 'ANSIBLE_SU_USER', 'root')
    DEFAULT_SU_EXE            = get_config(p, DEFAULTS, 'su_exe', 'ANSIBLE_SU_EXE', None)
    DEFAULT_SU_FLAGS          = get_config(p, DEFAULTS, 'su_flags', 'ANSIBLE_SU_FLAGS', None)
    DEFAULT_ASK_SU_PASS       = get_config(p, DEFAULTS, 'ask_su_pass', 'ANSIBLE_ASK_SU_PASS', False, boolean=True)
    DEFAULT_SUDO              = get_config(p, DEFAULTS, 'sudo', 'ANSIBLE_SUDO', False, boolean=True)
    DEFAULT_SUDO_USER         = get_config(p, DEFAULTS, 'sudo_user',        'ANSIBLE_SUDO_USER',        'root')
    DEFAULT_SUDO_EXE          = get_config(p, DEFAULTS, 'sudo_exe', 'ANSIBLE_SUDO_EXE', None)
    DEFAULT_SUDO_FLAGS        = get_config(p, DEFAULTS, 'sudo_flags', 'ANSIBLE_SUDO_FLAGS', '-H -S -n')
    DEFAULT_ASK_SUDO_PASS     = get_config(p, DEFAULTS, 'ask_sudo_pass',    'ANSIBLE_ASK_SUDO_PASS',    False, boolean=True)
    
    # Become
    BECOME_ERROR_STRINGS      = {'sudo': 'Sorry, try again.', 'su': 'Authentication failure', 'pbrun': '', 'pfexec': '', 'runas': '', 'doas': 'Permission denied', 'dzdo': ''} #FIXME: deal with i18n
    BECOME_MISSING_STRINGS    = {'sudo': 'sorry, a password is required to run sudo', 'su': '', 'pbrun': '', 'pfexec': '', 'runas': '', 'doas': 'Authorization required', 'dzdo': ''} #FIXME: deal with i18n
    BECOME_METHODS            = ['sudo','su','pbrun','pfexec','runas','doas','dzdo']
    BECOME_ALLOW_SAME_USER    = get_config(p, 'privilege_escalation', 'become_allow_same_user', 'ANSIBLE_BECOME_ALLOW_SAME_USER', False, boolean=True)
    DEFAULT_BECOME_METHOD     = get_config(p, 'privilege_escalation', 'become_method', 'ANSIBLE_BECOME_METHOD','sudo' if DEFAULT_SUDO else 'su' if DEFAULT_SU else 'sudo' ).lower()
    DEFAULT_BECOME            = get_config(p, 'privilege_escalation', 'become', 'ANSIBLE_BECOME',False, boolean=True)
    DEFAULT_BECOME_USER       = get_config(p, 'privilege_escalation', 'become_user', 'ANSIBLE_BECOME_USER', 'root')
    DEFAULT_BECOME_EXE        = get_config(p, 'privilege_escalation', 'become_exe', 'ANSIBLE_BECOME_EXE', None)
    DEFAULT_BECOME_FLAGS      = get_config(p, 'privilege_escalation', 'become_flags', 'ANSIBLE_BECOME_FLAGS', None)
    DEFAULT_BECOME_ASK_PASS   = get_config(p, 'privilege_escalation', 'become_ask_pass', 'ANSIBLE_BECOME_ASK_PASS', False, boolean=True)
    
    # PLUGINS
    
    # Modules that can optimize with_items loops into a single call.  Currently
    # these modules must (1) take a "name" or "pkg" parameter that is a list.  If
    # the module takes both, bad things could happen.
    # In the future we should probably generalize this even further
    # (mapping of param: squash field)
    DEFAULT_SQUASH_ACTIONS         = get_config(p, DEFAULTS, 'squash_actions',     'ANSIBLE_SQUASH_ACTIONS', "apk, apt, dnf, package, pacman, pkgng, yum, zypper", islist=True)
    # paths
    DEFAULT_ACTION_PLUGIN_PATH     = get_config(p, DEFAULTS, 'action_plugins',     'ANSIBLE_ACTION_PLUGINS', '~/.ansible/plugins/action:/usr/share/ansible/plugins/action', ispathlist=True)
    DEFAULT_CACHE_PLUGIN_PATH      = get_config(p, DEFAULTS, 'cache_plugins',      'ANSIBLE_CACHE_PLUGINS', '~/.ansible/plugins/cache:/usr/share/ansible/plugins/cache', ispathlist=True)
    DEFAULT_CALLBACK_PLUGIN_PATH   = get_config(p, DEFAULTS, 'callback_plugins',   'ANSIBLE_CALLBACK_PLUGINS', '~/.ansible/plugins/callback:/usr/share/ansible/plugins/callback', ispathlist=True)
    DEFAULT_CONNECTION_PLUGIN_PATH = get_config(p, DEFAULTS, 'connection_plugins', 'ANSIBLE_CONNECTION_PLUGINS', '~/.ansible/plugins/connection:/usr/share/ansible/plugins/connection', ispathlist=True)
    DEFAULT_LOOKUP_PLUGIN_PATH     = get_config(p, DEFAULTS, 'lookup_plugins',     'ANSIBLE_LOOKUP_PLUGINS', '~/.ansible/plugins/lookup:/usr/share/ansible/plugins/lookup', ispathlist=True)
    DEFAULT_INVENTORY_PLUGIN_PATH  = get_config(p, DEFAULTS, 'inventory_plugins',  'ANSIBLE_INVENTORY_PLUGINS', '~/.ansible/plugins/inventory:/usr/share/ansible/plugins/inventory', ispathlist=True)
    DEFAULT_VARS_PLUGIN_PATH       = get_config(p, DEFAULTS, 'vars_plugins',       'ANSIBLE_VARS_PLUGINS', '~/.ansible/plugins/vars:/usr/share/ansible/plugins/vars', ispathlist=True)
    DEFAULT_FILTER_PLUGIN_PATH     = get_config(p, DEFAULTS, 'filter_plugins',     'ANSIBLE_FILTER_PLUGINS', '~/.ansible/plugins/filter:/usr/share/ansible/plugins/filter', ispathlist=True)
    DEFAULT_TEST_PLUGIN_PATH       = get_config(p, DEFAULTS, 'test_plugins',       'ANSIBLE_TEST_PLUGINS', '~/.ansible/plugins/test:/usr/share/ansible/plugins/test', ispathlist=True)
    DEFAULT_STRATEGY_PLUGIN_PATH   = get_config(p, DEFAULTS, 'strategy_plugins',   'ANSIBLE_STRATEGY_PLUGINS', '~/.ansible/plugins/strategy:/usr/share/ansible/plugins/strategy', ispathlist=True)
    DEFAULT_STDOUT_CALLBACK        = get_config(p, DEFAULTS, 'stdout_callback',    'ANSIBLE_STDOUT_CALLBACK', 'default')
    # cache
    CACHE_PLUGIN                   = get_config(p, DEFAULTS, 'fact_caching', 'ANSIBLE_CACHE_PLUGIN', 'memory')
    CACHE_PLUGIN_CONNECTION        = get_config(p, DEFAULTS, 'fact_caching_connection', 'ANSIBLE_CACHE_PLUGIN_CONNECTION', None)
    CACHE_PLUGIN_PREFIX            = get_config(p, DEFAULTS, 'fact_caching_prefix', 'ANSIBLE_CACHE_PLUGIN_PREFIX', 'ansible_facts')
    CACHE_PLUGIN_TIMEOUT           = get_config(p, DEFAULTS, 'fact_caching_timeout', 'ANSIBLE_CACHE_PLUGIN_TIMEOUT', 24 * 60 * 60, integer=True)
    
    # Display
    ANSIBLE_FORCE_COLOR            = get_config(p, DEFAULTS, 'force_color', 'ANSIBLE_FORCE_COLOR', None, boolean=True)
    ANSIBLE_NOCOLOR                = get_config(p, DEFAULTS, 'nocolor', 'ANSIBLE_NOCOLOR', None, boolean=True)
    ANSIBLE_NOCOWS                 = get_config(p, DEFAULTS, 'nocows', 'ANSIBLE_NOCOWS', None, boolean=True)
    ANSIBLE_COW_SELECTION          = get_config(p, DEFAULTS, 'cow_selection', 'ANSIBLE_COW_SELECTION', 'default')
    ANSIBLE_COW_WHITELIST          = get_config(p, DEFAULTS, 'cow_whitelist', 'ANSIBLE_COW_WHITELIST', DEFAULT_COW_WHITELIST, islist=True)
    DISPLAY_ARGS_TO_STDOUT         = get_config(p, DEFAULTS, 'display_args_to_stdout', 'DISPLAY_ARGS_TO_STDOUT', False, boolean=True)
    DISPLAY_SKIPPED_HOSTS          = get_config(p, DEFAULTS, 'display_skipped_hosts', 'DISPLAY_SKIPPED_HOSTS', True, boolean=True)
    DEFAULT_UNDEFINED_VAR_BEHAVIOR = get_config(p, DEFAULTS, 'error_on_undefined_vars', 'ANSIBLE_ERROR_ON_UNDEFINED_VARS', True, boolean=True)
    HOST_KEY_CHECKING              = get_config(p, DEFAULTS, 'host_key_checking',  'ANSIBLE_HOST_KEY_CHECKING',    True, boolean=True)
    SYSTEM_WARNINGS                = get_config(p, DEFAULTS, 'system_warnings', 'ANSIBLE_SYSTEM_WARNINGS', True, boolean=True)
    DEPRECATION_WARNINGS           = get_config(p, DEFAULTS, 'deprecation_warnings', 'ANSIBLE_DEPRECATION_WARNINGS', True, boolean=True)
    DEFAULT_CALLABLE_WHITELIST     = get_config(p, DEFAULTS, 'callable_whitelist', 'ANSIBLE_CALLABLE_WHITELIST', [], islist=True)
    COMMAND_WARNINGS               = get_config(p, DEFAULTS, 'command_warnings', 'ANSIBLE_COMMAND_WARNINGS', True, boolean=True)
    DEFAULT_LOAD_CALLBACK_PLUGINS  = get_config(p, DEFAULTS, 'bin_ansible_callbacks', 'ANSIBLE_LOAD_CALLBACK_PLUGINS', False, boolean=True)
    DEFAULT_CALLBACK_WHITELIST     = get_config(p, DEFAULTS, 'callback_whitelist', 'ANSIBLE_CALLBACK_WHITELIST', [], islist=True)
    RETRY_FILES_ENABLED            = get_config(p, DEFAULTS, 'retry_files_enabled', 'ANSIBLE_RETRY_FILES_ENABLED', True, boolean=True)
    RETRY_FILES_SAVE_PATH          = get_config(p, DEFAULTS, 'retry_files_save_path', 'ANSIBLE_RETRY_FILES_SAVE_PATH', None, ispath=True)
    DEFAULT_NULL_REPRESENTATION    = get_config(p, DEFAULTS, 'null_representation', 'ANSIBLE_NULL_REPRESENTATION', None, isnone=True)
    DISPLAY_ARGS_TO_STDOUT         = get_config(p, DEFAULTS, 'display_args_to_stdout', 'ANSIBLE_DISPLAY_ARGS_TO_STDOUT', False, boolean=True)
    MAX_FILE_SIZE_FOR_DIFF         = get_config(p, DEFAULTS, 'max_diff_size', 'ANSIBLE_MAX_DIFF_SIZE', 1024*1024, integer=True)
    
    # CONNECTION RELATED
    ANSIBLE_SSH_ARGS               = get_config(p, 'ssh_connection', 'ssh_args', 'ANSIBLE_SSH_ARGS', '-o ControlMaster=auto -o ControlPersist=60s')
    ANSIBLE_SSH_CONTROL_PATH       = get_config(p, 'ssh_connection', 'control_path', 'ANSIBLE_SSH_CONTROL_PATH', "%(directory)s/ansible-ssh-%%h-%%p-%%r")
    ANSIBLE_SSH_PIPELINING         = get_config(p, 'ssh_connection', 'pipelining', 'ANSIBLE_SSH_PIPELINING', False, boolean=True)
    ANSIBLE_SSH_RETRIES            = get_config(p, 'ssh_connection', 'retries', 'ANSIBLE_SSH_RETRIES', 0, integer=True)
    PARAMIKO_RECORD_HOST_KEYS      = get_config(p, 'paramiko_connection', 'record_host_keys', 'ANSIBLE_PARAMIKO_RECORD_HOST_KEYS', True, boolean=True)
    PARAMIKO_PROXY_COMMAND         = get_config(p, 'paramiko_connection', 'proxy_command', 'ANSIBLE_PARAMIKO_PROXY_COMMAND', None)
    
    
    # obsolete -- will be formally removed
    ZEROMQ_PORT                    = get_config(p, 'fireball_connection', 'zeromq_port', 'ANSIBLE_ZEROMQ_PORT', 5099, integer=True)
    ACCELERATE_PORT                = get_config(p, 'accelerate', 'accelerate_port', 'ACCELERATE_PORT', 5099, integer=True)
    ACCELERATE_TIMEOUT             = get_config(p, 'accelerate', 'accelerate_timeout', 'ACCELERATE_TIMEOUT', 30, integer=True)
    ACCELERATE_CONNECT_TIMEOUT     = get_config(p, 'accelerate', 'accelerate_connect_timeout', 'ACCELERATE_CONNECT_TIMEOUT', 1.0, floating=True)
    ACCELERATE_DAEMON_TIMEOUT      = get_config(p, 'accelerate', 'accelerate_daemon_timeout', 'ACCELERATE_DAEMON_TIMEOUT', 30, integer=True)
    ACCELERATE_KEYS_DIR            = get_config(p, 'accelerate', 'accelerate_keys_dir', 'ACCELERATE_KEYS_DIR', '~/.fireball.keys')
    ACCELERATE_KEYS_DIR_PERMS      = get_config(p, 'accelerate', 'accelerate_keys_dir_perms', 'ACCELERATE_KEYS_DIR_PERMS', '700')
    ACCELERATE_KEYS_FILE_PERMS     = get_config(p, 'accelerate', 'accelerate_keys_file_perms', 'ACCELERATE_KEYS_FILE_PERMS', '600')
    ACCELERATE_MULTI_KEY           = get_config(p, 'accelerate', 'accelerate_multi_key', 'ACCELERATE_MULTI_KEY', False, boolean=True)
    PARAMIKO_PTY                   = get_config(p, 'paramiko_connection', 'pty', 'ANSIBLE_PARAMIKO_PTY', True, boolean=True)
    
    # galaxy related
    GALAXY_SERVER                  = get_config(p, 'galaxy', 'server', 'ANSIBLE_GALAXY_SERVER', 'https://galaxy.ansible.com')
    GALAXY_IGNORE_CERTS            = get_config(p, 'galaxy', 'ignore_certs', 'ANSIBLE_GALAXY_IGNORE', False, boolean=True)
    # this can be configured to blacklist SCMS but cannot add new ones unless the code is also updated
    GALAXY_SCMS                    = get_config(p, 'galaxy', 'scms', 'ANSIBLE_GALAXY_SCMS', 'git, hg', islist=True)
    
    # characters included in auto-generated passwords
    DEFAULT_PASSWORD_CHARS = ascii_letters + digits + ".,:-_"
    STRING_TYPE_FILTERS = get_config(p, 'jinja2', 'dont_type_filters', 'ANSIBLE_STRING_TYPE_FILTERS', ['string', 'to_json', 'to_nice_json', 'to_yaml', 'ppretty', 'json'], islist=True )
    
    # colors
    COLOR_HIGHLIGHT   = get_config(p, 'colors', 'highlight', 'ANSIBLE_COLOR_HIGHLIGHT', 'white')
    COLOR_VERBOSE     = get_config(p, 'colors', 'verbose', 'ANSIBLE_COLOR_VERBOSE', 'blue')
    COLOR_WARN        = get_config(p, 'colors', 'warn', 'ANSIBLE_COLOR_WARN', 'bright purple')
    COLOR_ERROR       = get_config(p, 'colors', 'error', 'ANSIBLE_COLOR_ERROR', 'red')
    COLOR_DEBUG       = get_config(p, 'colors', 'debug', 'ANSIBLE_COLOR_DEBUG', 'dark gray')
    COLOR_DEPRECATE   = get_config(p, 'colors', 'deprecate', 'ANSIBLE_COLOR_DEPRECATE', 'purple')
    COLOR_SKIP        = get_config(p, 'colors', 'skip', 'ANSIBLE_COLOR_SKIP', 'cyan')
    COLOR_UNREACHABLE = get_config(p, 'colors', 'unreachable', 'ANSIBLE_COLOR_UNREACHABLE', 'bright red')
    COLOR_OK          = get_config(p, 'colors', 'ok', 'ANSIBLE_COLOR_OK', 'green')
    COLOR_CHANGED     = get_config(p, 'colors', 'ok', 'ANSIBLE_COLOR_CHANGED', 'yellow')
    COLOR_DIFF_ADD    = get_config(p, 'colors', 'diff_add', 'ANSIBLE_COLOR_DIFF_ADD', 'green')
    COLOR_DIFF_REMOVE = get_config(p, 'colors', 'diff_remove', 'ANSIBLE_COLOR_DIFF_REMOVE', 'red')
    COLOR_DIFF_LINES  = get_config(p, 'colors', 'diff_lines', 'ANSIBLE_COLOR_DIFF_LINES', 'cyan')
    
    # diff
    DIFF_CONTEXT = get_config(p, 'diff', 'context', 'ANSIBLE_DIFF_CONTEXT', 3, integer=True)
    
    # non-configurable things
    MODULE_REQUIRE_ARGS       = ['command', 'shell', 'raw', 'script']
    MODULE_NO_JSON            = ['command', 'shell', 'raw']
    DEFAULT_BECOME_PASS       = None
    DEFAULT_SUDO_PASS         = None
    DEFAULT_REMOTE_PASS       = None
    DEFAULT_SUBSET            = None
    DEFAULT_SU_PASS           = None
    VAULT_VERSION_MIN         = 1.0
    VAULT_VERSION_MAX         = 1.0
    TREE_DIR                  = None
    LOCALHOST                 = frozenset(['127.0.0.1', 'localhost', '::1'])
    # module search
    BLACKLIST_EXTS = ('.pyc', '.swp', '.bak', '~', '.rpm', '.md', '.txt')
    IGNORE_FILES = [ "COPYING", "CONTRIBUTING", "LICENSE", "README", "VERSION", "GUIDELINES", "test-docs.sh"]
    
  • 相关阅读:
    Azure SQL Database (1) 用户手册
    Windows Azure Web Site (17) Azure Web Site 固定公网IP地址
    MongoDB数据文件内部结构
    压缩 MongoDB 的数据文件
    服务器如何选择网络带宽(转)
    刀片服务器和磁盘阵列卡(RAID)技术---永和维护(转)
    Solr打分出错
    Solr添加SolrDocument报错
    解决Windows Git Bash中文乱码问题
    HAProxy的独门武器:ebtree
  • 原文地址:https://www.cnblogs.com/liujitao79/p/4748476.html
Copyright © 2011-2022 走看看