执行单个任务实例:
//安装httpd服务
name: This is test example playbook
hosts: 192.168.121.81 #如果是多个主机,可以使用all表示对所有主机操作
tasks:
//执行example.yml文件
[root@localhost ~]# ansible-playbook example.yml
PLAY [This is test example playbook] **************************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************************************
ok: [192.168.121.81]
TASK [install httpd] ******************************************************************************************************************************************************
changed: [192.168.121.81]
PLAY RECAP ****************************************************************************************************************************************************************
192.168.121.81 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
执行多个任务实例:
//执行多个任务,先安装httpd服务,然后启动httpd服务
name: This is test example playbook
hosts: 192.168.121.81
tasks:
name: install httpd
yum:
name: httpd
state: present
name: start httpd service
service:
name: httpd
state: started
enabled: yes
//执行example.yml文件
[root@localhost ~]# ansible-playbook example.yml
PLAY [This is test example playbook] **************************************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************************************
ok: [192.168.121.81]
TASK [install httpd] ******************************************************************************************************************************************************
ok: [192.168.121.81]
TASK [start httpd service] ************************************************************************************************************************************************
changed: [192.168.121.81]
PLAY RECAP ****************************************************************************************************************************************************************
192.168.121.81 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
//查看受管主机上httpd服务状态
[root@localhost ~]# ansible 192.168.121.81 -m shell -a 'systemctl status httpd'
192.168.121.81 | CHANGED | rc=0 >>
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-08-29 14:34:37 CST; 2min 15s ago
Docs: man:httpd.service(8)
Main PID: 17031 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 11340)
Memory: 43.4M
CGroup: /system.slice/httpd.service
├─17031 /usr/sbin/httpd -DFOREGROUND
├─17033 /usr/sbin/httpd -DFOREGROUND
├─17034 /usr/sbin/httpd -DFOREGROUND
├─17035 /usr/sbin/httpd -DFOREGROUND
└─17036 /usr/sbin/httpd -DFOREGROUND
Aug 29 14:34:37 localhost.localdomain systemd[1]: Starting The Apache HTTP Server…
Aug 29 14:34:37 localhost.localdomain httpd[17031]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Aug 29 14:34:37 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Aug 29 14:34:37 localhost.localdomain httpd[17031]: Server configured, listening on: port 80
输出详细程度命令:
选项
描述
-v
显示任务结果
-vv
任务结果和任务配置都会显示
-vvv
包含关于与受管主机连接的信息
-vvvv
增加了连接插件相关的额外详细程序选项,包括受管主机上用于执行脚本的用户以及所执行的脚本
在执行playbook之前,最好要进行验证,确保其内容的语法正确无误。ansible-playbook命令提供了一个--syntax-check选项,可用于验证playbook的语法
语法实例:
[root@ansible roles]# ansible-playbook --syntax-check vhosts.yaml
playbook: vhosts.yaml
//没有报错,说语法没有错误
可以使用-C选项对playbook执行空运行。这会使Ansible报告在执行该playbook时将会发生什么更改,但不会对受管主机进行任何实际的更改
检测实例:
[root@ansible roles]# ansible-playbook -C vhosts.yaml
……..
Playbook是一个YAML文件,含有由一个或多个play组成的列表,记住一个play按顺序列出了要对清单中的选定主机执行的任务
Playbook中的各个play编写为playbook中的顶级列表项。各个play是含有常用play关键字的列表项
演示实例:
---
name: first play
hosts: 192.168.121.81
tasks:
name: first task
yum:
name: httpd
status: present
name: second task
service:
name: httpd
enabled: true
name: second play
hosts: 192.168.121.82
tasks:
Playbook可以将不同的远程用户或特权升级设置用于play,取代配置文件中指定的默认设置。这些在playbook本身中与hosts或tasks关键字相同的级别上设置
1️⃣:用户属性
playbook中的任务通常通过与受管主机的网络连接来执行
用于任务执行的用户帐户取决于Ansible配置文件/etc/ansible/ansible.cfg中的不同关键字
运行任务的用户可以通过remote_user关键字来定义。不过,如果启用了特权升级,become_user等其他关键字也会发生作用
如果用于任务执行的Ansible配置中定义的远程用户不合适,可以通过在playbook中使用remote_user关键字覆盖
演示实例:(remote_user 表示连接远程主机的用户名)
---
2️⃣:特权升级属性
Ansible也提供额外的关键字,从而在playbook内定义特权升级参数
become布尔值关键字可用于启用或禁用特权升级,无论它在Ansible配置文件中的定义为何。它可取yes或true值来启用特权升级,或者取no或false值来禁用它
演示实例:(使用“true”或“yes”来表示启用这个特权,如:become=true)
---
如果启用了特权升级,则可以使用become_method关键字来定义特定playbook期间要使用的特权升级方法
演示实例:(become_method=sudo 表示用什么方式将普通账户切换到root或所需的其他账户,同样包括普通用户使用sudo执行命令,这里可以用su或sudo)
---
此外,启用了特权升级时,become_user关键字可定义特定play上下文内要用于特权升级的用户帐户
演示实例:(become_user=root 设置为root账户,相当于我们以普通账户登入到远程主机时,再使用su - root切换为root账户)
---
3️⃣:演示如何在play中使用关键字
---
name: /etc/hosts is up to date
hosts: 192.168.121.81
remote_user: root
become: yes
tasks:
1️⃣:对于每一个模块,Ansible官网提供了其功能摘要,以及关于如何通过模块的选项来调用各项具体功能的说明
ansible-doc -l命令。这将显示模块名称列表以及其功能的概要
2️⃣:使用ansible-doc [module name]命令来显示模块的详细文档
演示实例:
[root@ansible ~]# ansible-doc yum
3️⃣:ansible-doc命令还提供-s选项,它会生成示例输出,可以充当如何在playbook在使用特定模块的示范,此输出可以作为起步模板,包含在实施该模块以执行任务的playbook中。输出中包含的注释,提醒管理员各个选项的用法
演示实例:
[root@ansible ~]# ansible-doc -s yum
1️⃣:YAML注释
2️⃣:YAML字符串
YAML中的字符串通常不需要放在引号里,即使字符串中包含空格。字符串可以用双引号或单引号括起
实例:
this is a string
'this is another string'
"this is yet another a string"
编写多行字符串有两种方式。可以使用管道符表示要保留字符串中的换行字符
实例:
include_newlines: |
Example Company
123 Main Street
Atlanta, GA 30303
要编写多行字符串,还可以使用大于号字符来表示换行字符转换成空格并且行内的引导空白将被删除
实例:
fold_newlines: >
This is an example
of a long string,
that will become
a single sentence once folded.
3️⃣:YAML字典
字典实例:
name: svcrole
svcservice: httpd
svcport: 80
4️⃣:YAML列表
实例:
hosts:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章