设为首页 收藏本站
查看: 1265|回复: 0

[经验分享] 2、Ansible配置文件详解

[复制链接]

尚未签到

发表于 2018-1-2 14:03:09 | 显示全部楼层 |阅读模式
  0.配置文件
  两个核心文件:ansible.cfg和hosts文件,默认都存放在/etc/ansible目录下。
  ansible.cfg:主要设置一些ansible初始化的信息,比如日志存放路径、模块、插件等配置信息
  hosts:机器清单,进行分组管理
  1.ansible.cfg
  # config file for ansible -- http://ansible.com/
  # ==============================================
  # nearly all parameters can beoverridden in ansible-playbook
  # or with command line flags. ansible will read ANSIBLE_CONFIG,
  # ansible.cfg in the current working directory, .ansible.cfg in
  # the home directory or /etc/ansible/ansible.cfg, whichever it
  # finds first
[defaults]   --->通用默认配置

  # some basic defaultvalues...
  inventory      = /etc/ansible/hosts     这个是默认库文件位置,脚本,或者存放可通信主机的目录
  #library        =/usr/share/my_modules/   Ansible默认搜寻模块的位置
  remote_tmp     = $HOME/.ansible/tmp   Ansible 通过远程传输模块到远程主机,然后远程执行,执行后在清理现场.在有些场景下,你也许想使用默认路径希望像更换补丁一样使用
  pattern        = *    如果没有提供“hosts”节点,这是playbook要通信的默认主机组.默认值是对所有主机通信
  forks          = 5    在与主机通信时的默认并行进程数 ,默认是5d
  poll_interval  = 15    当具体的poll interval 没有定义时,多少时间回查一下这些任务的状态, 默认值是5秒
  sudo_user      = root   sudo使用的默认用户 ,默认是root
  #ask_sudo_pass = True   用来控制Ansible playbook 在执行sudo之前是否询问sudo密码.默认为no
  #ask_pass      = True    控制Ansible playbook 是否会自动默认弹出密码
  transport      = smart   通信机制.默认 值为’smart’。如果本地系统支持 ControlPersist技术的话,将会使用(基于OpenSSH)‘ssh’,如果不支持讲使用‘paramiko’.其他传输选项包括‘local’, ‘chroot’,’jail’等等
  #remote_port    = 22    远程SSH端口。 默认是22
  module_lang    = C   模块和系统之间通信的计算机语言,默认是C语言
  # plays will gather facts by default,which contain information about
  # the remote system.
  #
  # smart - gather by default, but don't regatherif already gathered
  # implicit - gather by default, turn offwith gather_facts: False
  # explicit - do not gatherby default, must say gather_facts: True
  gathering = implicit  控制默认facts收集(远程系统变量). 默认值为’implicit’, 每一次play,facts都会被收集
  # additional paths to search forroles in, colon separated
  #roles_path    = /etc/ansible/roles   roles 路径指的是’roles/’下的额外目录,用于playbook搜索Ansibleroles
  # uncomment thisto disable SSH key host checking
  #host_key_checking = False    检查主机密钥
  # change this foralternative sudo implementations
  sudo_exe = sudo     如果在其他远程主机上使用另一种方式执sudu操作.可以使用该参数进行更换
  # what flags to pass tosudo   传递sudo之外的参数
  #sudo_flags = -H
  # SSH timeout    SSH超时时间
  timeout = 10
  # defaultuser to use for playbooks ifuser is not specified
  # (/usr/bin/ansible will use current user as default)
  #remote_user = root   使用/usr/bin/ansible-playbook链接的默认用户名,如果不指定,会使用当前登录的用户名
  # logging isoff by default unless thispath is defined
  # if so defined, consider logrotate
  #log_path = /var/log/ansible.log     日志文件存放路径
  # defaultmodule name for /usr/bin/ansible
  #module_name = command     ansible命令执行默认的模块
  # use thisshell for commands executed under sudo
  # you may need to change this to bin/bash inrare instances
  # if sudo is constrained
  #executable = /bin/sh     在sudo环境下产生一个shell交互接口.用户只在/bin/bash的或者sudo限制的一些场景中需要修改
  # ifinventory variables overlap, does the higher precedence one win
  # or are hash values merged together? The default is 'replace'but
  # this can also be set to 'merge'.
  #hash_behaviour = replace    特定的优先级覆盖变量
  # list any Jinja2 extensionsto enable here:
  #jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n      允许开启Jinja2拓展模块
  # if set,always use this privatekey file for authentication, same as
  # if passing --private-key toansible or ansible-playbook
  #private_key_file = /path/to/file        私钥文件存储位置
  # format of string{{ ansible_managed }} available within Jinja2
  # templates indicates to users editing templates files will be replaced.
  # replacing {file}, {host} and {uid} and strftime codes with proper values.
  ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by{uid} on {host}   这个设置可以告知用户,Ansible修改了一个文件,并且手动写入的内容可能已经被覆盖.
  # by default,ansible-playbook will display "Skipping [host]" ifit determines a task
  # should not be run on a host.  Set thisto "False" ifyou don't want to see these "Skipping"
  # messages. NOTE: the task header will still be shown regardless of whether ornot the
  # task is skipped.
  #display_skipped_hosts = True     显示任何跳过任务的状态 ,默认是显示
  # by default (asof 1.3), Ansible will raise errors when attempting todereference
  # Jinja2 variables that are not set intemplates or action lines. Uncomment this line
  # to revert the behavior to pre-1.3.
  #error_on_undefined_vars = False      如果所引用的变量名称错误的话, 将会导致ansible在执行步骤上失败
  # by default (asof 1.6), Ansible may display warnings based on the configurationof the
  # system running ansible itself. This may include warnings about 3rd partypackages or
  # other conditions that should be resolved ifpossible.
  # to disable these warnings, set thefollowing value to False:
  #system_warnings = True    允许禁用系统运行ansible相关的潜在问题警告
  # by default (asof 1.4), Ansible may display deprecation warnings forlanguage
  # features that should no longer be used and will be removed infuture versions.
  # to disable these warnings, set thefollowing value to False:
  #deprecation_warnings = True     允许在ansible-playbook输出结果中禁用“不建议使用”警告
  # (asof 1.8), Ansible can optionally warn when usage of the shell and
  # command module appear to be simplified by using adefault Ansible module
  # instead.  These warnings can besilenced by adjusting the following
  # setting or adding warn=yes or warn=no to the end of the command line
  # parameter string. This will for example suggest usingthe git module
  # instead of shelling out to the gitcommand.
  # command_warnings = False    当shell和命令行模块被默认模块简化的时,Ansible 将默认发出警告
  # setplugin path directories here, separate with colons
  action_plugins     = /usr/share/ansible_plugins/action_plugins
  callback_plugins   =/usr/share/ansible_plugins/callback_plugins
  connection_plugins = /usr/share/ansible_plugins/connection_plugins
  lookup_plugins     =/usr/share/ansible_plugins/lookup_plugins
  vars_plugins       =/usr/share/ansible_plugins/vars_plugins
  filter_plugins     =/usr/share/ansible_plugins/filter_plugins
  # by defaultcallbacks are not loaded for/bin/ansible, enable this ifyou
  # want, for example, a notification or loggingcallback to also apply to
  # /bin/ansible runs
  #bin_ansible_callbacks = False    用来控制callback插件是否在运行 /usr/bin/ansible 的时候被加载. 这个模块将用于命令行的日志系统,发出通知等特性
  # don't likecows?  that'sunfortunate.
  # set to 1 ifyou don't want cowsay support or export ANSIBLE_NOCOWS=1
  #nocows = 1   默认ansible可以调用一些cowsay的特性   开启/禁用:0/1
  # don't likecolors either?
  # set to 1 ifyou don't want colors, or export ANSIBLE_NOCOLOR=1
  #nocolor = 1 输出带上颜色区别, 开启/关闭:0/1
  # the CA certificate path usedfor validating SSL certs. This path
  # should exist on the controlling node, not the target nodes
  # common locations:
  # RHEL/CentOS: /etc/pki/tls/certs/ca-bundle.crt
  # Fedora     :/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
  # Ubuntu     :/usr/share/ca-certificates/cacert.org/cacert.org.crt
  #ca_file_path =
  # the http user-agent stringto use when fetching urls. Some web server
  # operators block the default urllib useragent as it isfrequently used
  # by malicious attacks/scripts, so we set it tosomething unique to
  # avoid issues.
  #http_user_agent = ansible-agent
  # if setto a persistent type (not 'memory', forexample 'redis') fact values
  # from previous runs in Ansible willbe stored.  This may be useful when
  # wanting to use, for example, IP information fromone group of servers
  # without having to talk to them in the sameplaybook run to get their
  # current IP information.
  fact_caching = memory
  # retry files
  #retry_files_enabled = False
  #retry_files_save_path = ~/.ansible-retry
