Ansible Ad-hoc,命令执行模块
Ad-hoc
Ad-hoc简介
- Ad-hoc是Ansible下临时执行的一条命令,对于复杂的命令会使用playbook。Ad-hoc的执行依赖于模块,ansible官方提供了大量的模块。如command,file,copy,shell等
- 帮助查询
- ansible-doc -l 列出所有模块
- ansible-doc -s module 查看某个模块的参数
- ansible-doc module 查看某个模块更详细的信息
Ad-hoc命令说明
- 命令说明
ansible 主机或组 -m 模块名 -a '模块参数' ansible参数- 主机和组:就是你要在哪些主机上执行这个命令,必须是配置文件里面定义好的
- 模块名:可以通过ansibel-doc -l查看目前安装的模块,然后过滤出你想要的,默认不指定时,使用的时command模块,可以在配置文件里面找到 "module_name = command"改掉这个
- 模块参数:可以通过ansible-doc 来查看模块需要使用哪些参数,以及具体用法
- ansible参数:可以通过ansible 的帮助查到,有很多参数可以使用,比如是否提权,是否输入密码等等
Ad-hoc示例
[devops@node1 ansible]$ ansible node1 -m shell -a 'whoami'
node1 | CHANGED | rc=0 >>
root
# 使用ad-hoc创建一个目录
[devops@node1 ansible]$ ansible node1 -m shell -a 'mkdir /ansibel'
[WARNING]: Consider using the file module with state=directory rather than running 'mkdir'. If you
need to use command because file is insufficient you can add 'warn: false' to this command task or
set 'command_warnings=False' in ansible.cfg to get rid of this message.
node1 | CHANGED | rc=0 >>
这里我们可以看到,使用shell模块创建一个目录的时候他有一个警告,大概就是说让我们考虑使用file模块去创建目录,但是这个是警告,并不是报错,这个目录也是被创建出来了
[devops@node1 ansible]$ sudo ls /ansibel -d
/ansibel
这就是一些简单的使用案例
命令执行模块
1. command模块
该模块通过-a跟上要执行的命令可以直接执行,不过命令里面不能带一些符号(|,>,<,&),否则会不成功。
# 正常的
[devops@node1 ansible]$ ansible all -m command -a 'whoami'
node1 | CHANGED | rc=0 >>
root
node2 | CHANGED | rc=0 >>
root
# 错误的
[devops@node1 ansible]$ ansible all -m command -a 'whoami > /opt/who.txt'
node2 | FAILED | rc=1 >>
whoami: extra operand ‘>’
Try 'whoami --help' for more information.non-zero return code
node1 | FAILED | rc=1 >>
whoami: extra operand ‘>’
Try 'whoami --help' for more information.non-zero return code
看到了吧,我想把输出内容重定向到某个文件内他是会报错的,那我们如果有这种需求改怎么做呢?来看下一个模块
2. shell模块
shell模块的用法基本和command一样,不过他是通过/bin/sh执行,所以shell模块可以执行任何命令,报错刚刚command不能执行的重定向操作
# 不带重定向
[devops@node1 ansible]$ ansible node1 -m shell -a 'whoami'
node1 | CHANGED | rc=0 >>
root
# 带重定向
[devops@node1 ansible]$ ansible node1 -m shell -a 'whoami > /opt/who.txt'
node1 | CHANGED | rc=0 >>
# 查看文件内容
[devops@node1 ansible]$ cat /opt/who.txt
root
这个模块确实是可以执行一些command执行不了的操作,shell模块还有一些选项
- chdir: 在执行命令前,先切换到指定的目录,默认工作目录是用户的home目录
- creates:一个文件名,当该文件存在,那么命令就不会执行
- removes:一个文件名,当该文件不存在,那么命令不会执行
后面这两个可能有点难以理解,我们通过实验来看看
creates实验:
# 我们刚刚不是在node1上创建了一个/opt/who.txt吗?node2上是没有的,那么我们选择就来指定这个文件
[devops@node1 ansible]$ ansible all -m shell -a 'creates=/opt/who.txt whoami'
node1 | SUCCESS | rc=0 >>
skipped, since /opt/who.txt exists
node2 | CHANGED | rc=0 >>
root
看到了吧,node1上有这个文件,那么它是没有去执行的,他直接跳过了,但是node2上没有这个文件,那么它执行了whoami这个命令
removes实验:
[devops@node1 ansible]$ ansible all -m shell -a 'removes=/opt/who.txt whoami'
node1 | CHANGED | rc=0 >>
root
node2 | SUCCESS | rc=0 >>
skipped, since /opt/who.txt does not exist
通过这2个实验应该能理解这俩选项的作用了吧
3. raw模块
这个模块的用法和shell是一样的,不同点在于它没有chdir,creates和removes选项,其他都是一样一样的
4. script模块
这个模块就比较有意思了,他是将你主控端的脚本直接在被控端上执行,注意,他并不会将这个文件传过去
[devops@node1 ansible]$ cat test.sh
#!/bin/bash
ifconfig |grep netmask | awk -F" " '{print $2}'
注意看这个脚本,是在node1上的,也就是主控端,我们来使用过scripts模块来执行一下这个脚本,看看它是不是没有将文件传过去
[devops@node1 ansible]$ ansible all -m script -a 'test.sh'
node2 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to node2 closed.\r\n",
"stderr_lines": [
"Shared connection to node2 closed."
],
"stdout": "/home/devops/.ansible/tmp/ansible-tmp-1708832697.440758-6677-176602102106477/test.sh: line 2: ifconfig: command not found\r\n",
"stdout_lines": [
"/home/devops/.ansible/tmp/ansible-tmp-1708832697.440758-6677-176602102106477/test.sh: line 2: ifconfig: command not found"
]
}
node1 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to node1 closed.\r\n",
"stderr_lines": [
"Shared connection to node1 closed."
],
"stdout": "192.168.100.210\r\n192.168.200.131\r\n127.0.0.1\r\n192.168.122.1\r\n",
"stdout_lines": [
"192.168.100.210",
"192.168.200.131",
"127.0.0.1",
"192.168.122.1"
]
}
这里可以看到,他执行成功了,返回的是主机上所有的IP地址,然后我们去node2上看看这个文件是否不存在,不在node1上看是因为这个文件本来就是node1上写的,因为node1就是主控节点,它同时也是被控
[devops@node1 ansible]$ ansible node2 -m shell -a 'find / -name test.sh'
node2 | CHANGED | rc=0 >>
我们可以看到,使用find去查到这个文件名他没有任何的输出,那么就是没有找到,也就是没有这个文件
Ansible Ad-hoc,命令执行模块的更多相关文章
- Ansible4:Ad-hoc与命令执行模块
目录 Ad-hoc 命令说明 后台执行 命令执行模块 command模块 script模块 Ad-Hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令会使用playbo ...
- ansible命令执行模块使用
ansible命令执行模块使用 1.命令执行模块-command 在远程节点上运行命令. 命令模块使用命令名称,接上空格-的分割符作为参数使用,但是不支持管道符和变量等,如果要使用这些,那么可以使用s ...
- Ansible4:Ad-hoc与命令执行模块【转】
Ad-Hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令会使用playbook.Ad-hoc的执行依赖于模块,ansible官方提供了大量的模块. 如:command ...
- ansible使用临时命令通过模块来执行任务
使用临时命令通过模块来执行任务 一.查看系统上安装的所有模块 ansible-doc -l 查看ping模块帮助文档 ansible-doc ping 1.ansible模块 文件模块: copy:将 ...
- ansible的Ad-hoc命令
本文主要介绍了ansible的Ad-hoc命令. Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂 ...
- Linux中级之ansible概念及hoc命令行调用模式
一.Ansible简介 ansible是新出现的开源的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统 ...
- ansible笔记(6):常用模块之命令类模块
ansible笔记():常用模块之命令类模块 command模块 command模块可以帮助我们在远程主机上执行命令 注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处 ...
- ansible命令及模块
ping 命令 #测试单个主机 [root@node1 opt]# ansible -m ping 10.0.0.22 #获取多个主机 [root@node1 opt]# ansible 10.0.0 ...
- Ansible 命令相关模块command, shell, raw, expect, script, telnet[转]
本文主要介绍Ansible的几个命令模块,包括: command - 在远程节点上执行命令 shell - 让远程主机在shell进程下执行命令 script - 将本地script传送到远程主机之后 ...
- ansible的安装及命令相关模块
ansible 第一步:下载epel源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos- ...
随机推荐
- [转帖]关于redis,你需要了解的几点!
github:https://github.com/windwant 博客园 首页 新随笔 联系 订阅 管理 随笔 - 227 文章 - 4 评论 - 36 阅读 - 73万 一.关于 re ...
- 解决input标签自动填充内容的问题
autocomplete="new-password" 巧妙解决input标签自动填充问题 如果是同域名网站,并且曾经在该网站下登录过账号密码,并且选择了记住账号密码. chrom ...
- vue动画 <transition-group> 使用半场动画
<style> /* 给动画添加一组过度效果 */ .v-enter, .v-leave-to { opacity: 0.8; /* 从右向左进入 */ transform: transl ...
- 开源即时通讯(IM)项目OpenIM源码部署流程
由于 OpenIM 依赖的组件较多,开发者需求不一,导致 OpenIM 部署一直被人诟病,经过几次迭代优化,包括依赖的组件 compose 的一键部署,环境变量设置一次,全局生效,以及脚本重构,目前 ...
- 为不同版本python安装pip的正确做法
想学习Python3,但是暂时又离不开Python2.在Windows上如何让它们共存呢? 目前国内网站经常会让大家把其中一个python.exe改个名字(嗯,我也这样讲过,在此纠正一下),这样区分开 ...
- 多智能体强化学习算法【三】【QMIX、MADDPG、MAPPO】
相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...
- LeetCode刷题日记 2020/03/25
力扣刷题继续! 题目:计算三维形体表面积 题干 在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体. 每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i ...
- 位图|布隆过滤器模拟实现|STL源码剖析系列|手撕STL
今天博主给大家带来位图和布隆过滤器的模拟实现. 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://blog.csdn.net/yu_cblog/category_1149 ...
- Spring Cloud Config核心功能和原理解析
配置管理的前世今生 随着技术的发展,配置项管理变得越来越简单,尽管如今它只限于管理业务属性或者配置初始化参数等等,但是当年它可肩负着 Spring IOC 的光荣使命,风光无限. 想当年刚入行的时候还 ...
- (python)每日代码||2024.1.27||类方法与实例方法
class test(): aaa = 111 bbb = 222 ccc = 333 @classmethod def cm(cls): cls.aaa="***" def im ...