• 【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
  • 相关阅读:
    问题 B: Ella的密码——map
    一次性全讲透GaussDB(DWS)锁的问题
    使用token登录提交到github
    WebSocket学习笔记
    电脑怎样抠图?这几个软件能轻松实现
    系分 - 操作系统 - 嵌入式
    【Python】第三课 分支和循环的使用
    王树森Transformer学习笔记
    修改 MySQL 最大连接数
    1-BIO最佳概述
  • 原文地址:https://blog.csdn.net/2401_82773077/article/details/137988216