Ansible自动化运维工具---Playbook

这篇具有很好参考价值的文章主要介绍了Ansible自动化运维工具---Playbook。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、playbook

playbook是剧本的意思,通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。

playbook各部分组成

Tasks: 任务,即调用模块完成的某操作

Variables: 变量

emplates: 模板

Handlers: 处理器,当某条件满足时,触发执行的操作

Roles: 角色

playbook yaml语法是换行空两格,-和:后必须空一格

playbook由YMAL语言编写,YAML是一种非标记语言。是用来写配置文件的语言,非常简洁合强大

  • YAML语法和其他语言类似,也可以表达散列表、标量等数据结构

  • 结构通过空格来展示

  • 序列里配置项通过 - 来表示

  • Map里的键值用:来分隔

  • YAML的扩展名为yaml

1、playbook简介

Playbooks 是 Ansible的配置、部署、编排语言,他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合。

Playbooks 与 ad-hoc相比,是一种完全不同的运用ansible的方式,是非常之强大的。

简单来说,playbooks是一种简单的配置管理系统与多机器部署系统的基础,与现有的其他系统有不同之处,且非常适合于复杂应用的部署。

playbook是ansible用于配置,部署,和管理被控节点的剧本。

通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。

也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

2、playbook应用场景

(1)执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。

(2)就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。

(3)使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单。

3、yaml基本语法规则

大小写敏感
使用缩进表示层级关系
缩进时不允许使用tab键、只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

hosts 定义接节点,可以是组
remote_user 是你以什么身份进行登录
tasks 是你的任务
become:yes 表示切换用户
become_user:mysql 表示切换到mysql用户,配合上一条使用
-name: 为下面执行的操作起名

4、yaml支持数据结构

对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)

数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)

纯量:单个的、不可再分的值

二、Inventory中的变量

Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts

1、inventor变量参数

Ansible自动化运维工具---Playbook

三、playbook实例

基本命令介绍

ansible-playbook xxx.yaml --syntax-check   			   		 #检查yaml文件的语法是否正确
ansible-playbook xxx.yaml --list-task     					 #检查tasks任务
ansible-playbook xxx.yaml --list-hosts     					 #检查生效的主机
ansible-playbook xxx.yaml --start-at-task='xxx'			     #指定从某个task开始运行
 
- hosts: webserver   #指定主机组,可以是一个或多个组
 
remote_user: root 	 #指定远程主机执行的用户名
参数 说明
-k(-ask-pass) 用来交互输入ssh密码
-K(-ask-become-pass) 用来交互输入sudo密码
-u 指定用户
-e 引入变量值

1、编写httpd的playbook

[root@Ansible opt]#vim test1.yaml 

---    #yaml文件以---开头,以表明这是一个yaml文件,可省略
- name: first play   #定义一个play的名称,可省略
  gather_facts: false   #设置不进行facts信息收集,这可以加快执行速度,可省略
  hosts: webservers    #指定要执行任务的被管理主机组,如多个主机组用冒号分隔
  remote_user: root   #指定被管理主机上执行任务的用户
  tasks:   #定义任务列表,任务列表中的各任务按次序逐个在hosts中指定的主机上执行
   - name: test connection  #自定义任务名称
     ping:        #使用 module: [options] 格式来定义一个任务
   - name: disable selinux   
     command: '/sbin/setenforce 0'   #command模块和shell模块无需使用key=value格式
     ignore_errors: True   #如执行命令的返回值不为0,就会报错,tasks停止,可使用ignore_errors忽略失败的任务
   - name: disable firewalld
     service: name=firewalld state=stopped enabled=no  #使用 module: options 格式来定义任务,option使用key=value格式
   - name: install httpd
     yum: name=httpd state=latest
   - name: install configuration  httpd
     copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf   #这里需要一个事先准备好的/opt/httpd.conf文件
     notify: "restart httpd"  #如以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作    
   - name: start httpd service
     service: enabled=true name=httpd state=started
  handlers:    #handlers中定义的就是任务,此处handlers中的任务使用的是service模块
   - name: restart httpd    #notify和handlers中任务的名称必须一致
     service: name=httpd state=restarted
[root@Ansible opt]#ansible-playbook test1.yaml     运行playbook

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook

2、tasks列表和action

Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。
在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook 中的错误,然后重新执行即可。

Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致。

