Ansible运行临时命令

Ansible服务的强大之处在于只需要一条命令,便可以操控成千上万台的主机节点,而ansible命令便是最得力的工具之一。前文提到,Ansible服务实际上只是一个框架,能够完成工作的是模块化功能代码。Ansible的常用模块大致有20多个(见表16-5),本书将会在后面的实验中逐一详解。

偶尔遇到书中没有提及的模块,大家可以使用“ansible-doc模块名称”的命令格式自行查询,或是使用ansibe-doc -l命令列出所有的模块信息以供选择。

表16-5 Ansible服务常用模块名称及作用

模块名称 模块作用
ping 检查受管节点主机网络是否能够联通。
yum 安装、更新及卸载软件包。
yum_repository 管理主机的软件仓库配置文件。
template 复制模板文件到受管节点主机。
copy 新建、修改及复制文件。
user 创建、修改及删除用户。
group 创建、修改及删除用户组。
service 启动、关闭及查看服务状态。
get_url 从网络中下载文件。
file 设置文件权限及创建快捷方式。
cron 添加、修改及删除计划任务。
command 直接执行用户指定的命令。
shell 直接执行用户指定的命令(支持特殊字符)。
debug 输出调试或报错信息。
mount 挂载硬盘设备文件。
filesystem 格式化硬盘设备文件。
lineinfile 通过正则表达式修改文件内容。
setup 收集受管节点主机上的系统及变量信息。
firewalld 添加、修改及删除防火墙策略。
lvg 管理主机的物理卷及卷组设备。
lvol 管理主机的逻辑卷设备。

在Ansible服务中,ansible是用于执行临时任务的命令,也就在是执行后即结束(与剧本文件的可重复执行不同)。在使用ansible命令时,必须指明受管主机的信息,如果已经设置过主机清单文件(/etc/ansible/hosts),则可以使用all参数来指代全体受管主机,或是用dev、test等主机组名称来指代某一组的主机。

ansible命令常用的语法格式为“ansible受管主机节点 -m模块名称[-a模块参数]”,常见的参数如表16-6所示。其中,-a是要传递给模块的参数,只有功能极其简单的模块才不需要额外参数,所以大多情况下-m与-a参数都会同时出现。

表16-6 ansible命令常用参数

参数 作用
-k 手动输入SSH协议密码
-i 指定主机清单文件
-m 指定要使用的模块名
-M 指定要使用的模块路径
-S 使用su命令
-T 设置SSH协议连接超时时间
-a 设置传递给模块的参数
--version 查看版本信息
-h 帮助信息

如果想实现某个功能,但是却不知道用什么模块,又或者是知道了模块名称,但不清楚模块具体的作用,则建议使用ansible-doc命令进行查找。例如,列举出当前Ansible服务所支持的所有模块信息:

[root@localhost ~]# ansible-doc -l 
a10_server                                           Manage A10 Networks AX/SoftAX/Thunder/v...
a10_server_axapi3                                    Manage A10 Networks AX/SoftAX/Thunder/v...           
a10_service_group                                    Manage A10 Networks AX/SoftAX/Thunder/v...
a10_virtual_server                                   Manage A10 Networks AX/SoftAX/Thunder/v...
aci_aaa_user                                         Manage AAA users (aaa:User)                                              
aci_aaa_user_certificate                             Manage AAA user certificates (aaa:User...                        
aci_access_port_block_to_access_port                 Manage port blocks of Fabric interface ...
aci_access_port_to_interface_policy_leaf_profile     Manage Fabric interface policy leaf pro...
aci_access_sub_port_block_to_access_port             Manage sub port blocks of Fabric interf...
aci_aep                                              Manage attachable Access Entity Profile...
aci_aep_to_domain                                    Bind AEPs to Physical or Virtual Domain...   
aci_bd_subnet                                        Manage Subnets (fv:Subnet)                 
………………省略部分输出信息………………

一般情况下,很难通过名称来判别一个模块的作用,要么是参考模块后面的介绍信息,要么是平时多学多练,进行积累。例如,接下来随机查看一个模块的详细信息。ansible-doc命令会在屏幕上显示出这个模块的作用、可用参数及实例等信息:

[root@localhost ~]# ansible-doc a10_server
> A10_SERVER    (/usr/lib/python3.6/site-packages/ansible/modules/network/a10/a10_server.py)
​
     Manage SLB (Server Load Balancer) server objects on A10 Networks devices via aXAPIv2.
​
  * This module is maintained by The Ansible Community
………………省略部分输出信息………………

在16.2节,已经成功地将受管主机的IP地址填写到主机清单文件中,接下来小试牛刀,检查一下这些主机的网络连通性。ping模块用于进行简单的网络测试(类似于常用的ping命令)。可以使用ansible命令直接针对所有主机调用ping模块,不需要增加额外的参数,返回值若为SUCCESS,则表示主机当前在线。

[root@localhost ~]# ansible all -m ping
192.168.10.20 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.10.21 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.10.22 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
192.168.10.23 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}192.168.10.24 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

