Ansible部署(2)

管理配置文件

ansible的配置文件叫ansible.cfg, 默认位于/etc/ansible/ansible.cfg 。此文件定义了连接受管主机的方法、权限以及受管主机清单文件等信息

1.ansible.cfg的读取顺序

ansible.cfg可能会位于多个地方,ansible会在以下位置按顺序读取ansible.cfg文件:

使用-c 或--config 指定配置文件的路径
使用环境变量ANSIBLE_CONFIG
当前目录下的ansible.cfg文件
当前用户家目录下的ansible.cfg文件
默认配置文件/etc/ansible/ansible.cfg

可以使用 ansible --version 查看当前所使用的配置文件

[greg@control ansible]$ ansible --version
ansible 2.8.0
  config file = /home/greg/ansible/ansible.cfg
  configured module search path = ['/home/greg/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Apr  3 2019, 17:26:03) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]

2.ansible.cfg参数配置

ansible.cfg使用分段式配置,每个段使用"[ ]"包含,每个段下方使用key=value方式定义ansible工作方式。主要的配置段有[defaults]和[privilege_escalation]

[defaults] 用来定义通用默认配置

[privilege_escalation] 用于定义在受管主机上的提权配置

[defaults]中的配置参数

inventory = /etc/ansible/hosts
定义inventory主机清单文件的位置,默认清单文件是/etc/ansible/hosts
forks = 5
与受管主机通信时的并行的进程数,默认是5
remote_user = root
设置受管主机的用户,默认是root,如果未设置则是以控制节点当前用户身份
ask_pass = True
在连接受管主机是是否要输入密码,默认是需要的。配置好SSH公钥认证则可以自动连接,无需密码。

[privilege_escalation]中的配置参数

become=True 在受管主机是否进行提权
become_method=sudo 提权方式为sudo ,默认是su
become_user=root 提权后的用户
become_ask_pass=False 提权时是否需要密码
[defaults]
inventory = /home/greg/ansible/inventory
remote_user = greg 
roles_path = /home/greg/ansible/roles 

[privilege_escalation]
become=True 
become_method=sudo
become_user=root
become_ask_pass=False

3.inventory主机清单文件

inventory文件位置是在ansible.cfg中定义的inventory文件就是受管主机的清单,定义了哪些主机将被ansible管理。这些主机列表可以进行分组,也可以使用变量来定义主机和主机组。

inventory 文件的内置变量

ansible_ssh_host # 要连接的主机名
ansible_ssh_port # 端口号,默认22
ansible_ssh_user # ssh连接时默认使用的用户名
ansible_ssh_pass # ssh连接时的密码
ansible_sudo_pass #使用sudo连接用户时的密码
ansible_ssh_private_key_file # 秘钥文件如果不想使用ssh­agent管理时可以使用此选项
ansible_shell_type # shell类型,默认sh
ansible_connection # SSH连接类型:local、ssh、paramiko
在ansible 1.2之前默认paramiko
ansible_python_interpreter # 用来指定Python解释器的路径,同样可以指定
ruby、Perl的路径

可以写主机名或ip地址

192.168.10.12
node1.example.com
node2.example.com

指定主机范围:

192.168.10.[11:20] 表示192.168.10.11-192.168.10.20 的主机
192.168.[0:3].[1:254] 表示192.168.0.1-192.168.3.254网络内的主机
node[1:30].example.com 表示node1.example.comnode30.example.com网络内的主机

定义主机组:

可以使用分组的方法来指定受管主机,这样就可以针对具体的组来执行

ansible指令。

  1. 一个主机可以属于多个组
  2. 组可以嵌套
  3. 组使用[]来定义
[dev]
node1
[test]
node2
[prod]
node3
node4
[balancers]
node5
#嵌套组:
用一个大的组来包含多个其他组,使用":children" 来表示组嵌套
[webservers:children]
prod

在inventory中默认就存在两个组,分别是all和ungrouped

all: 表示inventory中的所有主机

ungrouped: 表示不在任何组中的主机

列出inventory中的主机
列出所有的主机
[greg@control ansible]$ ansible all --list-hosts
  hosts (5):
    node1
    node2
    node5
    node3
    node4

列出prod组中的主机
[greg@control ansible]$ ansible prod --list-hosts
  hosts (2):
    node3
    node4

列出dev组中的主机
[greg@control ansible]$ ansible dev --list-hosts
  hosts (1):
    node1
无标签
打赏
评论区
头像
文章目录