Ansible(二)如何在多台主机上批量执行任务

2021-01-06  本文已影响0人  月饮沙

Ansible批量执行任务有两种方式adhocplaybook,当执行简单的命令时,可以使用adhoc,当执行复杂的命令,涉及多个模块/条件等时,建议使用playbook

module 模块

ansible的底层是python,但是我们在使用ansible的时候不需要写python脚本,而是直接调用模块即可。
模块是由红帽官方或者其他合作伙伴或开发爱好者开发好的脚本,我们可以通过调用模块,来执行对应的命令。

查看所有ansible模块

ansible-doc -l

查看指定模块的使用帮助

ansible-doc ping

常用模块

文件相关模块

软件包管理相关模块

系统相关模块

adhoc

格式

ansible" host-pattern" -m "module" -a"module argument" -i "inventroy-path"

参数

示例

[root@localhost ~]# ansible all -m ping
servera.lab.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

playbook

playbook是一个yaml格式的文件,后缀名为.yml或者.yaml

playbook文件内容

在一个playbook文件中,可以包含多个play
一个play就是要在指定主机中执行的一系列操作,在一个play中可以指定hosts(在哪些主机上执行)和tasks(执行哪些命令)
tasks中可以包含多个task,每个task就是对一个模块的调用

playbook文件示例

# YAML文件以---开头
---
# - 表示列表
# 第一个play 名称是Configure web server
- name: Configure web server
# hosts指定第一个play在哪些主机上执行
  hosts: servera.lab.example.com
# tasks指定第一个play中都执行哪些内容
  tasks:
# 第一个task,调用service模块,启动httpd服务并设置开机启动
    - name: start and enabled httpd
      service:
       name: httpd
       enabled: true
       state: started
# 第二个play
- name: import test play file and set the variable
  import_playbook: plays/test.yml
  vars:
    url: "http://servera.lab.example.com"

YAML文件语法

示例

# 字符串
name: This is a string
name: "This is a string"
name: 'This is a string'
# 列表
hosts:
 - servera
 - serverb
 - serverc
# 字典
name: httpd
port: 443

执行playbook

语法

ansible-playbook webserver.yml -e "user=root"

参数

playbook的输出和结果

Playbook通常是幂等的,即同一个playbook,无论运行多少次,最终的结果都是一样的。如果被控主机之前已经进行了更改,那么再次运行playbook的时候不会进行变更。

playbook的执行结果

以下是一个playbook的执行结果示例

[root@localhost ~]# ansible-playbook copy-file.yml 
# 执行的PLAY的名称
PLAY [Using the copy module] **********************************************************************************************
# 执行的TASK名称 以及该TASK在哪些主机上执行及执行结果 
TASK [Gathering Facts] ****************************************************************************************************
ok: [serverb.lab.example.com]
ok: [servera.lab.example.com]

TASK [copy files/user.txt to remote host] *********************************************************************************
changed: [serverb.lab.example.com]
changed: [servera.lab.example.com]
# PLAY的执行结果概述
PLAY RECAP ****************************************************************************************************************
servera.lab.example.com    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
serverb.lab.example.com    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

说明

TASK的执行结果

一般结果

流程控制相关

上一篇下一篇

猜你喜欢

热点阅读