系统环境

标题 版本 备注
系统版本 ubuntu 22.04.3 LTS (Jammy Jellyfish) -
内核版本 5.15.0-88-generic #98-Ubuntu SMP Mon Oct 2 15:18:56 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux -
Ansible v2.2.16.5 -

Ansible 简介

官方文档:ubuntu 安装文档
官方文档:Python 安装方式

Ansible 是一个开源的自动化平台,用于配置管理、应用部署、任务自动化等。它旨在提供一个明了、易于阅读的自动化脚本语言,让原本复杂的系统管理变得简单易行。Ansible 使用SSH协议,无需在远程系统上安装任何代理软件,就可以对它们进行管理和自动化操作,这使得它在操作的简便性和安全性方面非常受欢迎。

其主要特点包括:

  1. 简单性:Ansible 的配置文件使用YAML,一种直观易懂的数据序列化格式,使得管理脚本容易编写和理解。
  2. 代理less:它直接通过SSH连接远程机器,执行任务,无需在目标机器上安装任何代理软件,减少了系统的侵入性。
  3. 可扩展性:通过自定义模块,用户可以扩展Ansible,使其适应几乎所有类型的自动化需求。
  4. 大规模自动化:Ansible 可以轻松管理和自动化数以千计的服务器。
  5. 丰富的模块:拥有大量现成的模块,覆盖了许多常见的系统管理任务,如文件管理、软件包安装、用户管理等。

Ansible 的架构设计上,使用”playbooks”来描述自动化任务,这些playbooks里面定义了一系列的”plays”,每个play指定了在哪些主机上执行哪些任务。这种设计让Ansible既能管理小规模的个人项目,也能轻松应对大规模的企业级应用。

随着DevOps文化的发展和自动化需求的增加,Ansible 已成为IT专业人员中非常流行的工具之一。

Ansible 安装

Ansible 是 python 语言编写的。它不是 C/S 架构,所以我们只需要在一台机器上安装 ansible

1.在 /etc/apt/sources.list.d/ 目录下新建 ansible.list 文件,内容为:

1
2
3
4
5
$ sudo sh -c 'cat << EOF > /etc/apt/sources.list.d/ansible.list
# 添加 ansible 源
# jammy 是 ubuntu 的版本代号,根据自己的版本号进行替换(cat /etc/os-release 可获取)
deb http://ppa.launchpad.net/ansible/ansible/ubuntu jammy main
EOF'

2.执行官方提供的 key 添加命令:

1
2
3
4
5
6
7
$ sudo sh -c 'apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367'
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Executing: /tmp/apt-key-gpghome.70A7zwkTjh/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367

gpg: key 93C4A3FD7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg: imported: 1

3.更新下系统缓存数据:

1
$ sudo apt update -y

4.安装 ansible :

1
sudo apt install -y ansible

5.安装完成后,即可使用 ansible –version 查看安装版本:

1
2
3
4
5
6
7
8
9
10
$ ansible --version
ansible [core 2.16.5]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/leazhi/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /home/leazhi/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.11.6 (main, Oct 8 2023, 05:06:43) [GCC 13.2.0] (/usr/bin/python3)
jinja version = 3.1.2
libyaml = True

非常重要:ansible 优先级说明:

  • 最高级:ANSIBLE_CONFIG
  • 次级: 项目目录 ansbile.cfg
  • 三级: 当前用户家目录下的 .ansible.cfg
  • 最低级:/etc/ansible/ansible.cfg # 默认的优先级配置文件

总结:
当没有 ANSIBLE_CONFIG 时就先去找当前项目目录下的 ansible.cfg,当当前项目目录下没有 ansible.cfg 就去找当前用户家目录下的 .ansible.cfg ,最后当当前用户家目录下也没有 .ansible.cfg 时就去找 /etc/ansible/ansible.cfg

举例说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 我们知道 ansible 默认的优先级是先去找  /etc/ansible/ansbile.cfg:
root@ubuntu001:~# ansible --version |egrep 'config file'
config file = /etc/ansible/ansible.cfg


# 当我们创建一个项目,且在项目下创建 ansible.cfg 文件进行配置时:
root@ubuntu001:~# mkdir -p /data/project
root@ubuntu001:~# cd !$
cd /data/project
root@ubuntu001:/data/project# touch ansible.cfg
root@ubuntu001:/data/project# ansible --version |egrep 'config file' # 注意,这里是在项目目录下执行的
config file = /data/project/ansible.cfg

root@ubuntu001:/data/project# cd # 退出项目目录
root@ubuntu001:~# ansible --version |egrep 'config file' # 这里就使用默认的 ansible 配置文件
config file = /etc/ansible/ansible.cfg


# 当我们在当前用户的家目录下创建 .ansbile.cfg 文件:
root@ubuntu001:~# touch ~/.ansible.cfg
root@ubuntu001:~# ansible --version |egrep 'config file' # 注意:这里是在用户目录下
config file = /root/.ansible.cfg

root@ubuntu001:~# cd /tmp/ # 进入当前用户的其它目录:
root@ubuntu001:/tmp# ansible --version |egrep 'config file' # 可以看到依旧是使用用户家目录下的 ansible 配置为优先级
config file = /root/.ansible.cfg

root@ubuntu001:/tmp# exit # 退出当前用户
logout
ubuntu@ubuntu001:~$ ansible --version |egrep 'config file' # 可以看到这时候就使用系统默认的 ansible 配置文件了
config file = /etc/ansible/ansible.cfg