由于5台受控主机的输出信息大致相同,因此为了提升读者的阅读体验,本章后续的输出结果默认仅保留192.168.10.20主机的输出值,其余相同的输出信息将会被省略。

是不是感觉很方便呢?!一次就能知道所有主机的在线情况。除了使用-m参数直接指定模块名称之外,还可以用-a参数将参数传递给模块,让模块的功能更高级,更好地满足当前生产的需求。例如,yum_repository模块的作用是管理主机的软件仓库,能够添加、修改及删除软件仓库的配置信息,参数相对比较复杂。遇到这种情况时,建议先用ansible-doc命令对其进行了解。尤其是下面的EXAMPLES结构段会有该模块的实例,对用户来说有非常高的参考价值。

[root@localhost ~]# ansible-doc yum_repository
> YUM_REPOSITORY    (/usr/lib/python3.6/site-packages/ansible/modules/packaging>
​
        Add or remove YUM repositories in RPM-based Linux
        distributions. If you wish to update an existing repository
        definition use [ini_file] instead.
​
  * This module is maintained by The Ansible Core Team
​
……………………省略部分输出信息………………
​
EXAMPLES:
​
- name: Add repository
  yum_repository:
    name: epel
    description: EPEL YUM repo
    baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
​
- name: Add multiple repositories into the same file (1/2)
  yum_repository:
    name: epel
    description: EPEL YUM repo
    file: external_repos
    baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
    gpgcheck: no
​
- name: Add multiple repositories into the same file (2/2)
  yum_repository:
    name: rpmforge
    description: RPMforge YUM repo
    file: external_repos
    baseurl: http://apt.sw.be/redhat/el7/en/$basearch/rpmforge

还好,参数并不是很多,而且与此前学过的/etc/yum.repos.d/目录中的配置文件基本相似。现在,想为主机清单中的所有服务器新增一个如表16-7所示的软件仓库,该怎么操作呢?

表16-7 新增软件仓库信息

仓库名称 EX294_BASE
仓库描述 EX294 base software
仓库地址 file:///media/cdrom/BaseOS
GPG签名 启用
GPG密钥文件 file:///media/cdrom/RPM-GPG-KEY-redhat-release

我们可以对照着EXAMPLE实例段,逐一对应填写需求值和参数,其标准格式是在-a参数后接整体参数(用单引号圈起),而各个参数字段的值则用双引号圈起。这是最严谨的写法。在执行下述命令后如果出现CHANGED字样,则表示修改已经成功:

[root@localhost ~]# ansible all -m yum_repository -a 'name="CentOS-Base" description="CentOS base software" baseurl="file:///media/cdrom/BaseOS" gpgcheck=yes enabled=1 gpgkey="file:///media/cdrom/RPM-GPG-KEY-redhat-release"'
……………………以下内容是结果………………
192.168.170.132 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "repo": "CentOS-Base", 
    "state": "present"
}
​

在命令执行成功后,可以到主机清单中的任意机器上查看新建成功的软件仓库配置文件。尽管这个实验的参数很多,但是并不难。

[root@localhost ~]# cat /etc/yum.repos.d/CentOS-Base.repo
……………………省略部分输出信息………………
[CentOS-Base]
baseurl = file:///media/cdrom/BaseOS
enabled = 1
gpgcheck = 1
gpgkey = file:///media/cdrom/RPM-GPG-KEY-redhat-release
name = CentOS base software

相关推荐

  1. Ansible运行临时命令

    2023-12-17 08:46:03       63 阅读
  2. ansible——Ansible ad hoc命令

    2023-12-17 08:46:03       24 阅读
  3. 三、05 ansible基础命令ansible 常用命令

    2023-12-17 08:46:03       52 阅读
  4. 临时整理1:安装及运行~ docker+ollama

    2023-12-17 08:46:03       35 阅读
  5. docker 运行pgsql 命令

    2023-12-17 08:46:03       43 阅读
  6. C语言运算中的临时匿名变量

    2023-12-17 08:46:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-17 08:46:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-17 08:46:03       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-17 08:46:03       82 阅读
  4. Python语言-面向对象

    2023-12-17 08:46:03       91 阅读

热门阅读

  1. Ansible设置主机清单

    2023-12-17 08:46:03       60 阅读
  2. 加州数据集介绍

    2023-12-17 08:46:03       62 阅读
  3. 安卓免Root做klipper上位机教程

    2023-12-17 08:46:03       76 阅读
  4. 如何进行软件测试和测试驱动开发(TDD)?

    2023-12-17 08:46:03       53 阅读
  5. CentOS新系统工具安装

    2023-12-17 08:46:03       68 阅读
  6. 如何下载 GitHub 私有仓库

    2023-12-17 08:46:03       54 阅读
  7. FlinkSQL的联结和函数

    2023-12-17 08:46:03       63 阅读