Ad-hoc命令和模块简介

Ad-hoc命令和模块简介

1.概念

  • Ansible提供两种方式去完成任务,一是ad-hoc命令,一是写Ansible playbook(剧本)
  • Ad-hoc命令:即交互式临时命令,是一种单条命令,命令不需要特别保存下来,执行后即结束,可以用于执行简单的临时命令,相当于shell命令
  • Ansible playbook:更适合解决复杂或需固化下来的任务,相当于Linux系统的Shell脚本

2.格式

[root@server ~]# ansible 主机或组 -m 模块名 -a '模块参数' -i 清单文件
  • 使用ansible命令时,必须指明受管主机的信息,如果已经设置过主机清单文件(/etc/ansible/hosts),则可以使用all参数来指代全体受管控的主机,-a是要传递给模块的参数,只有功能极其简单的模块才不需要额外参数,所以大多情况下-m-a参数都会同时出现

3.Ansible命令常用参数

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

4.模块类型

  • Ansible服务的强大之处在于只需要一条命令,便可以操控成千上万台的主机节点,由于Ansible服务实际上只是一个框架,能够完成工作的是模块化功能代码

4.1 三种模块类型

  • 核心模块:由Ansible的官方团队提供
  • 附加模块:由各个社区提供的,如:openstack社区、docker社区
  • 用户自定义模块自己设计的模块

4.2Ansible核心模块和附加模块

  • 1000+,需要使用帮助文档来查询、记忆、理解
  • 查询模块信息:
[root@server ~]# ansible-doc  模块名称
[root@server ~]# ansible-doc ping
> ANSIBLE.BUILTIN.PING    (/usr/lib/python3.9/site-packages/ansible/modules/ping.py)

        A trivial test module, this module always returns `pong' on
        successful contact. It does not make sense in playbooks, but it
        is useful from `/usr/bin/ansible' to verify the ability to
        login and that a usable Python is configured. This is NOT ICMP
        ping, this is just a trivial test module that requires Python
        on the remote-node. For Windows targets, use the
        [ansible.windows.win_ping] module instead. For Network targets,
        use the [ansible.netcommon.net_ping] module instead.

ADDED IN: historical

OPTIONS (= is mandatory):

- data
        Data to return for the `ping' return value.
        If this parameter is set to `crash', the module will cause an
        exception.
        default: pong
        type: str


ATTRIBUTES:

        check_mode:
          description: Can run in check_mode and return changed status prediction without
            modifying target
          support: full
        diff_mode:
......
......
......
  • 列出所有模块信息
[root@server ~]# ansible-doc -l | wc -l   #有多少模块
7736
  • 列出yum模块
[root@server ~]# ansible-doc -l | grep yum
ansible.builtin.yum                                                                              Manages packages with the...
ansible.builtin.yum_repository                                                                   Add or r...
community.general.yum_versionlock                                                                Locks / unlocks a installed package(s) from being updated ...
  • 常用模块

在这里插入图片描述

示例1

  • 通过ansiblenode1node2下载安装httpd
[root@node1 ~]# yum list httpd
正在更新 Subscription Management 软件仓库。
无法读取客户身份

本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。

上次元数据过期检查:1:43:02 前,执行于 2024年07月06日 星期六 11时32分13秒。
可安装的软件包
httpd.x86_64                               2.4.57-8.el9                               app
[root@node2 ~]# yum list httpd
正在更新 Subscription Management 软件仓库。
无法读取客户身份

本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。

上次元数据过期检查:1:47:15 前,执行于 2024年07月06日 星期六 11时28分19秒。
可安装的软件包
httpd.x86_64                               2.4.57-8.el9                               app
[root@server ~]# vim /etc/ansible/hosts
node1.example.com
node2.example.com


[root@server ~]# ansible all -m ping   #首先测试网络连通性
node1.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
node2.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}



