Ansible配置管理

1. 配置文件ansible.cfg

1.1 配置文件使用

  1. ansible.cfg配置文件是以ini格式存储配置数据的

  2. ansible.cfg配置文件可以存放在不同的目录,但只有一个可用,在运行Ansible命令时,Ansible将会按照预先设定的顺序查找配置文件

  3. ansible配置文件查找顺序(从上至下,先找到哪个文件就用哪个文件)

    ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件
    ./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件
    ~/.ansible.cfg:然后,将会检查当前用户home目录下的.ansible.cfg配置文件
    /etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文  
    
  4. 建议使用~/.ansible.cfg作为配置文件,这样就可以实现每个用户都有自己独自的配置文件,不污染其它用户正常使用Ansible,同时也方便进行选项配置

  5. 几乎所有的配置项都可以通过Ansible的playbook或环境变量来重新赋值

1.2 配置文件内容(修改配置后不需要重启ansible)

[root@node1 ansible]# cat ansible.cfg | grep ^[^#]
[defaults]                   #定义常规默认的配置,如:定义文件路径、设置并发连接数、设置sudo用户、是否开启sudo功能等等
#inventory      = /etc/ansible/hosts           #被控端的主机列表文件
#library        = /usr/share/my_modules/       #模块文件存放路径
#remote_tmp     = ~/.ansible/tmp               #临时py命令存放在远程主机目录
#local_tmp      = ~/.ansible/tmp               #管理节点临时文件存放目录
#forks          = 5                            #默认开启的并发数
#poll_interval  = 15                           #默认轮询时间间隔(单位秒)
#sudo_user      = root                         #默认sudo用户
#ask_sudo_pass = True                         #每次执行ansible命令是否提示输入sudo密码
#ask_pass      = True                         #是否提示输入密码
#transport      = smart                       #远程传输模式
#remote_port    = 22                          #默认远程主机的端口号
#module_lang    = C	                      #模块运行默认语言环境
#gathering = implicit		           #facts信息收集开关定义 smart|implicit|explicit
roles_path    = /etc/ansible/roles:/usr/share/ansible/roles   #指定role存放路径
#timeout = 10						   #SSH连接超时时间
#remote_user = root					#ansible远程认证用户
host_key_checking = False       # 检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
log_path = /var/log/ansible.log				#ansible日志记录文件,建议启用
#module_name = command					#ansible默认执行模块command,可以改成module_name = shell,这样默认的模块就是 shell 模块了
#executable = /bin/sh					#ansible命令执行shell为/bin/sh
#hash_behaviour = replace			#ansible主机变量重复处理方式replace(默认)|merge
#默认情况下,角色中的变量将在全局变量范围中可见。 
#为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers得任务可以看到角色变量
#private_role_vars = yes  
#vault_password_file = /path/to/vault_password_file	#指定vault密码文件路径
#ansible_managed = Ansible managed		#定义的一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中
#display_skipped_hosts = True		#开启显示跳过的主机
#error_on_undefined_vars = False		#开启错误,或者没有定义的变量
# set plugin path directories here, separate with colons	#设置相关插件路径,使用‘:’分割多个路径
#action_plugins     = /usr/share/ansible/plugins/action
#cache_plugins      = /usr/share/ansible/plugins/cache
#callback_plugins   = /usr/share/ansible/plugins/callback
#connection_plugins = /usr/share/ansible/plugins/connection
#lookup_plugins     = /usr/share/ansible/plugins/lookup
#inventory_plugins  = /usr/share/ansible/plugins/inventory
#vars_plugins       = /usr/share/ansible/plugins/vars
#filter_plugins     = /usr/share/ansible/plugins/filter
#test_plugins       = /usr/share/ansible/plugins/test
#terminal_plugins   = /usr/share/ansible/plugins/terminal
#strategy_plugins   = /usr/share/ansible/plugins/strategy
#fact_caching = memory		#定义ansible facts缓存方式memory
#fact_caching_connection=/tmp	#定义ansible facts缓存路径/tmp
[inventory]			#设置插件及可忽略的文件格式
[privilege_escalation]	        #用户权限类的设定,如:sudo、是否启用sudo密码
[paramiko_connection]	        #不记录遇到的新主机密钥、增加新主机的性能
[ssh_connection]		        #对SSH连接的一些配置,配置项比较少
[persistent_connection]	        #主要就两个选项,连接超时、命令超时
[accelerate]			#连接加速的相关配置
[selinux]				#selinux相关配置,基本不会涉及
[colors]				#设置输出颜色,最好默认
[diff]				#输出打印是是否打印diff

2. 主机清单 inventory

inventory:资源清单,在大规模的配置管理工作中,特别是云服务提供商或者IDC厂家,需要管理不同业务的不同机器,这些机器的信息都存放在Ansible的inventory组件里面。