每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。如果没有定义name,‘action’的值将会用作输出信息中标记特定的task。

定义一个task,常见的格式:”module: options” 例如:yum: name=httpd

ansible的自带模块中,command模块和shell模块无需使用key=value格式

[root@Ansible opt]#vim error.yaml

- hosts: webservers
  remote_user: root
  tasks:
   - name: disable selinux
     command: '/sbin/setenforce 0'
     ignore_errors: True
   - name: make sure apache is running
     service: name=httpd state=started
[root@Ansible opt]#ansible-playbook error.yaml 

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook

3、条件测试

[root@Ansible opt]#vim when.yaml

- hosts: webservers
  remote_user: root
  tasks:
  - name: "shutdown CentOS"
    command: /sbin/shutdown -h now
    when: ansible_distribution == "CentOS"
[root@Ansible opt]#ansible-playbook when.yaml

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook

4、迭代

当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句指明迭代的元素列表即可。

[root@Ansible opt]#vim test3.yaml 
---
- name: play1
  hosts: dbservers
  gather_facts: false
  tasks:
    - name: create directories
      file:
        path: "{{item}}"
        state: directory
      with_items:          #等同于 loop:
        - /tmp/test1
        - /tmp/test2
    - name: add users
      user: name={{item.name}} state=present groups={{item.groups}}
      with_items:
        - name: test1
          groups: wheel
        - name: test2
          groups: root
[root@Ansible opt]#ansible-playbook test3.yaml 

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook

5、with_items模块

[root@Ansible opt]#vim test4.yaml

---
 - name: test1
   hosts: webservers
   gather_facts: false
   tasks:
    - name: create directories
      file:
        path: "{{item}}"
        state: directory
#路径调用变量item,变量值为下面的with_items的内容,一次执行一个有几个值执行几次,state为创建类型为目录
      with_items:
        - /tmp/test1
        - /tmp/test2
    - name: create file
      file:
        path: "{{item}}"
        state: touch
#路径调用变量item,变量值为下面的with_items的内容,一次执行一个有几个值执行几次,state为创建类型为文件
      with_items:
        - /tmp/test1/zz.txt
        - /tmp/test2/zt.txt
[root@Ansible opt]#ansible-playbook test4.yaml 

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook

6、template模块

先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量,cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

[root@Ansible opt]#vim httpd.conf.j2
Listen {{http_port}}				#42行,修改
ServerName {{server_name}}			#95行,修改
DocumentRoot "{{root_dir}}"          #119行,修改
#修改完保存退出

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook
修改主机清单文件,使用主机变量定义一个变量名相同,而值不同的变量

[root@Ansible opt]#vim /etc/ansible/hosts

[webservers]
192.168.10.136 http_port=192.168.10.136:80 server_name=www.zzt.com:80 root_dir=/var/www/html
[dbservers]
192.168.10.137 http_port=192.168.10.137:80 server_name=www.zz.com:80 root_dir=/var/www/html
#修改完保存退出
[root@localhost opt]#vim /etc/hosts

192.168.10.136 www.zzt.com
192.168.10.137 www.zz.com

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook

[root@Ansible opt]#vim httpd.yaml

---
- hosts: all
  remote_user: root
  gather_facts: false
  vars:
  - package: httpd
  - service: httpd
  tasks:
    - name: install httpd
      yum: name={{package}} state=latest
    - name: con test
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify:
         - restart httpd
    - name: start httpd
      service: name={{service}} state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted
[root@Ansible opt]#ansible-playbook httpd.yaml 

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook

7、tags模块

[root@Ansible opt]#vim test01.yaml

---
- hosts: webservers
  remote_user: root
  gather_facts: false
  tasks:
    - name: copy hosts
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
      - tags1
    - name: touch file
      file: path=/opt/testhost state=touch
      tags:
      - always
[root@Ansible opt]#ansible-playbook test01.yaml

Ansible自动化运维工具---Playbook
Ansible自动化运维工具---Playbook

四、Playbook中使用Roles模块

Ansible为了层次化、结构化的组织Playbook,使用角色roles可以根据层次结构自动装载变量文件、task以及handlers等。

roles 内各目录含义解释
●files
用来存放由 copy 模块或 script 模块调用的文件。

●templates
用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。

●tasks
此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。

●handlers
此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。

●vars
此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。

