使用Ansible中的playbook

使用Ansible中的playbook

  • 1 playbook的功能
  • 2 YMAL
    • 2.1 简介
    • 2.2 特点
    • 2.3 语法简介
    • 2.4 YAML列表
    • 2.5 YAML的字典
  • 3 playbook执行命令
  • 4 playbook的核心组件
  • 5 vim设定技巧
  • 6 练习

1 playbook的功能

  • playbook是由一个或多个play组成的列表
  • playbook文件是用YAML来写的
  • playbook是一种简单的配置管理系统与多机器部署系统的基础,非常适合于复杂应用的部署
  • playbook可以用于声明配置,更强大的地方在于,在playbook中可以编排有序执行过程,甚至做到在多组机器间来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务

2 YMAL

2.1 简介

YMAL全称是Yet Another Markup Language,是一种表达资料序列的格式,类似XML

2.2 特点

  • 可读性好
  • 和脚本语言交互性好
  • 易于实现
  • 适用程序执行流梳理方式
  • 可扩展性强

2.3 语法简介

  • 在文件中用- - -开始
  • 在文件中用…结束
  • 次行一般书写文件内容
  • 缩进严格且大小写敏感
  • Key/Value可以多行书写也可以一行书写
  • Value可以是字符串也可以是List
  • 一个Play需要包括Name和Tasks
  • Name是描述,Tasks是动作
  • 一个Name只能包含一个Task
  • 扩展名为yml或者yaml

2.4 YAML列表

[Linux,C++,Java,Python]

- Linux
- C++
- Java
- Python

2.5 YAML的字典

  • 字典用于存放键值
  • 其表达方式有两种
    • name:Test
      age:12
      jobs:linux
    • {name: “Test”, age: “12”, jobs: “linux”}

注意:列表元素前必须加 ‘-’,但是字典前面不加

3 playbook执行命令

常用的参数:

参数 含义
–check / -C 预检测
–syntax-check 语法检测
–list-hosts 列出hosts
–list-tasks 列出tasks
–list-tags 列出tag
–limit 指定执行主机
-v / -vv / -vvv 显示实现过程;v越多,显示的越详细

1)编写一个yml文件,如下所示:
使用Ansible中的playbook_第1张图片
注意:上面的playbook片段,实际上和ansible westos -m shell -a ‘hostname’的含义相同
2)进行预执行检测,实际上没有执行只是进行检测:
使用Ansible中的playbook_第2张图片
进行语法检测,注意语法检测是不执行的,只是检测语法:
在这里插入图片描述
列出受控主机:
使用Ansible中的playbook_第3张图片
列出yml文件中的任务:
使用Ansible中的playbook_第4张图片
指定主机执行检测行为:
使用Ansible中的playbook_第5张图片
执行该playbook文件:
使用Ansible中的playbook_第6张图片
加上-v参数,显示部分执行过程,此时就可以看到该文件的执行结果:
使用Ansible中的playbook_第7张图片

3)修改test.yml文件,如下直接将模块当作一个列表,模块的参数使用键值表达,这样的表达方法也是成立的:
使用Ansible中的playbook_第8张图片
显示执行过程,如下所示:
使用Ansible中的playbook_第9张图片

注意:默认当某个playbook片段执行失败后会自动结束,不再执行下面的语句

4 playbook的核心组件

核心组件 含义
name 可选的,建议用于说明
hosts 受控主机列表
tasks 任务,用于选择执行部分代码

5 vim设定技巧

  • 可以在~/.vimrc文件中设定:autocmd FileType yaml setlocal ts=2 ai et sw=2 ,表示只对playbook文件生效
    • setlocal:设定当前文件
    • ai :自动退格对齐
    • ts:设置tab键长度
    • sw:缩进长度为
    • et:把tab键变成空格

1)playbook具有严格的缩进和语法限制,为了方便缩进,可以设置如下,tab键长度为2:

在这里插入图片描述

2)只对playbook文件生效的vim设定:
在这里插入图片描述
注意:

  • 设置之后使用cat命令查看某个vim文件,是不会有行号的,但文件里里会有行号显示
  • vim的set设定表示对所有打开的vim文件都有效,对新打开的vim也生效
  • vim的setlocal设定表示只对当前的vim文件有效,若再打开新的vim,则不生效

6 练习

1)使用playbook配置vsftpd服务,授权匿名用户登录,并添加一个测试文件到默认发布目录下:
先将之前下载过的安装包删除:
使用Ansible中的playbook_第10张图片

---
- name: VSftpd server
  hosts: 172.25.254.136
  tasks:
    - name: install vsftpd
      dnf:
        name: vsftpd
        state: latest
        disable_gpg_check: yes
    - name: firewalld setup
      firewalld: 
        service: ftp
        permanent: yes
        state: enabled
        immediate: yes
        zone: public
    - name: anon yes
      lineinfile:
        path: /etc/vsftpd/vsftpd.conf
        regexp: "anonymous_enable=NO"
        line: "anonymous_enable=YES"
    - name: chmod 
      file:
        path: /var/ftp/pub/
        mode: 775
        group: ftp
        state: directory
        recurse: yes
    - name: touch Testfile 
      lineinfile: 
        path: /var/ftp/pub/Testfile
        line: Test
        create: yes
    - name: start service
      service:
        name: vsftpd
        state: started
        enabled: yes

使用Ansible中的playbook_第11张图片使用Ansible中的playbook_第12张图片

注意:可以使用ansible-doc dnf | less命令,查看某个模块的用法,进入查看后输入/EXAMPLE寻找实例作为参考去写playbook文件
2)使用playbook配置dnf服务的正向解析:

---
- name: dns server
  hosts: 172.25.254.136
  tasks:
    - name: install dns
      dnf: 
        name: bind
        state: latest
        disable_gpg_check: yes
    - name: firewalld setup
      firewalld:
        service: dns
        permanent: yes
        state: enabled
        immediate: yes
        zone: public
    - name: named.conf setup    
      lineinfile:
        path: /etc/named.conf
        regexp: "listen-on port 53 "
        line: "listen-on port 53 { any; };"
        
    - lineinfile:              
        path: /etc/named.conf
        regexp: "allow-query"
        line: "allow-query { any; };"

    - lineinfile:
        path: /etc/named.conf
        regexp: "dnssec-validation yes;"
        line: "dnssec-validation no ;"
   
    - name: named.rfc1912.zones setup
      lineinfile:
        path: /etc/named.rfc1912.zones
        line: zone "westos.org" IN {
      
              type master;
              file "westos.org.zone";
              allow-update {
     none; };
              };
    - name: copy named.localhost
      copy:
        src: /var/named/westos.org.zone
        dest: /var/named/westos.org.zone
    - name: start named
      service:
        name: named
        state: started
        enabled: yes
       
    - name: resolv.conf setup
      lineinfile:
        path: /etc/resolv.conf
        line: nameserver 172.25.254.136

使用Ansible中的playbook_第13张图片
如下图所示,在主控机中编辑该文件时,需要根据受控主机的ip不同编写不同的文件内容。这里之所以直接编写好后再复制到受控主机,只是为了方便目前学习阶段观察实验效果:
使用Ansible中的playbook_第14张图片
测试:
使用Ansible中的playbook_第15张图片

你可能感兴趣的:(Ansible自动化运维工具,linux,linux,运维)