Ansbile #
版本 #
- ansible-core 2.17 - 控制节点python版本3.10-3.12, 目标节点python版本3.7-3.12
- ansible-core 2.11 - 控制节点python版本2.7, 3.5-3.9, 目标节点python版本2.6-2.7, 3.5-3.9
- 更多见Ansible版本支持矩阵和对应Python版本
支持centos 7, python2.7的最后一个ansible
1python3 -m pip install --user ansible==9.8.0 \ 2 --index-url=https://mirrors.aliyun.com/pypi/simple -v
安装 #
准备工作 #
规划控制节点和目标节点。将在控制节点上安装ansible,目标节点只要有兼容的python版本即可。
在控制节点和目标节点(可选)的/etc/hosts
配置文件中配置所有节点的ip地址和主机名。
在控制节点和目标节点上创建ansible用户,确保各节点上ansible用户具有sudo权限:
1useradd ansible
2# ubuntu
3useradd -m -s /bin/bash ansible
4
5passwd ansible
6echo "ansible ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible
配置控制节点到各个目标节点的SSH无密访问。
安装ansible #
下面在控制节点上安装ansible。
方法1: 使用pipx安装 #
在控制节点上切换到ansible用户,将只为ansible用户安装ansible。
1su - ansible
为当前ansible用户安装pip:
1python3 -m ensurepip --upgrade --user
安装pipx:
1python3 -m pip install --user pipx --index-url=https://mirrors.aliyun.com/pypi/simple
注意上面的命令安装pipx被安装在了~/.local/bin
下。
使用pipx安装ansible:
1pipx install --include-deps ansible -vvv --index-url=https://mirrors.aliyun.com/pypi/simple
pipx安装的ansible是会在~/.local
下,并且有独立的虚拟环境:
1ls ~/.local/share/pipx/venvs/ansible/
2bin include lib lib64 pipx_metadata.json pyvenv.cfg
方法2: 使用pip安装 #
1su - ansible
2
3python3 -m ensurepip --upgrade --user
4
5python3 -m pip install --user ansible \
6 --index-url=https://mirrors.aliyun.com/pypi/simple
验证安装 #
在控制节点上编写资产文件/etc/ansible/hosts
,文件的内容是所有目标节点的主机名:
1sudo mkdir /etc/ansible
2vi /etc/ansible/hosts
1[all]
2targetnode1_hostname
3targetnode2_hostname
使用ping模块测试到目标节点的连通性:
1ansible all -m ping
使用command模块执行远程命令:
1ansible all -m command -a "date"
Module defaults #
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_module_defaults.html
如果经常用相同的参数调用同一个模块,使用 module_defaults
关键字为该特定模块定义默认参数。
例如:
1- hosts: localhost
2 module_defaults:
3 ansible.builtin.file:
4 owner: root
5 group: root
6 mode: 0755
7 tasks:
8 - name: Create file1
9 ansible.builtin.file:
10 state: touch
11 path: /tmp/file1
12
13 - name: Create file2
14 ansible.builtin.file:
15 state: touch
16 path: /tmp/file2
17
18 - name: Create file3
19 ansible.builtin.file:
20 state: touch
21 path: /tmp/file3
module_defaults
可以在play
、block
和task
层级中使用。在任务中明确指定的任何模块参数都会覆盖该模块参数已设置的默认值。
1- block:
2 - name: Print a message
3 ansible.builtin.debug:
4 msg: "Different message"
5 module_defaults:
6 ansible.builtin.debug:
7 msg: "Default message"
可以通过指定一个空字典来移除之前为模块设置的所有默认值。
1- name: Create file1
2 ansible.builtin.file:
3 state: touch
4 path: /tmp/file1
5 module_defaults:
6 file: {}
注意
在play层级设置的任何模块默认值(以及使用
include_role
或import_role
时在block/task 层级设置的默认值)都会应用到所使用的任何role上,这可能会导致role出现意外的行为。