ansible笔记
Ansible Playbook 管理与部署 本文介绍了Ansible Playbook的基本概念和使用方法。主要内容包括: 实验环境配置:设置ansible.cfg和inventory文件,配置远程用户和特权升级参数。 Playbook基础: 将ad hoc命令转换为YAML格式的Playbook YAML语法规则:缩进、注释和多行字符串处理 Vim编辑器优化设置 Playbook编写: 包含任
ansible1
(03-编写和运行 Playbook、04-部署文件到受管主机、05-管理变量和事实)
实验环境
[bao@controller ~ 17:50:57]$ mkdir wed && cd web
# &&:这是 Linux 的命令连接符,表示 “逻辑与”:只有前面的命令(mkdir web)执行成功(返回值为 0),才会执行后面的命令(cd web);如果前面的命令失败,后面的命令会直接跳过。
# 创建(或覆盖)ansible.cfg文件,将后续内容原样写入('EOF'表示关闭特殊字符解析)。
[bao@controller web 17:53:36]$ cat > ansible.cfg <<'EOF'
> [defaults]
> remote_user = zj
> inventory = ./inventory
> [privilege_escalation]
> become = True
> become_user = root
> become_method = sudo
> become_ask_pass = False
> EOF
[bao@controller web 17:54:22]$ cat > inventory <<'EOF'
> controller
> node1
> node2
> node3
> node4
> EOF
Playbook 介绍
adhoc 命令可以作为一次性命令对一组主机运行一项简单的任务。不过,若要真正发挥Ansible的能力,需要使用功能 playbook。
playbook 是一个文本文件,其中包含由一个或多个按特定顺序运行的play组成的列表。play是针对清单中选定的主机运行的一组有序任务。play可以让您将一系列冗长而复杂的手动管理任务转变为可轻松重复的例程,并且具有可预测性。
在 playbook 中,您可以将play内的任务序列保存为人类可读并可立即运行的形式。根据任务的编写方式,任务本身记录了部署应用或基础架构所需的步骤。
ad hoc命令示例
[bao@controller web 19:30:52]$ ansible -m user -a "name=newbie uid=4000 state=present" node1
Playbooks以yaml格式编写,通常以 yaml 和 yml 扩展名保存。
改写成playbook:
[bao@controller web 19:32:33]$ vim file1.yaml
---
- name: Configure important user consistently
hosts: node1
tasks:
- name: newbie exists with UID 4000
user:
name: newbie
uid: 4000
state: present
...
yaml格式只使用空格缩进,对于空格的数量没有强制要求,正常使用2个空格。
基本规则:
- 同一级别的元素,使用相同的缩进。
- 对于子项目,使用比父项目更多的缩进。
- 增加空白行,提高可读性。
Vim 编辑器设置
如果使用vim编辑器,设置vim环境便于编辑Playbooks。
在$HOME/.vimrc文件中添加以下内容:
[bao@controller web 19:45:46]$ vim $HOME/.vimrc
set ai ts=2 number
或者
autocmd FileType yaml set ai ts=2
效果:
- “ai”,即 “autoindex”,表示自动缩进。
- “ts”,即 “tabstop”,表示tab键使用2个空格代替。
- “number”,显示行号。
- autocmd FileType yam,代表文件类型是yaml时,自动执行“set ai ts=2”。
Playbook 编写
Playbook 示例
playbook.yaml 内容如下:
# 开始:固定格式
---
# 第一个 play: 管理用户
# play的第一个属性name,代表play的说明
- name: manager user
# 定义哪些主机执行
hosts: node1
# 执行任务
tasks:
# 第一个任务:确保用户存在
# name说明任务功能
- name: ensure user newbie is exist
# 任务模块名
user:
# 模块的选项
name: newbie
uid: 4000
state: present
# 第二个任务:确保用户不存在
# name说明任务功能
- name: ensure user newbie is not exist
# 任务模块名
user:
# 模块的选项
name: newbie
uid: 4000
remove: yes
state: absent
# 结束(可省略):固定格式
...
YAML注释
在 YAML中, 编号或井号符号(#)右侧的所有内容都是注释。如果注释的左侧有内容, 请在该编号符号的前面加一个空格。注释可用于提高可读性。
示例:
# This is YAML comment
Some data # This is also a YAML comment
YAML 多行字符串
-
可以使用竖线(I)字符表示,保留字符串中的换行字符。
示例:
---
- name: test string
hosts: node1
tasks:
- name: test string
# 用户显示变量值或者字符串
debug:
msg: |
Example Company
123 Main Street
Atlanta, GA 30303
-
也可以使用大于号(>)字符表示换行字符。执行时换行符使用空格代替,并且行内的引导空白将被删除。
示例:
---
- name: test string
hosts: node1
tasks:
- name: test string
# 用户显示变量值或者字符串
debug:
msg: >
This is an example
of a long string,
that will become
a single sentence once folded.
这种方法通常用于将很长的字符串在空格字符处断行,使它们跨占多行来提高可读性。
YAML 列表
一组按次序排列的值,又称为序列(sequence)和数组(array)。
以缩进块的形式编写的键值对集合,如下方所示:
- name: latest version of httpd and firewalld installed
yum:
name:
- httpd
- firewalld
state: latest
- name: test html page is installed
copy:
content: "Welcome to the example.com intranet!\n"
dest: /var/www/html/index.html
以上有两个任务,每个任务都是多个键值对描述。其中yum模块操作的软件包是一个简单的名称列表。
内联格式:
name: [httpd, firewalld]
Playbook 运行
运行
[bao@controller web 19:48:31]$ ansible-playbook playbook.yaml

第二次执行剧本,任务状态全是绿色。

语法检查
选项–syntax-check,只检查剧本语法,不执行剧本。
[bao@controller web 20:29:24]$ ansible-playbook playbook.yaml --syntax-check
Playbook 提权
在playbook中指定此关键字将覆盖/etc/ansible/ansible.cfg文件中的设置特权升级属性
- remote_user,指定ssh用户
- become,启用或禁用特权升级
- become_method,启用特权升级的方法
- become_user,特殊升级的帐户
---
- name: Enable intranet services
hosts: node1
remote_user: laoma
become: true
become_method: sudo
become_user: root
tasks:
- name: latest version of httpd and firewalld installed
yum:
name:
- httpd
- firewalld
state: latest
services
hosts: node1
remote_user: laoma
become: true
become_method: sudo
become_user: root
tasks:
- name: latest version of httpd and firewalld installed
yum:
name:
- httpd
- firewalld
state: latest
更多推荐
所有评论(0)