Linux:ansible-playbook配置文件(剧本)

如果你还没有配置基础的ansible和一些基础用法可以去下面的链接 

playbook是基于ansible的    

Linux:ansible自动化运维工具_鲍海超-GNUBHCkalitarro的博客-CSDN博客

Linux:ansible自动化运维工具_鲍海超-GNUBHCkalitarro的博客-CSDN博客

Linux:ansible自动化运维工具_鲍海超-GNUBHCkalitarro的博客-CSDN博客


 目录

介绍 

 playbook基础组件 

 playbook基础用法(*.yml)

开始测试文件有没有问题

开始执行

查看执行结果

列出该剧本执行主机

查看剧本任务列表

查看标签列表

基础实战

 触发器操作


介绍 

我们完成一个任务,例如安装部署一个httpd服务,我们需要多个模块(一个模块也可以称之为task)提供功能来完成。而playbook就是组织多个task的容器,他的实质就是一个文件,有着特定的组织格式,它采用的语法格式是YAML(Yet Another Markup Language)。YAML语法能够简单的表示散列表,字典等数据结构。

playbook是由一个或多个模块组成的,使用多个不同的模块,完成一件事情。
编写剧本-脚本(playbook)---针对重复性的操作 


 playbook基础组件 

Hosts:运行执行任务(task)的目标主机
remote_user:在远程主机上执行任务的用户
tasks:任务列表
handlers:任务,与tasks不同的是只有在接受到通知时才会被触发
templates:使用模板语言的文本文件,使用jinja2语法。
variables:变量,变量替换{{ variable_name }}
整个playbook是以task为中心,表明要执行的任务。hosts和remote_user表明在哪些远程主机以何种身份执行。其他组件让其能够更加灵活。    

roles:角色。将hosts剥离出去。由tasks、handlers等所组成的一种特定的结构集合

Usage: ansible-playbook playbook.yml
相对于ansible,增加了下列选项:
--flush-cache # 清除fact缓存
--syntax-check # 语法检查
--force-handlers # 如果任务失败,也要运行handlers
--list-tags # 列出所有可用的标签
--list-tasks # 列出将要执行的所有任务
--skip-tags=SKIP_TAGS # 跳过运行标记此标签的任务
--start-at-task=START_AT_TASK # 在此任务处开始运行
--step 一步一步:在运行之前确认每个任务
-t TAGS, --tags=TAGS 只运行标记此标签的任务

YAML有以下基本规则: 
1、大小写敏感 
2、使用缩进表示层级关系 
3、禁止使用tab缩进,只能使用空格键 
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。 
5、使用#表示注释 
6、字符串可以不用引号标注

7.'-'表示项
8。 ’:‘ 分隔键和值
9.整个文件以‘---’开始,以'...’结束


 playbook基础用法(*.yml)

playbook的语法格式是YAML对空格缩进十分严格
 现在我的主机列表是这样的

Linux:ansible-playbook配置文件(剧本)_第1张图片

hosts详细写法在:Linux:ansible自动化运维工具_鲍海超-GNUBHCkalitarro的博客-CSDN博客

要写的playbook文件后缀必须以   .yml    结尾 

创建一个文件   名字随便写 后缀要yml    我这里叫   a.yml

vim /root/a.yml

放在哪里无所谓

 写入以下内容

---
# --- 代表着开始  ...就是结束
- hosts: web1
# 选择web1主机组   -   代表项   前面两个缩进
  remote_user: root
# 远程执行的用户
  tasks:
# tasks是任务列表
      - name: useradd
        # 任务名称  四缩进
        user: name=test1111 state=present
        # 调用user模块执行
        tags:
            - aaa
        # 标签(别名)
...

---开始...结束上面的#注释就是上面一条命令的解释

开始测试文件有没有问题

ansible-playbook --syntax-check 文件路径

ansible-playbook --syntax-check /root/a.yml

 

没问题,但是预测试,并不真正执行命令

 ansible-playbook -C 文件路径

ansible-playbook -C /root/a.yml

 Linux:ansible-playbook配置文件(剧本)_第2张图片

如果都没有问题,那么恭喜你,他就可以执行了

开始执行

 ansible-playbook 文件路径

ansible-playbook /root/a.yml 

Linux:ansible-playbook配置文件(剧本)_第3张图片

  

查看执行结果

Linux:ansible-playbook配置文件(剧本)_第4张图片 现在到了目标主上     刚刚在ansible主服务器远程执行的,成功了

列出该剧本执行主机

ansible-playbook --list-hosts 文件路径

ansible-playbook --list-hosts /root/a.yml 

 Linux:ansible-playbook配置文件(剧本)_第5张图片

可以看到刚刚写的剧本里的,只有对web1组执行,那个组里包含了 192.168.254.2主机

查看剧本任务列表

ansible-playbook --list-tasks  文件路径

ansible-playbook --list-tasks  /root/a.yml

Linux:ansible-playbook配置文件(剧本)_第6张图片 那个aaa就是刚刚写的别名   前面的useradd 就是调用的模块

查看标签列表

ansible-playbook --list-tags 文件路径

ansible-playbook --list-tags /root/a.yml 

Linux:ansible-playbook配置文件(剧本)_第7张图片

 aaa就是标签也是别名的意思


基础实战

我现在有两个主机组,现在web1 要求添加一个用户 和一个组   用户名为:tarro1111   组名为:tarrogroup

web2上  把ansible服务器上的/etc/passwd 文件  复制到web2的/root下

vim /root/yml/aaa.yml
---
- hosts: web1
  remote_user: root
  tasks:
      - name: useradd
        user: name=tarro1111 state=present
        tags:
            - usertarro1111

      - name: groupadd
        group: name=tarrogroup system=yes
        tags:
            - grouptarrogroup


- hosts: web2
  remote_user: root
  tasks:
      - name: copypasswd
        copy: src=/etc/passwd dest=/root
        tags:
            - ccc
~                  
ansible-playbook --syntax-check /root/yml/aaa.yml 
ansible-playbook -C /root/yml/aaa.yml 

Linux:ansible-playbook配置文件(剧本)_第8张图片

 测试成功

ansible-playbook /root/yml/aaa.yml

Linux:ansible-playbook配置文件(剧本)_第9张图片

Linux:ansible-playbook配置文件(剧本)_第10张图片 Linux:ansible-playbook配置文件(剧本)_第11张图片

成功


 触发器操作

vim /etc/ansible/httpd.yml

随便创建一个*.yml 

---
- hosts: web1
# 对web1主机组执行
  remote_user: root
# 远程用户使用root
  tasks:
#任务列表
        - name: change port
		# 任务名称
          command: sed -i 's/Listen\ 80/Listen \ 8080/g' /etc/httpd/conf/httpd.conf  
            ##调用command模块,编辑httpd文件,更改侦听端口为8080

          
          notify:
        ##配置触发条件,触发名称与下列的触发器名称对应

                - restart httpd server
                # 这里的和下面的名称一样就行
				
				
  handlers:
##配置触发器

        - name: restart httpd server
	##触发器名称
          service: name=httpd state=restarted  
		##调用服务模块,重启httpd服务
...

你可能感兴趣的:(linux,ansible,运维)