ansible——编写基本的ansible playbook

文章目录

  • 一、playbook简介
    • 1.playbook
    • 2. yaml语法
  • 二、编写和运行playbook
    • 1. 简单的playbook示例
      • 1.1 引入:由临时命令改写playbook
      • 1.2 示例:安装Apache
      • 1.3 示例:确保服务开机启动
    • 2. 语法验证和空运行
    • 3. 示例多任务:安装、配置默认发布页并启动 apache
  • 三、实施多个playbook

一、playbook简介

1.playbook

  1. Playbook:是利用YAML标记语言编写的可重复执行的任务的列表。
  2. 也可以这么理解,playbook 字面意思,即剧本。现实中由演员按照剧本表演;在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。
  3. 运行过程: ansbile-playbook命令根据自上而下的顺序依次执行。 注意,运行时要求环境中有清单和配置文件
  4. 输出信息绿色代表执行成功,系统保持原样;黄色代表系统代表系统状态发生改变;红色代表执行失败,显示错误输出。
  5. 提高输出详细信息:ansible-playbook 默认输出不提供详细任务执行信息。-v 参数提供,共四个级别:
参数 作用
-v 显示任务结果
-vv 显示任务结果和任务配置
-vvv 包含关于与受管主机的连接信息
-vvvv 增加连接插件相关的额外详细程度选项(包括受管主机上用于执行脚本的用户及所执行的脚本)

2. yaml语法

  1. yaml 格式通常以 yml为扩展名 (xxxx.yml),yaml 对于缩进量没有严格要求,但是有两个基本原则:
    (1)处于同一层次结构中同一级别的数据元素必须具有相同的缩进量
    (2)如果项目属于其他项目的子项,其缩进量必须大于父项
  2. 编写yaml文件时,文件的第一行以 “—” (三个英文破折号)开始,表明YMAL文件的开始。以“…”(三个省略号)结束标记,通常可以省略。
  3. YMAL中的列表元素以 ”-”开头然后紧跟着一个空格,后面为元素内容。
  4. 核心元素:
    hosts:主机;remoute_user: 在远程主机上执行任务的用户;tasks:任务列表;
    variables: 变量;templates:包含了模板语法的文本文件;handlers:由特定条件触发的任务;
  5. playbook中hosts,tasks等元素的表示方法都是键值中间以”:”分隔表示,”:”后面还要增加一个空格
  6. playbook本身是一个键值对集合,同一playbook中的键应当使用相同的缩进量。
  7. yaml注释:在编写时可以在所要注释的字符前使用 “#” 直接注释掉
  8. yaml字符串:使用单引号或者双引号来设定字符串
例如:this is a string
'this is a string'  	#表示字符串
"this is a string"

二、编写和运行playbook

1. 简单的playbook示例

1.1 引入:由临时命令改写playbook

  1. 查看指定用户的临时命令 ansible -m user -a “name=student uid=1000 state=present” servera.lab.example.com
    ansible——编写基本的ansible playbook_第1张图片
  2. 改写playbook查看指定用户:
---					#文档开始标记
- name: Configure User 			#name非必要,但建议使用,可以注明文档的用途
  hosts: servera.lab.example.com	#指定受管主机
  tasks:				#任务
    - name: Student user		#指定任务名称
      user:				#使用user模块
         name: student			#user模块参数注明用户名称,id,状态
         uid: 1000
         state: present
...					#结束标记

ansible——编写基本的ansible playbook_第2张图片

1.2 示例:安装Apache

受管主机:severa.lab.example.com,在默认清单里面添加;
列出 yum 的用法和示例ansible-doc yum;
终端中输出 yum 模块中各参数的用法ansible-doc -s yum
注意:在使用yum模块时,要确保受管主机的yum源没有问题。
ansible——编写基本的ansible playbook_第3张图片

---
- name: Setup Webserver
  hosts: servera.lab.example.com
  tasks:
    - name: Http Installed
      yum:			#yum模块
        name: httpd		#yum模块参数,name指定安装的服务名称
        state: latest		#state指定状态,latest表示安装最新版本
...

ansible——编写基本的ansible playbook_第4张图片
ansible——编写基本的ansible playbook_第5张图片

1.3 示例:确保服务开机启动

---
- name: Setup Webserver
  hosts: servera.lab.example.com
  tasks:				#执行两个任务
    - name: Apache is enabled		
      service:				#service模块
        name: httpd			#模块参数name,enabled
        enabled: true			#确保httpd服务开启启动
    - name: Vsftpd is enabled		#同一级别的元素必须采用相同的缩进量
      service:
        name: vsftpd
        enabled: true			#确保vsftpd服务开机启动
