type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Jan 7, 2024 10:07 AM
Parent item
领域
Ansible是无客户端Agent的,所以无需在客户机上安装或配置任何程序,就可以运行Ansible任务。由于Ansible不会在客户机上安装任何软件或运行监听程序,因此消除了许多管理开销。
- 控制节点(Control node):指安装了Ansible的主机。Ansible控制节点主要用于发布运行任务,执行控制命令。Ansible的程序都安装在控制节点上,控制节点需要安装Python和Ansible所需的各种依赖库。
- host文件。
- 受控节点(Managed nodes):也叫客户机,就是想用Ansible执行任务的客户服务器。
- 清单(Inventory):受控节点的列表,就是所有要管理的主机列表。
- hosts文件。用于定义将要管理的服务器。这个文件可以命名为任何名字,但我们通常会命名为hosts或者项目的名称。里面包含各种Inventory。
- 模块(Modules):模块是Ansible执行特定任务的代码块。比如:添加用户,上传文件和对客户机执行ping操作等。Ansible现在默认自带450多个模块,,Ansible Galaxy公共存储库则包含大约1600个模块。
- 任务(Task):是Ansible客户机上执行的操作。可以使用ad-hoc单行命令执行一个任务。
- 剧本(Playbook):是利用YAML标记语言编写的可重复执行的任务的列表,playbook实现任务的更便捷的读写和贡献。
- Play:通常为某个特定的目的,例如:
Setup a official website with Drupal
(借由 Drupal 建置官网)Restart the API service
(重开 API 服务)- Task:是要实行 Play 这个目地所需做的每个步骤,例如:
Install the Nginx
(安裝 Nginx)Kill the djnago process
(强制停止 django 的行程)- Module:Ansible 所提供的各种操作方法,例如:
apt: name=vim state=present
(使用 apt 套件安装 vim)command: /sbin/shutdown -r now
(使用 shutdown 的指令重新开机)
在一份 Playbook 中,可以有多个 Play、多个 Task 和多个 Module。
- 角色(roles):用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。
内置变量
添加
- 变量名:
【说明】:
- 变量名:inventory_dir
【说明】:获取到ansible主机中清单文件的存放路径
- 变量名:groups/group_names
【说明】:groups获取到清单中”所有分组”的”分组信息”,内置变量group_names获取到当前主机所在分组的组名
- 变量名:play_hosts
【说明】:获取到当前play所操作的所有主机的主机名列表
- 变量名:inventory_hostname
取到被操作的当前主机的主机名称。
- 变量名*:ansible_version**
- 变量名:hostvars
在操作当前主机时获取到其他主机中的信息。如下有2个play,在第二个play中输出了第一个play的执行主机testC的信息。
当第一个play执行时,默认会调用”[Gathering Facts]”任务,也就是说,默认会收集testC主机的facts信息,只有被收集过的facts信息才能被后面的play引用到,如果压根没有收集对应主机的facts信息,即使使用hostvars内置变量,也无法获取到对应主机的facts信息。
Jinja
ansible使用Jinja作为模板引擎。Jinja 是 Python 的模板引擎,模板引擎将将模板与数据模型结合以生成文档。 我们创建一个模板引擎,在其中定义静态零件和动态零件。 动态部分随后将替换为数据。 渲染功能随后将模板与数据结合在一起。
Jinja 在模板字符串中使用各种分隔符。
{% %}
包含表达式
{{ }}
包含变量
执行策略
在play中可以控制task的执行顺序, 关键词为strategy。策略默认为linear。
- linear策略即线性执行策略,线性执行策略指主机组内所有主机完成一个任务后才继续下一个任务的执行,在执行一个任务时,如果某个主机先执行完则会等待其他主机执行结束。说直白点就是第一个任务在指定的主机都执行完,再进行第二个任务的执行,第二个任务在指定的主机都执行完后,再进行第三个任务的执行…… 以此类推。
- free策略即自由策略,即在一个play执行完之前,每个主机都各顾各的尽可能快的完成play里的所有任务,而不会因为其他主机没执行完任务而等待,不受线性执行策略那样的约束。所以这种策略的执行结果给人感觉是无序的甚至是杂乱无章的,而且每次执行结果的task显示顺序很可能不一样。
ansible 部署 docker swarm