当前位置:   article > 正文

【Ansible】02

【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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
2. 配置 vim 适应 YAML 语法
# 文件位置和名字是固定的,用于设置vim的格式
[root@pubserver ansible]# vim ~/.vimrc
set ai        # 设置自动缩进
set ts=2      # 设置按tab键,缩进2个空格
set et        # 将tab转换成相应个数的空格
  • 1
  • 2
  • 3
  • 4
  • 5

编写 playbook

  • 一个剧本/playbook , 可以包含多个play
  • 每个play用于在指定的主机上 , 通过模块和参数执行响应的任务
  • 每个play可以包含多个任务
  • 任务有某块和参数构成
---

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

      - 名字: 天宫震颤了

- 名字: 官封弼马温
  职员表: 猴哥, 玉皇大帝
  场景:
      - 名字: 太白金星骗猴哥
      
  
      - 名字: 猴哥天宫放马
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
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.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/474926
推荐阅读
相关标签
  

闽ICP备14008679号