...

ansible——编写基本的ansible playbook_第6张图片
ansible——编写基本的ansible playbook_第7张图片

2. 语法验证和空运行

  1. 执行playbook前最好进行语法验证,当编写出现错误时,会出现字符ERROR,提示错误位置
    命令:ansible-playbook --syntax-check xxx.yml
    ansible——编写基本的ansible playbook_第8张图片
  2. 执行空运行,空运行会报告执行这个 playbook 将会发生什么,但不会改变目标主机
    命令:ansible-playbook -C xxx.yml

3. 示例多任务:安装、配置默认发布页并启动 apache

  1. 在管理主机中设定源默认发布页面文件:vim /root/html/index.html
    ansible——编写基本的ansible playbook_第9张图片
  2. 创建配置文件和清单:在新建的目录里创建
    ansible——编写基本的ansible playbook_第10张图片
  3. 编辑playbook: vim site.yml
---
- name: Install and Start Apache
  hosts: web					#指定受管主机组为web
  tasks:					#多任务
    - name: Apache is present			#检测Apache是否已经存在
      yum:					#不存在则安装Apache
        name: httpd
        state: present
    - name: Change index.html			#更改默认发布页面
      copy:					#使用copy模块
        src: /root/html/index.html		#源文件:从管理主机的文件中复制发布页面文件
        dest: /var/www/html/index.html		#目的地:复制到受管主机的默认发布文件
    - name: Start Apache			#开启Apache服务
      service:					#使用service模块
        name: httpd				#模块参数name,state,enable
        state: started
        enabled: true
...
  1. 语法检测ansible-playbook --syntax-check site.yml
    ansible——编写基本的ansible playbook_第11张图片
  2. 执行playbookansible-playbook site.yml
    ansible——编写基本的ansible playbook_第12张图片
  3. 测试:测试时要关闭受管主机组的防火墙
    在这里插入图片描述
    在这里插入图片描述
    ansible——编写基本的ansible playbook_第13张图片

三、实施多个playbook

示例:启动内部网服务并进行验证。
当受管主机上的火墙开启并处于enable状态,而且受管主机上没有安装Apache服务时,通过执行多剧本可以完成Apache服务的部署,可以指定并成功访问受管主机的默认发布页面内容。

  1. 建立配置文件和清单:
    ansible——编写基本的ansible playbook_第14张图片
  2. 编辑多剧本:vim intranet.yml
---
- name: Enable intranet services	####第一个play:启动内部网服务####
  hosts: web				#指定主机为受管主机
  become: yes				#此play中提升用户身份,超级用户才有权限修改默认发布页面
  tasks:				#此play中有5个任务
    - name: latest version of httpd and firewalld installd	#检测httpd和firewalld是否安装和是否是最新版本
      yum:							#使用yum模块
        name:
          - httpd
          - firewalld
        state: latest
    - name: test html page is configured			#检测是否配置默认发布页面
      copy:
        content: "Welcome to Apache!"				#使用content参数可以指定默认发布页面内容,字符串用双引号表示。
        dest: /var/www/html/index.html
    - name: firewalld enabled and running			#检测防火墙是否开启并处于enable状态
      service:
        name: firewalld
        enabled: true
        state: started
    - name: firewalld permits access to httpd service		#检测防火墙是否允许 httpd 服务访问
      firewalld:						#使用firewalld模块添加httpd服务
        service: http
        state: enabled
        permanent: true        					#永久添加服务
        immediate: yes						#立即生效
    - name: httpd enabled and running				#检测 httpd 是否开启和设置开机启动
      service:
        name: httpd
        enabled: true
        state: started
- name: Test intranet web server	####第二个play:在本机测试####
  hosts: localhost			#此play指定主机为管理主机
  become: no				#此play不升级用户身份
  tasks:
    - name: connect to intranet web server			#测试访问 servera
      uri:							#使用uri模块
        url: http://servera.lab.example.com			#使用url参数获取链接
        return_content: yes					#是否返回页面内容
        status_code: 200					#状态码为200表示成功
  1. 语法检测:ansible-playbook --syntax-check intranet.yml
    在这里插入图片描述
  2. 执行:ansible-playbook intranet.yml
    ansible——编写基本的ansible playbook_第15张图片
  3. 验证:访问servera
    在这里插入图片描述

你可能感兴趣的:(ansible)