Inventory文件
Ansible通过inventory文件来配置主机清单,默认文件路径为/etc/ansible/hosts,也可以在自己的管理目录下创建inventory文件。
Inventory参数
参数 | 说明 |
---|---|
ansible_ssh_host | 远程的主机名 |
ansible_ssh_port | 远程的端口 |
ansible_ssh_user | SSH远程的用户 |
ansible_ssh_pass | ssh密码 |
ansible_sudo_pass | 建议使用--ask-sudo-pass选项 |
ansible_sudo_exe | sudo路径 |
ansible_connection | 连接方式,如local,ssh或paramiko |
ansible_ssh_private_key_file | ssh的私钥文件 |
ansible_shell_type | 目标系统的shell类型,默认为sh |
ansible_python_interpreter | 目标主机的python路径 |
主机与组
inventory文件的基本格式如下:
10.0.139.163
[appserver]
10.0.139.161
10.0.139.162
10.255.210.15
[dbserver]
10.255.210.10
10.255.210.15
appserver和dbserver是自定义的组,一个主机可以属于多个不同的组,例如10.255.210.15属于appserver同时也可以属于dbserver,我们可以通过组来管理组下面的所有主机。
当主机列表存在一些静态IP地址,希望设置对应的主机别名,而不是配置/etc/hosts,可以通过下列方式定义
app1 ansible_ssh_port=30 ansible_ssh_host=10.0.139.163
主机格式还支持模糊匹配,例如我们可以用下列格式表示app1到app20这20台主机。
app[1:20].example.com
组与组之间还能进行嵌套
[k8s]
10.255.210.9
[db]
10.255.210.10
10.255.210.15
[server:children]
k8s
db
查看server包含的主机
[root@h-luhx-254 ~]# ansible server --list-host -i /data/ansible/Inventory/hosts
hosts (3):
10.255.210.9
10.255.210.10
10.255.210.15
变量配置
对于主机或组,可以定义一系列变量,提供给playbook调用。例如http端口,文件路径等等
主机和组都可以设定变量
[k8s]
10.255.210.9 docker_path=/data/docker
[db]
10.255.210.10
10.255.210.15
[db:vars]
db_port=3306
version=8.0.23
[server:children]
k8s
db
查看变量值
[root@h-luhx-254 playbook]# ansible-playbook test.yaml -i /data/ansible/Inventory -k
SSH password:
PLAY [db] *************************************************************************************************************************************************************************
TASK [display variable from inventory file] ***************************************************************************************************************************************
ok: [10.255.210.10] => {
"msg": "The 10.255.210.10 Value is 3306"
}
ok: [10.255.210.15] => {
"msg": "The 10.255.210.15 Value is 3306"
}
PLAY RECAP ************************************************************************************************************************************************************************
10.255.210.10 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
10.255.210.15 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
变量还可以保存在单独的文件中,格式为YAML,如下列文件
[root@h-luhx-254 Inventory]# mkdir /data/ansible/Inventory/{group_vars,host_vars}
[root@h-luhx-254 Inventory]# cat /data/ansible/Inventory/group_vars/db
---
db_port: 3306
db_version: 8.0.23
动态Inventory
除了前面基于文本的方式来记录intentory配置信息,Ansible也支持在其它软件系统中保存配置信息。例如EC2、Cobbler、Zabbix等外部系统。
存放主机信息的程序可以使用任何语言开发,其运行结果必须返回Json格式,同时需要支持--list和--host两个选项,--list用于返回所有的主机组信息,每个组包含的host,children、vars,_meta用于存放主机变量;--host则用于指定具体的host。大致格式如下:
{
"docker": {
"hosts": [
"10.255.210.9"
]
},
"mysql": {
"hosts": [
"10.255.210.10",
"10.255.210.15"
],
"vars": {
"mysql_port": 22,
"mysql_version": "8.0.23"
}
}
}
在设计外部系统配置信息时,可以将Inventory配置信息记录在MySQL数据库中,再通过Python脚本获取数据并返回上述格式的JSON结果。
配置文件
Ansible会按照下列顺序读取配置文件,直到找到一个为止,并使用第一个找到的配置文件
- ANSIBLE_CONFIG环境变量
- 当前目录下的ansible.cfg
- home目录下的.ansible.cfg
- /etc/ansible/ansible.cfg
参数详解
defaults
参数 | 描述 |
---|---|
action_plugins | 加载插件模块 |
ansible_managed | 插入自定义字符到Ansible配置模板生成的文件中 |
ask_pass | 是否提示输入密码,如果采用ssh密钥认证需要开启 |
ask_sudo_pass | 与ask_pass类似,是否提示输入sudo密码 |
bin_ansible_callbacks | callback插件是否在运行ansible命令时被加载 |
callback_plugins | callback插件加载 |
command_warnings | 当shell和命令模块被默认模块简化时,是否发出警告,也可以在命令末尾通过warn=yes / no来控制 |
connection_plugins | 加载连接扩展插件 |
deprecation_warnings | 允许ansible-playbook输出结果中禁用"不建议"警告 |
display_skipped_hosts | 显示跳过任务的状态 |
error_on_undefined_vars | 当引用错误的变量时,ansible则执行失败 |
executable | 在sudo环境下生成一个shell交互接口 |
filter_plugins | 加载过滤器插件 |
force_color | 强制颜色模式 |
force_handlers | 即便主机崩溃了,仍然可以继续运行这个主机 |
fork | 与主机通信时默认并行进程数 |
gathering | 控制默认facts收集。默认为implicit,每次play,facts都会被收集,除非设置gather_facts:false;explicit则相反,facts不会收集;smart则表示没有facts的新host不会被扫描 |
hash_behaviour | hashed的参数被合并 |
host_key_checking | 检测主机密钥 |
inventory | inventory文件的位置 |
jinja2_extensions | 开启jinja2扩展模块 |
library | 默认模块位置 |
log_path | 日志文件位置 |
lookup_plugins | 加载不同区域的插件模块 |
module_lang | 模块与系统之间的通信语言,默认为C语言 |
module_name | ansible命令的默认模块名(-m),默认为command |
nocolor | 取消输出结果的字体颜色 |
nocows | 禁用cowsay特性 |
poll_interval | 异步任务回查状态的频率 |
private_key_file | 通过指定pem密钥文件进行连接 |
remote_port | 远程SSH端口 |
remote_tmp | 远程临时文件 |
remote_user | 远程用户,若不指定则默认为当前用户 |
roles_path | roles文件路径 |
system_warnings | 禁用运行的潜在文件警告 |
timeout | SSH连接超时时间 |
valut_password_file | 设置密码文件 |
openssh specfic settings
选项 | 描述 |
---|---|
ssh_args | 用于传递一组选项给ansible |
control_path | 保存ControlPath套接字的位置,control_path = %(directory)s/%%h-%%r |
scp_if_ssh | 当没有开启sftp协议,scp将代替用于远程复制文件 |
pipelining | 通过pipe特性减少SSH操作次数,提升性能 |
Accelerated Mode settings
在Ansible 1.5及之后的版本中,有SSH pipelining特性的加持,我们不再需要accelerated急速模式了,急速模式仅建议在redhat6或之前版本还在使用paramiko的情况下
选项 | 描述 |
---|---|
accelerate_port | 急速模式下的端口 |
accelerate_timeout | 从客户机获取数据的超时时间 |
accelerate_connect_timeout | 套接字调用的超时时间 |
accelerate_daemon_timeout | daemon守护进程的超时时间 |
accelerate_multi_key | 允许多个私钥被加载到daemon,任何客户端想要连接都需要开启这个选项 |