在我们使用Ansible进行远程主机管理时,必须先将主机信息存放在inventory里面,这样才能使用Ansible对它进行操作。默认情况下,Ansible的inventory是一个静态的INI格式的文件,可以通过在配置文件中的inventory选项,进行相关设置。

当然了,我们还可以通过ANSIBLE_HOSTS环境变量指定或者运行ansible和ansible-playbook的时候用-i参数临时设置。

ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分
组命名

默认的 inventory file 为 /etc/ansible/hosts

inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成

注意: 生产建议在每个项目目录下创建项目独立的hosts文件

官方文档

https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

主机清单文件格式

inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组

此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明

如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机

Inventory 参数说明

header 1header 2
ansible_ssh_host将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_portssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口
如:192.168.1.100:2222
ansible_ssh_user默认的 ssh 用户名
ansible_ssh_passssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_passsudo 密码(这种方式并不安全,我们强烈建议使用 --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_filessh 使用的私钥文件.适用于有多个密钥,而你不想使用 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 的路径…

示例

$ cat /etc/ansible/hosts
[test]                  #组名
172.16.5.201            #IP地址
192.168.0.[100:102]     #相当于192.168.0.100,192.168.0.101,192.168.0.102
[nginx]
192.168.11.11
$ ansible -i /etc/ansible/hosts test -u root -m command -a 'ls /home' -k
#-i   指定hosts文件,默认是/etc/ansible/hosts
#test  组名
#-u  指定用户,默认是root用户
#-m  指定模块
#-a  指定模块参数
#-k  用来提示输入远程主机的密码,适用于所有主机密码相同的情况,只会提示一次输入密码

示例

$ cat /tmp/temp 
[bidding]
biddingserver1.test.com:8022
biddingserver2.test.com
[rs]
rs1.test.com
rs2.test.com
rs3.test.com
# 或者写成 rs[1:3].test.com
[updateserver]
update[01:07].sun.updateserver.south.com
[qs]
qs-[a:z].south.com
[bidding:vars]
ansible_ssh_pass="noSafeNoWork@2016"
anisble_ssh_user="root"

$ ansible -i /tmp/temp bidding -u root -m shell -a "whoami" 
# 简写,默认的host为/etc/ansible/hosts
ansible test -a 'ls /home' -k 

我们知道,ansible通过ssh的方式来远程管理多台主机,所以我们需要使用ssh key的方式来进行ssh认证,当然你也可以选择在使用ansible的时候加上-k选项,来通过交互的方式输入密码。有了ssh key之后,我们就可以直接使用ansible进行一些简单的测试,
如下:
测试hosts中所有主机是否存活,如果只想检测某一组,可以将all改为改组的组名

ansible all -m ping  
#只检查nginx组的主机是否存活
anbile nginx -m ping
#也可以直接输入被管理主机的ip地址

这个时候,默认使用root进行所有的远程管理,在大多数的情况下,为了安全起见,人们更愿意使用一个普通账号来进行管理,我们可以在所有的被管理机器上创建一个ansible用户,并让其可以使用sudo获取管理员权限,当然在ansible主机上也需要有这么一个用户,并为其生成ssh key,然后通过修改/etc/ansible/ansible.cfg配置文件里的remote_user以使ansible默认使用ansible用户进行管理,然后使用–sudo参数来获取root权限,你也可以通过修改/etc/ansible/ansible.cfg里的remote_port来修改默认的ssh端口

如果多台主机的管理账号各不相同,我们也可以在hosts文件里,分别进行设置,示例如下:

[web]
site01 ansible_ssh_user=root
site02 ansible_ssh_user=daniel
site01-dr ansible_ssh_host=site01.dr ansible_ssh_port=65422
[production]
site01
site02
db01 ansible_ssh_user=fred
ansible_ssh_private_key_file=/home/fred/ssh/id_rsa bastion
#简单说明:
#ansible_ssh_user 用于指定管理远程主机的账号
#ansible_ssh_host 用于指定该管理主机
#ansible_ssh_port 用于指定ssh的端口
#ansible_ssh_private_key_file 指定key文件
#host_key_checking=false 当第一次连接远程主机时,会提示输入yes或者no,跳过此环节

示例:主机组之间可以嵌套,需要使用关键字children

cat /etc/ansible/hosts
[mfs_master]
192.168.0.1

[mfs_logger]
192.168.0.2

[mfs_node]
192.168.0.3

[mfs_chient]
192.168.0.4

[mfs_all:children]     # [mfs:children]组里面包含mfs_master组,mfs_logger组,mfs_node组和mfs_chient组
mfs_master
mfs_logger
mfs_node
mfs_chient



# 对mfs组操作
ansible mfs -m ping  

# 对mfs组操作
ansible mfs_node -m ping  

# 对mfs组操作
ansible mfs_master -m ping     

示例

[test]
10.0.0.11 ansible_connection=local   # 指定本地连接,无需ssh配置
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值