【Ansible之playbook剧本】 �

目录

原文: http://blog.gqylpy.com/gqy/374

@(Ansible之playbook剧本)


ymal:

  • 列表:-
  • 字典:key-value
  • 文件后缀名:yml

ansible-playbook 命令格式:

  • -C:--check 干跑,不会执行
  • -f:FORKS 并发执行
  • --syntax-check:语法检查
  • --list-hosts:列出主机列表


基本用法

test.yml剧本文件内容如下:

sts: db  # 指定主机
  remote_user: root  # 指定用户
  tasks:  # 任务列表
  - name: create_user  # 任务1
    user: name=user01
  - name: create_group  # 任务2
    group: name=group01

运行命令:ansible-playbook test.yml
当所有的机器都执行完第一个任务后才会执行第二个任务。
一个文件内可以有多个剧本,剧本与剧本之间用空格隔开。

传参使用

- hosts: db
  remote_user: root
  tasks:
  - name: create_user{{ user }}  # !
    user: name={{ user }}  # !

指定命令:ansible-playbook -e user=user01 test.yml

其它传参方式


在/etc/ansible/hosts文件中传参,如下示例:

[db]
9.0.0.2 user=user02  # user=user02指定参数
9.0.0.3 user=user03

hosts 文件中这样写 [groupname:vars]

playbook 文件中通过 vars 来指定参数

通过 register 注册传参,使用的时候要用参数的 .stdout


条件判断 when

只在满足某个条件后才执行某个任务,基本格式如下:

- hosts: db
  remote_user: root
  tasks:
  - name: 任务1
    动作:动作1
    when: 条件1
  - name: 任务2
    动作: 动作2
    when: 条件2

示例

test.yml剧本如下:

- hosts: db
  remote_user: root
  tasks:
  - name: create_user
    user: name=user01
    when: num == '1'
  - name: create_group
    group: name=group01
    when: num == '2'

执行命令:

# 当指定num='1'时,则执行create_user任务
ansible-playbook -e num='1' test.yml

# 当指定num='2'时,则执行create_group任务
ansible-playbook -e num='1' test.yml

我们一般都使用收集到的信息变量来做判断,很少使用变量做判断,见下面。

收集被管控机信息

收集命令:ansible db -m setup

  • ansible_all_ipv4_addresses: 所有ipv4的地址
  • ansible_all_ipv6_addresses: 所有ipv6的地址
  • ansible_architecture: 系统架构
  • ansible_data_time: 系统时间
  • LANG: 系统语言
  • ansible_default_ipv4: 默认的ipv4的地址
  • sda: 磁盘信息
  • ansible_distribution_file_path: 系统的家族
  • ansible_distribution_major_version: 系统版本
  • ansible_domain: 所在的域
  • ansible_env: 环境变量
  • ansible_hostname: 主机名,简写
  • ansible_lvm: 磁盘lvm信息
  • ansible_os_family: 系统的家族信息
  • ansible_processor_cores: CPU核心数
  • ansible_processor_count: CPU的颗数
  • ansible_processor_vcpus: CPU的个数
  • ansible_python: Python信息


根据被管控机的信息来做判断

test.yml文件如下:

- hosts: db
  remote_user: root
  tasks:
  - name: create_user
    user: name=user01
    when: ansible_processor_vcpus==1
  - name: create_group
    group: name=group01
    when: ansible_processor_vcpus==2

执行命令:ansible-playbook test.yml

还可以像这样取字典内的值:when ansible_python.version.major==1


标签 tags

- hosts: db
  remote_user: root
  tasks:
  - name: start_firewalld
    service: name=firewalld state=started
    tags: start


模板 template

- hosts: db
  remote_user: root
  tasks:
    - name: copy_file
      template: dest=/etc/yum.conf src=yum.conf.j2
      # src可以使用相对路径,在当前目录的templates目录里面


循环 with_item

基本用法如下:

- hosts: db
  remote_user: root
  tasks:
    - name: create_user
      user: name={{ item }}
      with_items:
      - user001
      - user002
      - user003

# 这里将创建3个用户

循环嵌套:

- hosts: db
  remote_user: root
  tasks:
    - name: create_user
      user: name={{ item.name }} group={{ item.group }}
      with_items:
      - {name: user001, group: group001}
      - {name: user002, group: group002}
      - {name: user003, group: group003}


handlers

如果 tasks 下的任务执行成功,则执行 handlers 下的任务,否则不执行:

- hosts: db
  remote_user: root
  tasks:
    - name: create_user
      user: name=user03
  handlers:
    - name: test_handlers
      shell: echo "create user is ok." > /tmp/text.txt

原文: http://blog.gqylpy.com/gqy/374

上一篇:information technology and services company list - Clipchamp


下一篇:【AAAI 2020】全部接受论文列表(四)