【Ansible】02

【Ansible】01

Ansible

playbook 剧本

ansible-playbook
  • 常用于复杂任务的管理
  • 管理经常要完成的任务
  • playbook也是通过模块 和它的参数 , 在特定主机上执行任务
  • playbook是一个文件 , 该文件中需要通过yaml格式进行书写
  • 将经常需要执行的任务写入一个文件
  • 剧本/文件中可以包换多个任务
  • 可以根据剧本 , 执行相关任务命令
  • 可执行周期性的复杂任务

YAML

  • YAML 不是一个标记语言
  • YAML 是一个可读性高 , 用来表达数据序列的格式语言
  • YAML 以数据为中心 , 重点描述数据的关系和结构
1. YAML 语法规范
  1. yaml 文件的文件名 , 一般以 yml 或 yaml 作为扩展名

  2. 文件一般以 --- 作为第一行 , 不是必须的 , 但是常用

  3. 键值对使用冒号 : 表示 , 冒号后必须有空格

  4. 数组使用 - 表示 , - 后面必须有空格

  5. 相同的层级必须有相同的缩进 , 如果缩进不对则语言错误.

  6. 每一级缩进建议 2个空格

  7. 全文不能用 tab 缩进 , 必须用 空格 缩进

    复制代码
    # 一般写法
    name=szhou
    number=(1 5 6 70 88 99 100)
    
    # YAML 写法
    name= szhou
    number:
    	- 1
    	- 5
    	- 6
    	- 70
    	- 88
    	- 99
    	- 100
2. 配置 vim 适应 YAML 语法
复制代码
# 文件位置和名字是固定的,用于设置vim的格式
[root@pubserver ansible]# vim ~/.vimrc
set ai        # 设置自动缩进
set ts=2      # 设置按tab键,缩进2个空格
set et        # 将tab转换成相应个数的空格

编写 playbook

  • 一个剧本/playbook , 可以包含多个play

  • 每个play用于在指定的主机上 , 通过模块和参数执行响应的任务

  • 每个play可以包含多个任务

  • 任务有某块和参数构成


    • 名字: 猴王初问世
      职员表: 猴哥, 大马猴
      场景:
      - 名字: 石头裂开了

      复制代码
      - 名字: 天宫震颤了
    • 名字: 官封弼马温
      职员表: 猴哥, 玉皇大帝
      场景:
      - 名字: 太白金星骗猴哥

      复制代码
      - 名字: 猴哥天宫放马
1. 基础 playbook
复制代码
# 编写用于测试连通性的playbook,相当于执行ansible all -m ping
[root@pubserver ansible]# vim test.yml
---
- hosts: all
  tasks:
    - ping:

[root@pubserver ansible]# ansible-playbook test.yml  # 执行playbook

# 以上更规范的写法如下:
[root@pubserver ansible]# vim test.yml
---
- name: test network            # play的名字,可选项
  hosts: all                    # 作用于所有的主机
  tasks:                        # 任务
    - name: test via ping       # 第1个任务的名字,可选项
      ping:                     # 第1个任务使用的模块


[root@pubserver ansible]# ansible-playbook test.yml  # 执行playbook

# 在dbs组的主机和web1上创建/tmp/demo目录,权限是0755。将控制端/etc/hosts拷贝到目标主机的/tmp/demo中
[root@pubserver ansible]# vim fileop.yml
---
- name: create dir and copy file
  hosts: dbs,web1    # 这里的名称,必须出现在主机清单文件中
  tasks:
    - name: create dir
      file:
        path: /tmp/demo
        state: directory
        mode: '0755'
      
    - name: copy file
      copy:
        src: /etc/hosts
        dest: /tmp/demo/hosts

# 执行playbook
[root@pubserver ansible]# ansible-playbook fileop.yml

# 在webservers组中的主机上,创建用户bob,附加组是adm;在db1主机上,创建/tmp/hi.txt,其内容为Hello World.
[root@pubserver ansible]# vim two.yml
---
- name: create user
  hosts: webservers
  tasks:
    - name: create bob
      user:
        name: bob
        groups: adm

- name: create file
  hosts: db1
  tasks:
    - name: make file
      copy:
        dest: /tmp/hi.txt
        content: "Hello World"

[root@pubserver ansible]# ansible-playbook two.yml
2. 换行 ' | ' 和并行 ' > '
  • | 和 > 的区别

    • "|"它保留换行符
  • ">" 把多行合并为一行

    通过copy模块创建/tmp/1.txt,文件中有两行内容,分别是Hello World和ni hao

    [root@pubserver ansible]# vim f1.yml

    • name: play 1
      hosts: webservers
      tasks:
      • name: mkfile 1.txt
        copy:
        dest: /tmp/1.txt
        content: |
        Hello World!
        ni hao.

    [root@pubserver ansible]# ansible-playbook f1.yml

    查看结果

    [root@web1 ~]# cat /tmp/1.txt
    Hello World!
    ni hao.

    通过copy模块创建/tmp/2.txt,文件中有一行内容,分别是Hello World! ni hao

    [root@pubserver ansible]# vim f2.yml

    • name: play 1
      hosts: webservers
      tasks:
      • name: mkfile 2.txt
        copy:
        dest: /tmp/2.txt
        content: >
        Hello World!
        ni hao.

    [root@pubserver ansible]# ansible-playbook f2.yml
    [root@web1 ~]# cat /tmp/2.txt
    Hello World! ni hao.