[privilege_escalation]

  #become=True
  #become_method=sudo
  #become_user=root
  #become_ask_pass=False
[paramiko_connection]

  # uncomment thisline to cause the paramiko connection plugin to not record newhost
  # keys encountered.  Increasesperformance on new host additions.  Setting works independently of the
  # host key checking setting above.
  #record_host_keys=False
  # by default,Ansible requests a pseudo-terminal for commandsexecuted under sudo. Uncomment this
  # line to disable this behaviour.
  #pty=False
[ssh_connection]

  # ssh arguments to use
  # Leaving off ControlPersist will result inpoor performance, so use
  # paramiko on older platforms rather than removing it
  #ssh_args = -o ControlMaster=auto -o ControlPersist=60s
  # The path to use forthe ControlPath sockets. This defaults to
  # "%(directory)s/ansible-ssh-%%h-%%p-%%r",however on some systems with
  # very long hostnames or very longpath names (caused by long user namesor
  # deeply nested home directories) this can exceedthe character limit on
  # file socket names (108 characters formost platforms). In that case, you
  # may wish to shorten the string below.
  #
  # Example:
  # control_path = %(directory)s/%%h-%%r
  #control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r
  # Enabling pipelining reducesthe number of SSH operations required to
  # execute a module on the remote server. This can result in asignificant
  # performance improvement when enabled, however when using "sudo:"you must
  # first disable 'requiretty' in/etc/sudoers
  #
  # By default, this option isdisabled to preserve compatibility with
  # sudoers configurations that have requiretty (the defaulton many distros).
  #
  #pipelining = False
  # ifTrue, make ansible use scp if theconnection type is ssh
  # (default is sftp)
  #scp_if_ssh = True