●defaults
此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。

●meta
此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。

1、创建以roles命令的目录

[root@Ansible ~]#mkdir /etc/ansible/roles/ -p

2、创建全局变量目录

[root@Ansible ~]#mkdir /etc/ansible/group_vars/ -p
[root@Ansible ~]#mkdir /etc/ansible/group_vars/all

3、在roles目录中分别创建以各角色名称命令的目录

[root@Ansible ~]#mkdir /etc/ansible/roles/httpd
[root@Ansible ~]#mkdir /etc/ansible/roles/mysql

4、在每个角色命令的目录中分别创建

files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建

[root@Ansible ~]#mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
[root@Ansible ~]#mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}
[root@Ansible ~]#

5、在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件

千万不能自定义文件名

[root@Ansible ~]#touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
[root@Ansible ~]#touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
[root@Ansible ~]#

6、修改 site.yml 文件,针对不同主机去调用不同的角色

[root@Ansible ~]#vim /etc/ansible/site.yml
---
- hosts: webservers
  remote_user: root
  roles:
     - httpd
- hosts: dbservers
  remote_user: root
  roles:
     - mysql
[root@Ansible ~]#cd /etc/ansible/
[root@Ansible ansible]#ansible-playbook site.yml

Ansible自动化运维工具---Playbook文章来源地址https://www.toymoban.com/news/detail-436330.html

到了这里,关于Ansible自动化运维工具---Playbook的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ansible】自动化运维ansible之playbook剧本编写与运行

    目录 一、ansible剧本playbook的组成 二、palybook的基础应用: 实操1:通过palybooks完成nginx的安装 第一种:通过yum安装nginx 第二种:通过编译安装nginx 实操2:playbook定义、引用变量​​​​​​​ 实操3:通过playbook完成普通账户权限提权为root用户 实操4:通过when条件判断指定主机

    2024年02月20日
    浏览(34)
  • 【云原生】Ansible自动化批量操作工具&playbook剧本

    目录 1.playbook相关知识 1.1 playbook 的简介 1.2 playbook的 各部分组成 2. 基础的playbook剧本编写实例 2.1 playbook编写Apache安装剧本(yum方式安装)  报错集:  实例2:playbook编写nginx 的yum安装并且能修改其监听端口的剧本 实例3:定义、引用变量  实例4:指定远程主机sudu切换用户

    2024年02月10日
    浏览(34)
  • Ansible自动化运维工具

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 ansible 自动化运维工具(机器管理工具) 可以实现批量管理多台(成百上千)主机,应用级

    2024年02月14日
    浏览(39)
  • 自动化运维工具—Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 市面上其他自动化工具:pupet(ruby语言) saltstack(python) chef(C/S模式)等 Ansible能批量配

    2024年02月10日
    浏览(36)
  • 自动化运维工具——Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月14日
    浏览(40)
  • Ansible 自动化运维工具

    目录 一: Ansible 简介   Ansible与其他自动化运维工具对比  二: ansible 环境安装部署   三:ansible 命令行模块 1、command 模块 2、 shell 模块 3、 cron 模块 4、 user 模块 5、 group 模块  6、copy 模块 7、 file 模块  8、hostname 模块 9、ping 模块 10、 yum 模块 11、 service/systemd 模块

    2024年02月15日
    浏览(35)
  • 自动化运维工具之Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月08日
    浏览(59)
  • 自动化运维工具——Ansible学习(二)

    目录 一、handlers和notify结合使用触发条件 1.新建httpd.yml文件 2.复制配置文件到ansible的files目录中 3.卸载被控机已安装的httpd 4.执行httpd.yml脚本 5.更改httpd.conf配置文件 6.使用handlers 7.重新执行httpd.yml脚本 8.检查被控机的端口号是否改变 9.handlers也可以触发多个 二、tags 1.通过指定

    2024年02月16日
    浏览(37)
  • Ansible 自动化运维工具(完善版)

    目录  Ansible概述 Ansible特点 Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 Ansible的搭建 环境 ansible主机 1、ansible 2、Ansible-doc Ansible模块 1.command模块 2.shell模块 3.raw模块 Ansible是最近非常火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工

    2024年02月16日
    浏览(34)
  • 自动化运维工具-------Ansible(超详细)

    Ansible是自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能, ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架 。 1)、no agents:不需要在

    2024年02月10日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包