3. parted模块
  • 用于硬盘分区
  • 选项 :
    • device # 待分区设备

    • number # 分区编号

    • state # 状态

      • present # 创建
      • adsent # 删除
    • part_start # 分区起始位置 , 默认从头开始

    • part_end # 分区的结束位置 , 默认到结尾

      在web1主机上,对/dev/vdc进行分区,创建1个1GB的主分区

      [root@pubserver ansible]# vim disk.yml

      • name: disk manage
        hosts: web1
        tasks:
        • name: create a partition
          parted:
          device: /dev/vdc
          number: 1
          state: present
          part_end: 1GiB

      [root@pubserver ansible]# ansible-playbook disk.yml

      在目标主机上查看结果

      [root@web1 ~]# lsblk
      NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      .. ...
      vdc 253:32 0 20G 0 disk
      `-vdc1 253:33 0 1023M 0 part

      继续编辑disk.yml,对/dev/vdc进行分区,创建1个新的5GB的主分区

      [root@pubserver ansible]# vim disk.yml
      ... ...
      - name: add a new partition
      parted:
      device: /dev/vdc
      number: 2
      state: present
      part_start: 1GiB
      part_end: 6GiB

      [root@pubserver ansible]# ansible-playbook disk.yml

      [root@web1 ~]# lsblk
      NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
      ... ...
      vdc 253:32 0 20G 0 disk
      |-vdc1 253:33 0 1023M 0 part
      `-vdc2 253:34 0 5G 0 part

      继续编辑disk.yml,创建名为my_vg的卷组,它由上面创建的vdc1和vdc2构成

      [root@pubserver ansible]# vim disk.yml
      ... ...
      - name: create my_vg
      lvg:
      vg: my_vg
      pvs: /dev/vdc1,/dev/vdc2

      继续编辑disk.yml,在my_vg卷组上创建名为my_lv的逻辑卷,大小1G

      [root@pubserver ansible]# vim disk.yml
      ... ...
      - name: create my_lv
      lvol:
      vg: my_vg
      lv: my_lv
      size: 1G

      继续编辑disk.yml,格式化my_lv为ext4

      [root@pubserver ansible]# vim disk.yml
      ... ...
      - name: mkfs my_lv
      filesystem:
      dev: /dev/my_vg/my_lv
      fstype: ext4

      继续编辑disk.yml,将my_lv挂载到/data

      [root@pubserver ansible]# vim disk.yml
      ... ...
      - name: mount my_lv
      mount:
      path: /data
      src: /dev/my_vg/my_lv
      fstype: ext4
      state: mounted

      完整的disk.yml如下


      • name: disk manage
        hosts: web1
        tasks:
        • name: create a partition
          parted:
          device: /dev/vdc
          number: 1
          state: present
          part_end: 1GiB

        • name: add a new partition
          parted:
          device: /dev/vdc
          number: 2
          state: present
          part_start: 1GiB
          part_end: 6GiB

        • name: create my_vg
          lvg:
          vg: my_vg
          pvs: /dev/vdc1,/dev/vdc2

        • name: create my_lv
          lvol:
          vg: my_vg
          lv: my_lv
          size: 1G

        • name: mkfs my_lv
          filesystem:
          dev: /dev/my_vg/my_lv
          fstype: ext4

        • name: mount my_lv
          mount:
          path: /data
          src: /dev/my_vg/my_lv
          fstype: ext4
          state: mounted

4. yum装包组
1) 多软件安装格式
复制代码
# 在webservers组中的主机上,安装httpd、php、php-mysqlnd
[root@pubserver ansible]# vim pkg.yml
---
- name: install pkgs
  hosts: webservers
  tasks:
    - name: install web pkgs  # 此任务通过yum安装三个包
      yum:
        name: httpd,php,php-mysqlnd
        state: present

# 安装多个软件包,还可以写为:
---
- name: install pkgs
  hosts: webservers
  tasks:
    - name: install web pkgs
      yum:
        name: [httpd,php,php-mysqlnd]
        state: present

# 安装多个软件包,还可以写为:
---
- name: install pkgs
  hosts: webservers
  tasks:
    - name: install web pkgs
      yum:
        name: 
          - httpd
          - php
          - php-mysqlnd
        state: present
相关推荐
tyatyatya1 天前
Ansible自动化配置,从入门到实战
运维·自动化·ansible
lbb 小魔仙2 天前
【Linux】Ansible 自动化运维实战:2000+ 节点配置标准化教程
linux·运维·ansible
扑火的小飞蛾5 天前
【Ansible学习笔记01】 批量执行 shell 命令
笔记·学习·ansible
oMcLin5 天前
如何在 Red Hat Linux 服务器上使用 Ansible 自动化部署并管理多节点 Hadoop 集群?
linux·服务器·ansible
linux修理工8 天前
vagrant ubuntu 22.04 ansible 配置
ubuntu·ansible·vagrant
biubiubiu07069 天前
Ansible自动化
运维·自动化·ansible
秋42710 天前
ansible配置与模块介绍
ansible
秋42710 天前
ansible剧本
linux·服务器·ansible
码农101号11 天前
Ansible - Role介绍 和 使用playbook部署wordPress
android·ansible
2301_8000509913 天前
Ansible
运维·ansible