[root@server ~]# ansible all -m yum -a "name=httpd state=installed"   #下发yum命令
node2.example.com | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Installed: httpd-tools-2.4.57-8.el9.x86_64",
        "Installed: httpd-filesystem-2.4.57-8.el9.noarch",
        "Installed: apr-util-1.6.1-23.el9.x86_64",
        "Installed: httpd-2.4.57-8.el9.x86_64",
        "Installed: apr-util-bdb-1.6.1-23.el9.x86_64",
        "Installed: mod_lua-2.4.57-8.el9.x86_64",
        "Installed: httpd-core-2.4.57-8.el9.x86_64",
        "Installed: apr-util-openssl-1.6.1-23.el9.x86_64",
        "Installed: centos-logos-httpd-90.8-1.el9.noarch",
        "Installed: mod_http2-2.0.26-2.el9.x86_64",
        "Installed: apr-1.7.0-12.el9.x86_64"
    ]
}
node1.example.com | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Installed: httpd-tools-2.4.57-8.el9.x86_64",
        "Installed: apr-util-1.6.1-23.el9.x86_64",
        "Installed: httpd-2.4.57-8.el9.x86_64",
        "Installed: apr-util-bdb-1.6.1-23.el9.x86_64",
        "Installed: httpd-filesystem-2.4.57-8.el9.noarch",
        "Installed: mod_lua-2.4.57-8.el9.x86_64",
        "Installed: httpd-core-2.4.57-8.el9.x86_64",
        "Installed: apr-util-openssl-1.6.1-23.el9.x86_64",
        "Installed: centos-logos-httpd-90.8-1.el9.noarch",
        "Installed: mod_http2-2.0.26-2.el9.x86_64",
        "Installed: apr-1.7.0-12.el9.x86_64"
    ]
}
  • 测试
[root@node1 ~]# yum list httpd
正在更新 Subscription Management 软件仓库。
无法读取客户身份

本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。

上次元数据过期检查:1:48:50 前,执行于 2024年07月06日 星期六 11时32分13秒。
已安装的软件包
httpd.x86_64                              2.4.57-8.el9                               @app
[root@node2 ~]# yum list httpd
正在更新 Subscription Management 软件仓库。
无法读取客户身份

本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。

上次元数据过期检查:1:52:53 前,执行于 2024年07月06日 星期六 11时28分19秒。
已安装的软件包
httpd.x86_64                              2.4.57-8.el9                               @app

示例2

  • server端操控node1node2
  • 不加-m参数默认使用command模块
[root@server ~]# ansible all -a 'df -h'
node1.example.com | CHANGED | rc=0 >>
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               4.0M     0  4.0M    0% /dev
tmpfs                  968M     0  968M    0% /dev/shm
tmpfs                  388M  9.6M  378M    3% /run
/dev/mapper/rhel-root   16G  7.0G  8.7G   45% /
/dev/nvme0n1p1         395M  235M  161M   60% /boot
tmpfs                  194M   52K  194M    1% /run/user/42
tmpfs                  194M   36K  194M    1% /run/user/0
node2.example.com | CHANGED | rc=0 >>
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               4.0M     0  4.0M    0% /dev
tmpfs                  968M     0  968M    0% /dev/shm
tmpfs                  388M  9.5M  378M    3% /run
/dev/mapper/rhel-root   16G  4.1G   12G   27% /
/dev/nvme0n1p1         395M  235M  161M   60% /boot
tmpfs                  194M   52K  194M    1% /run/user/42
tmpfs                  194M   36K  194M    1% /run/user/0
[root@server ~]# ansible node2.example.com -a 'ls /root'
node2.example.com | CHANGED | rc=0 >>
公共
模板
视频
图片
文档
下载
音乐
桌面
anaconda-ks.cfg
[root@server ~]# ansible node1.example.com -a 'cat /etc/os-release'
node1.example.com | CHANGED | rc=0 >>
NAME="Red Hat Enterprise Linux"
VERSION="9.1 (Plow)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="9.1"
PLATFORM_ID="platform:el9"
PRETTY_NAME="Red Hat Enterprise Linux 9.1 (Plow)"
ANSI_COLOR="0;31"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:redhat:enterprise_linux:9::baseos"
HOME_URL="https://www.redhat.com/"
DOCUMENTATION_URL="https://access.redhat.com/documentation/red_hat_enterprise_linux/9/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 9"
REDHAT_BUGZILLA_PRODUCT_VERSION=9.1
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.1"
[root@server ~]# ansible node1.example.com -a 'hostname'
node1.example.com | CHANGED | rc=0 >>
node1.example.com
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^~^前行者~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值