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对空格缩进十分严格
 现在我的主机列表是这样的

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

 

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

开始执行

 ansible-playbook 文件路径

ansible-playbook /root/a.yml 

  

查看执行结果

 现在到了目标主上     刚刚在ansible主服务器远程执行的,成功了

列出该剧本执行主机

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

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

 

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

查看剧本任务列表

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

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

 那个aaa就是刚刚写的别名   前面的useradd 就是调用的模块

查看标签列表

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

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

 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 

 测试成功

ansible-playbook /root/yml/aaa.yml

 

成功


 触发器操作

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服务
...

实战-安装数据库

创建角色目录

mkdir -pv /etc/ansible/roles/mariadb/{files,tasks,handlers}

创建三个目录,分别用于存放,主机组,任务,触发器 这里我管他们分别叫 主机组模块   任务模块    触发器模块  当然这些模块名字是我自己起的,在实际情况中,你也可以使用模块化的思路防止乱,每个模块就是目录

vim /etc/ansible/roles/mariadb/tasks/main.yml

先对我们的《安装数据库》任务模块进行playbook编写    写入一下内容

- name: install mariadb
  yum: name=mariadb-server state=present

- name: move config file
  shell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak"

- name: provide a new config file
  copy: src=my.cnf dest=/etc/my.cnf

- name: start mariadb
  shell: systemctl start mariadb

- name: create database testdb
  shell: mysql -u root -e "create database testdb;grant all on testdb.* to 'tarro'@'192.168.254.%' identified by '123';flush privileges;"
  notify:
        - restart mariadb

 

定义触发器的主文件模块

vim /etc/ansible/roles/mariadb/handlers/main.yml

写入 

- name: restart mariadb
  service: name=mariadb state=restarted

 

cp /etc/my.cnf /etc/ansible/roles/mariadb/files/

创建主角色(选择主机组模块)

vim /etc/ansible/mariadb.yml
- hosts: web1
  remote_user: root
  roles:
  - mariadb
ansible-playbook -C /etc/ansible/mariadb.yml 

预测一下

 没问题

ansible-playbook  /etc/ansible/mariadb.yml 

开始执行

没问题,现在sshweb1组主机进行测试

ssh 192.168.254.2

 

mysql -uroot
show databases;

 

show grants for 'tarro'@'192.168.254.%';

成功 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值