目录
1、play和playbook和role
role由多个playbook组成,playbook由多个play组成,play由多个task组成。play是由yaml格式的文本文件。
playbook中play和任务列出的顺序很重要,因为ansible会按照相同的顺序运行它们
简单的playbook(一个play):
简单的playbook(两个play):
play使用关键字(remote_user、become):优先级高于配置文件
2、幂等性
具有幂等性是ansible重要的特点。playbook运行一次和运行多次效果是一样的。不会改变系统状态。
3、清单
清单:你要操作哪些主机就放到清单里面,包含主机和主机组。
默认清单文件:/etc/ansible/hosts
自定义清单文件:inventory
静态清单:
4、配置文件(ansible.cfg)
基本配置文件:/etc/ansible/ansible.cfg。
ansible --version 可以看到这个路径,版本不同,可能位置不一样。
主目录:~/.ansible.cfg
运行ansible命令的目录创建ansible.cfg:./ansible.cfg
如果当前目录有配置文件就使用当前目录的配置文件,如果没有就去找用户家目录下的配置文件,如果也没有就去找/etc/ansible/ansible.cfg。实践中不常用/etc/ansible/ansible.cfg和~/.ansible.cfg
ANSIBLE_CONFIG环境变量可以定义配置文件的位置。
5、变量
变量可以存储值。
5.1 在playbook中使用变量:
5.2 在playbook中使用变量文件:
6、事实
Ansible 事实(Facts)是指在执行 Ansible Playbook 时,Ansible 自动收集的有关目标主机的信息。这些信息包括主机名、IP 地址、操作系统类型、内存大小、CPU 数量等等。Ansible 事实可以在 Playbook 中使用,以便根据目标主机的不同情况执行不同的任务。
Ansible 事实可以通过 ansible_facts 变量在 Playbook 中访问。例如,要获取目标主机的 IP 地址,可以使用 ansible_facts['default_ipv4']['address']。
Ansible 事实可以通过多种方式收集,包括使用 Ansible 内置的模块、自定义模块、脚本等。默认情况下,Ansible 会自动收集一些基本的事实,如主机名、操作系统类型等。如果需要收集更多的信息,可以使用 Ansible 内置的模块,如 setup 模块,或者编写自定义模块和脚本来收集信息。
7、循环
在 Ansible 中,可以使用循环来重复执行某些任务或操作。循环可以用于遍历列表、字典或范围等数据结构。
有条件的循环:when关键字
8、处理程序
处理程序是响应由其他任务触发的通知的任务。仅当任务在收管主机上更改了某些内容时,任务才通知其处理程序。每个处理程序具有全局唯一的名称,在playbook中任务块的末尾触发。如果没有任务通过名称通知处理程序,处理程序就不会运行。如果一个或多个任务通知处理程序,处理程序就会在play中的所有其他任务完成后运行一次。因为处理程序就是任务,所以管理员可以在处理程序中使用他们将用于任何其他任务的模块。通常而言,处理程序被用于重新引导主机和重新启动服务。处理程序可视为非活动任务,只有在使用notify语句显式调用时才会被触发。在下列代码片段中,只有配置文件更新并且通知了该任务时,restart apache处理程序才会重新启动Apache服务器:
playbook示例:
9、块
块是对任务进行逻辑分组的子句,用于控制任务的执行方式。
10、动态清单文件
Ansible动态清单文件是一种特殊类型的清单文件,它不是静态的,而是在运行时动态生成的。这种清单文件通常用于管理大规模的、动态变化的环境,例如云环境或容器环境。
动态清单文件可以使用各种插件来生成,例如:
AWS EC2插件:可以从AWS EC2实例列表中生成清单文件。
OpenStack插件:可以从OpenStack实例列表中生成清单文件。
Docker插件:可以从Docker容器列表中生成清单文件。
Kubernetes插件:可以从Kubernetes集群中生成清单文件。
使用动态清单文件,可以轻松地管理大规模的、动态变化的环境,而无需手动维护清单文件。同时,动态清单文件也可以与Ansible的其他功能结合使用,例如动态变量、动态任务等。
11、角色
Ansible角色是一种组织和管理Ansible任务、变量和文件的方法。它们是一种可重用的、可组合的、可扩展的方式,可以使您的Ansible代码更加模块化和可维护。
一个角色通常包含以下内容:
tasks:包含要执行的任务列表。
handlers:包含要在任务完成后执行的处理程序列表。
templates:包含要使用的模板文件。
files:包含要复制到目标主机的文件。
vars:包含角色特定的变量。
defaults:包含角色默认变量的值。
meta:包含角色依赖关系和其他元数据。
使用角色可以使您的Ansible代码更加模块化和可重用,同时也可以使您的代码更加易于维护和扩展。
12、ansible常用目录结构
在Ansible中,通常使用以下目录结构:
.
├── ansible.cfg
├── inventory
├── playbook.yml
├── group_vars/
│ └── all.yml
├── host_vars/
│ └── server1.yml
├── roles/
│ ├── role1/
│ │ ├── tasks/
│ │ ├── handlers/
│ │ ├── templates/
│ │ ├── files/
│ │ ├── vars/
│ │ ├── defaults/
│ │ └── meta/
│ └── role2/
│ ├── tasks/
│ ├── handlers/
│ ├── templates/
│ ├── files/
│ ├── vars/
│ ├── defaults/
│ └── meta/
└── library/
ansible.cfg:Ansible的配置文件,可以在其中指定一些全局配置选项。
inventory:主机清单文件,用于定义要管理的主机和主机组。
playbook.yml:Ansible的主要执行文件,包含了要执行的任务和配置。
group_vars/:存放主机组的变量文件,可以在其中定义主机组的变量。
host_vars/:存放主机的变量文件,可以在其中定义单个主机的变量。
roles/:存放Ansible角色的目录,每个角色都有自己的目录结构。
library/:存放自定义的Ansible模块。
以上是一个常见的Ansible目录结构,可以根据实际需求进行调整和扩展。
13、register
Ansible的register模块用于将任务的输出结果保存到一个变量中,以便后续任务使用。
---
- name: 确保可以安装软件
hosts: 192.168.33.153
tasks:
- name: 测试是否可以下载软件
shell: yum -y reinstall tree
register: YumOutput
ignore_errors: true
- name: copy rpm.repo
copy:
src: ./files/rpm.repo
dest: /etc/yum.repos.d/rpm.repo
when: YumOutput.rc != 0
- name: mount
shell: mount /dev/sr0 /mnt
when: YumOutput.rc != 0