[accelerate]

  accelerate_port = 5099
  accelerate_timeout = 30
  accelerate_connect_timeout = 5.0
  # The daemon timeout ismeasured in minutes. This time ismeasured
  # from the last activity to the accelerate daemon.
  accelerate_daemon_timeout = 30
  # If setto yes, accelerate_multi_key will allow multiple
  # private keys to be uploaded to it, though each user must
  # have access to the system via SSH to add a newkey. The default
  # is "no".
  #accelerate_multi_key = yes
[selinux]

  # file systems that require special treatment when dealing with securitycontext
  # the default behaviour that copies the existing contextor uses the user default
  # needs to be changed to use the file system dependant context.
  #special_context_filesystems=nfs,vboxsf,fuse
  简易配置:
[defaults]

  inventory      = /etc/ansible/hosts
  sudo_user=root
  remote_port=22
  host_key_checking=False
  remote_user=root
  log_path=/var/log/ansible.log
  module_name=command
  private_key_file=/root/.ssh/id_rsa
  no_log:True
  2.hosts
  # This isthe default ansible 'hosts' file.
  #
  # It should live in /etc/ansible/hosts
  #
  #   - Comments begin with the '#'character
  #   - Blank lines are ignored
  #   - Groups of hosts are delimited by[header] elements
  #   - You can enter hostnames or ipaddresses
  #   - A hostname/ip can be a member ofmultiple groups
  # Ex 1:Ungrouped hosts, specify before any group headers.
  green.example.com
  blue.example.com
  192.168.100.1
  192.168.100.10
  # Ex 2:A collection of hosts belonging to the 'webservers'group
