Ansible 基础概念

Ansible 基础概念

Ansible的基本环境、受控主机清单、Ansible的配置文件。

查看Ansible环境信息

absible --version

查看ansible控制端的环境信息,其中包括默认模块和自定义模块的文件目录以及ansible和python的版本。

1
2
3
4
5
6
7
8
[student@workstation ~]$ ansible --version
ansible 2.8.0
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/student/.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)]

构建ansible清单

如果要用Ansible管理其他主机,需要将受控主机添加到清单中。

sudo vim /etc/ansible/hosts

使用静态清单配置

静态清单可以使用多种文件格式,包括INI和YAML。以下使用INI样式格式做例子。

在INI文件开头直接添加主机IP/域名

1
2
3
4
servera.yeefire.com
serverb.yeefire.com
192.168.1.211
192.168.1.232

将主机进行分组

1
2
3
4
5
6
7
[china-server]
blog.yeefire.com
server2.yeefire.com

[us-server]
us1.yeefire.com
us2.yeefire.com

分组嵌套

分组嵌套需要在组名处使用:children后缀。分组嵌套可以写在分组之前,他们之间没有绝对顺序。也可以编写与分组嵌套相同的组名,在使用这个名字的时候会将分组嵌套中所有的主机和该名字所对应的组名的主机包括在内。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[china-server]
blog.yeefire.com
server2.yeefire.com

[us-server]
us1.yeefire.com
us2.yeefire.com

[webservers:children]
china-server
us-server

[webservers]
test.app.yeefire.com

简化主机配置

如果要配置范围主机,一个个添加会很麻烦,通常他们都会有固定的格式。
使用[START:END]就可以范围。

1
2
3
4
5
6
[us-server]
us[001:009].yeefire.com

[test]
test[a:d].yeefire.com

localhost是一种特殊的存在,ansible知道他是本机,如果对localhost操作,ansible不使用ssh进行连接,这样可能导致执行结果和其他主机不一致。解决方案也很简单就是将localhost添加到inventory

ansible模块

模块是ansible的核心功能,近乎一些的操作都和模块相关。

使用ansible-doc可以阅读模块帮助手册

常用模块列表

模块类别 模块 描述
文件模块 copy 将本地文件复制到受管主机
- file 设置文件的权限和其他属性
- lineinfile 确保特定行是否在文件中
- synchronize 使用rsync同步内容
软件包模块 package 自动检测操作系统的软件包管理器管理软件包
- yum yum管理软件包
- apt apt管理软件包
- dnf dnf管理软件包
- pip 从PyPI管理Python软件包
系统模块 firewalld 使用firewalld管理任意端口和服务
- reboot 重新启动计算机
- service 管理服务
- user 添加、删除、管理用户账户
NetTools模块 get_url 通过HTTP、HTTPS、FTP下载文件
- nmcli 管理网络
- uri 与Web服务交互

ansible -m setup

setup 模块用来收集主机详尽信息。

ansible -m setup localhost

在本地运行ansible的setup模块,收集本地的详尽信息。

ansible配置文件

有四种方式来让ansible读取配置文件,优先级依次由高到低:

使用环境变量

使用ANSIBLE_CONFIG环境变量,使用环境变量的优先级是最高的,也就是说如果Ansible运行时发现该变量存在,那么会直接使用它而不会理会其他三个位置的配置文件。

使用./ansible.cfg

如果在当前执行ansible的目录下存在ansible.cfg配置文件,那么在当没有配置环境变量时,就会使用此配置文件。(可以配置目录结构来方便管理不同的群组)

使用~/.ansible.cfg

使用当前用户Home目录下的ansible.cfg隐藏文件,在当前两个都没有配置的情况下,如果在用户家目录下存在配置文件则会使用此处的配置文件运行ansible。

使用/etc/ansible/ansible.cfg

使用/etc/ansible/ansible.cfg全局配置文件是优先级最低的选择,在上面三个地点都没有找到ansible配置文件时则会使用此处的配置文件。如果这个文件也不存在的话……那就完全按照ansible的默认来操作了。

配置文件参数

inventory主机清单

在配置文件中配置好了主机清单后,在运行临时命令或者Playbook时就可以不用手动指定主机清单。

参数值这里inventory可以是文件,也可以是文件夹。当参数是文件夹时,会使用文件夹下全部的inventory主机清单。

1
2
[defaults]
inventory = inventory