Ansible

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 #

官方文档Installing 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 可以在playblocktask层级中使用。在任务中明确指定的任何模块参数都会覆盖该模块参数已设置的默认值。

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_roleimport_role时在block/task 层级设置的默认值)都会应用到所使用的任何role上,这可能会导致role出现意外的行为。

Archives #

© 2024 青蛙小白