一 Ansible介绍
1开发流程:
aDev->QA->UAT(预生产环境)->prod(生产环境)
2定义
3流程
4实践部署
5Ansible的模式与命令
6shell模块
7script模块
二、Ansible-play语法规范
参考资料:自动化运维工具-----Ansible playbook详解-CSDN博客
1Play: 一个 Play 包含一组任务和其他指令,描述了要在哪些主机上执行哪些操作。
2Tasks:Playbook 的核心,描述了要执行的操作。
3Handlers: 一种特殊的任务,仅在被通知时执行,常用于服务的重启等操作。Tasks中的任务都是有状态的,changed或者ok。 在Ansible中,只在task的执行状态为 changed 的时候,才会执行该task调用的handler。notify 下列出的即是 handlers.
●Handlers 也是一些 task 的列表,通过名字(name)来引用。
●Handlers 是由通知者进行 notify, 如果没有被 notify,handlers 不会执行。
●andlers是按照在handlers中定义个顺序执行的,而不是安装notify的顺序执行的。比如,handlers 定义的顺序是1>2>3,notify 的顺序是3>2>1,实际执行顺序:1>2>3.
总结,Handlers 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到。
4Variables: 用于在 Playbook 中存储和传递数据。
5Roles: 将任务、变量、文件、模板等组织在一起的方式,便于重用。
Yaml语法
●大小写敏感
●使用缩进表示层级关系
●缩进时不允许使用Tab键,只允许使用空格。
●缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
●# 表示注释,从这个字符一直到行尾,都会被解析器忽略
●YAML 还有一个小的怪癖. 所有的 YAML 文件(无论和 Ansible 有没有关系)开始行都应该是 ---. 这是 YAML 格式的一部分, 表明一个文件的开始.
●列表中的所有成员都开始于相同的缩进级别, 并且使用一个 "- " 作为开头(一个横杠和一个空格)
●一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格)
●Ansible 使用 “{{ var }}” 来引用变量,foo: "{{ variable }}"。
playbook 中常用的集中变量
1在 playbook 中,用户自定义的变量
2无需用户定义,ansible 在执行 playbook 之前,去远程主机上搜集的关于远程主机的系统信息变量
3task 运行的结果「注册」为一个变量来使用,这个变量叫做「注册变量」
4允许用户在执行的时候传入变量的值,这时候用到的是「额外变量」
关键字
1.1become
become 是 Ansible Playbook 中的一个关键字,用于指示 Ansible 在执行任务时切换用户身份以获取特权权限(通常是 root 用户或其他具有特权权限的用户)。在执行某些任务时,可能需要特权权限来完成一些需要管理员权限的操作,比如安装软件包、修改系统配置等。
使用 become 时,可以在整个 Playbook 或单个任务中启用或禁用特权身份。通常,它与 become_user 或 become_method 结合使用,以指定要切换到的用户或特权获取的方法。
Plain Text复制代码
1
become: yes # 启用特权身份
指定切换的用户
Plain Text复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
---
- name: 安装 Apache
hosts: webservers
become: yes
become_user: apache
tasks:
- name: 创建一个文件夹
file:
path: /var/www/html/test
state: directory
在这个示例中,整个 Playbook 都会以 apache 用户的身份执行,因为 become_user 设置为 apache。
1.2var
1.2.1在 playbook 中,通过关键字 vars 自定义变量,用 {{}} 引用变量。
1.2.2将变量放在单独的文件中
通过 vars_files 关键字指定了变量文件
1.2.3ansible 通过 module setup 收集主机的系统信息,这些收集到的系统信息叫做 facts,这些facts可以直接以变量的形式使用。
playbook 中的逻辑控制语句
●when:条件判断,类似编程语言中的 if
●loop:循环,类似编程语言中的 while
●block:将几个 task 组成一块代码,便于针对一组操作进行异常处理等