配置文件
Ansible在/etc/ansible下会生成三个文件或目录
- Hosts:默认主机清单配置文件
- ansible.cfg:Ansible默认主配置文件
- Roles:角色定义目录
主配置文件详解
[root@ansible ~]# vim /etc/ansible/ansible.cfg
[defaults] //默认配置
#inventory = /etc/ansible/hosts //主机列表配置文件
#library = /usr/share/my_modules/ //库文件存放目录,ansible默认搜寻模块的位置
#module_utils = /usr/share/my_module_utils/ //模块存放目录
#remote_tmp = ~/.ansible/tmp //临时py命令文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp //本机的临时命令执行目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 //默认并发数
#poll_interval = 15 //时间间隔
#sudo_user = root //默认sudo用户
#ask_sudo_pass = True //每次执行ansible命令是否询问sudo用户密码,默认值为no
#ask_pass = True //每次执行ansible命令是否询问ssh密码,默认值为no
#transport = smart //传输方式
#remote_port = 22 //远程端口号
#remote_user = root //远程用户,受控主机使用什么用户进行执行ansible任务
#roles_path = /etc/ansible/roles //角色定义目录
#host_key_checking = False
[privilege_escalation] //普通用户提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
[paramiko_connection]、[ssh_connection]、[accelerate] //用于优化与受控主机的连接
[selinux] //定义selinux交互
Ansible配置文件优先级
Ansible配置以ini格式存储配置数据,在Ansible中⼏乎所有配置都可以通过Ansible的Playbook或环境变量来重新赋值。在运⾏Ansible命令时,命令将会按照以下顺序查找配置⽂件。
- ANSIBLE_CONFIG变量
首先Ansible命令会检查环境变量,及这个环境变量指向的配置⽂件。export ANSIBLE_CONFIG=/PATH
- ./ansible.cfg
其次会检查当前⽬录下的ansible.cfg配置⽂件 - ~/.ansible.cfg
再次会检查当前⽤户home⽬录下的.ansible.cfg配置⽂件。 - /etc/ansible/ansible.cfg
最后会检查在⽤软件包管理⼯具安装Ansible时⾃动产⽣的配置⽂件。
主机清单
清单定义ansible将要管理的一批主机。这些主机也可以分配到组中,以进行集中管理。组可以包含子组,主机也可以是多个组的成员。清单还可以设置应用到它所定义的主机和组的变量。
可以通过两种方式定义主机清单。静态主机清单可以通过文本文件来定义。动态主机清单可以根据需要使用外部信息提供程序通过脚本或者其他程序来生成。
主机清单详解
静态清单文件
静态清单文件是指定Ansible目标受控主机的文本文件。可以使用多种不同的格式编写此文件,包括INI样式或YAML。
INI样式的静态清单文件是受控主机的主机名或IP地址的列表一行一个
[root@ansible ~]# vim /etc/ansible/hosts
## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10
可以将受控主机组合一个主机组,通过组,可以更加有效的运行Ansible。组名是以中括号括起来的。
## [webservers] //定义组名
## alpha.example.org //域名形式
## beta.example.org
## 192.168.1.100 //IP形式
## 192.168.1.110
## www[001:006].example.com
## [dbservers]
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57
## db-[99:101]-node.example.com
也可以将主机组组合成一个组
## [all:children]
## webservers //子组
## dbservers
ansible all --list-hosts
列出默认清单文件中的所有受控主机
ansible webservers --list-hosts
列出某个组里的所有受控主机
实例
按照下方所述,在控制节点ansible.example.com 上安装和配置Ansible:
安装所需的软件包
创建名为/home/student/ansible/inventory的静态清单文件, 以满足以下需求:
node1是dev主机组的成员
node2是test主机组的成员
node3是prod主机组的成员
prod组是webservers主机组的成员
创建名为/home/student/ansible/ansible.cfg的配置文件, 以满足以下要求:
主机清单文件为/home/student/ansible/inventory
playbook中使用的角色的位置包括/home/student/ansible/roles
[root@ansible ~]# vim /etc/sudoers.d/student
student ALL=(ALL) NOPASSWD: ALL
[root@ansible ~]# for a in node{1..3}
> do
> scp /etc/sudoers.d/student root@$a:/etc/sudoers.d/
> done
[root@ansible ~]# su - student
[student@ansible ~]$ mkdir ansible
[student@ansible ~]$ cd ansible/
[student@ansible ansible]$ vim inventory
[dev]
node1
[test]
node2
[prod]
node3
[webservers:children]
prod
[student@ansible ansible]$ cp /etc/ansible/ansible.cfg .
[student@ansible ansible]$ vim ansible.cfg
inventory = /home/student/ansible/inventory
roles_path = /home/student/ansible/roles
host_key_checking = False
remote_user = student
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[student@ansible ansible]$ mkdir roles
[student@ansible ansible]$ ansible all -m ping
node3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
node2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}