[webservers]

  alpha.example.org
  beta.example.org
  192.168.1.100
  192.168.1.110
  # If you have multiple hostsfollowing a pattern you can specify
  # them like this:
  www[001:006].example.com
  # Ex 3:A collection of database servers in the 'dbservers'group
[dbservers]

  db01.intranet.mydomain.net
  db02.intranet.mydomain.net
  10.25.1.56
  10.25.1.57
  # Here's anotherexample of host ranges, this time there are no
  # leading 0s:
  db-[99:101]-node.example.com
  ansible通过Inventory来定义主机和组,使用时通过-i指定读取,默认/etc/ansible/hosts。可以存在多个Inventory,支持动态生成。
  1、定义主机和组
  # vim /etc/ansible/hosts
  192.168.12.22    #可以直接为IP地址
  nfs.magedu.com    #可以是域名
  ntp.magedu.com:2200    #可以:接ssh端口
[webserver]    #[]内为分组名,下面都是该组组员

  web[1:10].magedu.com    #[1:10]表示1~10所有数字
  db-[a:f].magedu.com    #[a:f]表示a~f所有字母
  2、定义主机变量
  定义的变量可以在playbook中使用,在playbook中设定的同名变量会优先于此处变量。
  other1.example.com    ansible_connection=ssh    ansible_ssh_user=mpdehaan    #选择连接类型和连接用户
  other2.example.com    http_port=8800    #定义http_port端口号8800
  3、定义组变量
[test]

  web1.example.com
  web2.example.com
[test:vars]    #组变量,下面定义的变量test组内的所有主机通用

  ntp_server=ntp.example.com
  proxy=proxy.example.com
  4、把一个组作为另一个组的子成员
[apache]

  web1.example.com
[nginx]

  web2.example.com
[webserver]

  other1.example.com
[webserver:children]

  apache
  nginx
  #上例中webserver包括web1.example.com、web2.example.com、other1.example.com
  5、其他Inventory参数
  ansible_ssh_host
  将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
  ansible_ssh_port
  ssh端口号.如果不是默认的端口号,通过此变量设置.
  ansible_ssh_user
  默认的 ssh 用户名
  ansible_ssh_pass
  ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
  ansible_sudo_pass
  sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
  ansible_sudo_exe (new in version 1.8)
  sudo 命令路径(适用于1.8及以上版本)
  ansible_connection
  与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
  ansible_ssh_private_key_file
  ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
  ansible_shell_type
  目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
  ansible_python_interpreter
  目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python
  不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).
  与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
  6、变量读取的四个位置
  Inventory配置
  Playbook中vars定义的区域
  Roles中vars目录下的文件
  Roles同级目录group_vars和hosts_vars目录下的文件
  #设置变量时尽量沿用同一种方式。
  7、ansible正则
  (1)全量匹配 all与*功能相同,但*需引起来。
  ansible all -m ping
  ansible "*" -m ping
  (2)逻辑或(or)匹配
  多台主机或多个组同时执行
  ansible "web1:web2" -m ping
  (3)逻辑非(!)匹配
  所有在web1组,但不在web2组的主机
  web1:!web2
  (4)逻辑与(&)匹配
  web1和web2中同时存在的主机
  web1:&web2
  (5)模糊匹配
  检查192.168.1.0/24网段所有主机存活状态。
  ansible 192.168.1.* -m ping
  test开头的所有组
  ansible "test*" -m ping
  (6)域切割,同python字符串域切割
  例:
[webservers]

  web1.example.com
  web2.example.com
  web3.example.com
  webservers[0]    #==web1.example.com
  webservers[-1]    #==web3.example.com
  webservers[0:2]    #第一位到第三位==web1.example.com、web2.example.com、web3.example.com
  webservers[1:]    #第二位到最后==web2.example.com、web3.example.com
  (7)正则匹配,"~"开始表示正则匹配
  ansible "~(web|data|test)\.example\.(com|org)" -m ping

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430810-1-1.html 上篇帖子: 【Ansible】Playbook实例 下篇帖子: ansible基本使用教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表