Ansible ad-hoc是一种通过命令行批量管理的方式

格式:ansible 主机集合 -m 模块名 -a "参数"

其他参数: -k 使用密码远程、-i 指定主机列表文件

以上是调用ping模块,模块就是脚本(多数为Python脚本),多数脚本都支持参数,默认模块是command

command 模块(默认)

也可以不带 -m command

执行以下命令可以列出ansible的所有模块

# 查看ansible有哪些模块
ansible-doc -l
# 过滤指定模块
ansible-doc -l | grep yum
# 查看模块的帮助信息
ansible-doc yum
# ansible 模块总数
[root@node01 ansible]# ansible-doc -l | wc -l
3387

shell 模块

command和shell模块的区别

  • command模块的命令不启动shell,直接通过ssh执行命令
  • command不支持bash的特性,如管道和重定向等功能
  • 所有需要调用shell的功能都无法实现

file 模块

可以创建文件、目录、链接;修改权限与属性等

具有幂等性,任意次执行所产生的影响均与一次执行的影响相同

# 新建文件
ansible test -m file -a "path=/tmp/file.txt state=touch"
# 创建目录
ansible test -m file -a "path=/tmp/mydir state=directory"
# 修改文件或目录权限
ansible test -m file -a "path=/tmp/file.txt owner=sshd group=adm mode=0777"
# 删除目录
ansible test -m file -a "path=/tmp/mydir state=absent"
# 删除文件
ansible test -m file -a "path=/tmp/file.txt state=absent"
# 给/etc/hosts文件创建一个链接文件
ansible test -m file -a "src=/etc/hosts path=/tmp/host.txt state=link"

copy 模块

将文件拷贝到远程主机

backup=yes (提示:这个不是参数设置)如果目标主机有同名文件,则先备份

# 新建一个测试文件用于测试ansible的copy模块
echo AAA>~/a3.txt
# 将控制节点的a3.txt下发到被控制节点的/root目录下
ansible test -m copy -a "src=~/a3.txt dest=/root/"
# 下发文件并重命名为3a.txt
ansible test -m copy -a "stc=~/a3.txt dest=/root/3a.txt"
# 通过content可以直接提供文件内容, \n代表回车
ansible test -m copy -a "content='hello the world\n' dest=/root/new.txt"

Tips:

1、在控制节点上的a3.txt内容发生变化,在ansible调用copy模块向主机组test下的主机下发文件时,会判断目标目录下的文件内容和本次下发的文件进行对比,包括md5,如果不一致,则会进行覆盖。

2、再次执行命令,判断md5(checksum)和文件内容均未发生变化,会提示操作SUCCESS,并且changed为false。

fetch 模块

与copy类似,但是作用相反,可以将其他主机的文件拷贝到本地,同名文件会按照主机名创建对应的目录,并将同名文件放到对应的主机名命名的目录下

# 将远程主机的hostname文件下载到本地家目录
ansible test -m fetch -a "src=/etc/hostsname dest=~/"

  • 可以用于获取多台服务器的日志文件

lineinfile 模块 | replace 模块

修改单个文件的单行内容时可以使用lineinfile模块

# 在/etc/issue文件中添加一行内容hello world,默认添加到最后
ansible test -m lineinfile -a "path=/etc/issue line='hello world'"
# 基于幂等原则,重复执行,不会创建多行内容
ansible test -m lineinfile -a "path=/etc/issue line='hello world'"
# 将内容插入到Kernel行的后面
ansible test -m lineinfile -a "path=/etc/issue line='insert' insertafter='Kernel'"
# 修改单个文件的单行内容,在文件中正则匹配包含hello的行,把整行内容替换为ni hao
# 如果无法匹配到hello,则在文件最后添加一行nihao
# 如果有多行内容包含hello,则仅替换最后一行
ansible test -m lineinfile -a "path=/etc/issue regexp='hello' line='ni hao'"

lineinfile会替换一整行,replace可以替换关键词

# 将/etc/issue文件全文所有的Kernel替换为Ocean
ansible test -m replace -a "path=/etc/issue.net regexp=Kernel replace=Ocean"
# 将agent主机组的节点上 /etc/selinux/config 拷贝到 /root 下,替换SELINUX=disabled为SELINUX=enforcing
ansible agent -m replace -a "path=/root/config regexp='SELINUX=disabled' replace='SELINUX=enforcing'"

user 模块

可以实现Linux系统账户管理

  • 一万台服务器创建一两个普通用户,并且配置密码的场景?
# 远程test组中的所有主机创建用户harley
ansible test -m user -a "name=harley"
# 创建用户,并配置所属组、家目录等账户属性
ansible test -m user -a "name=harley uid=1010 group=adm groups=daemon,root home=/home/harley"
# 修改账户密码,需要经过hash值的加密,才能让计算机识别
ansible test -m user -a "name=harley password={{'123456'|password_hash('sha512')}}"
# 修改账户的附加组
ansible test -m user -a "name=harley groups=root,daemon"
# 删除账户
ansible test -m user -a "name=harley state=absent"
# 删除账户同时删除家目录、邮箱
ansible test -m user -a "name=harley state=absent remove=true"

查看加密的密码:grep -i harley /etc/shadow

yum_repository 模块

使用 yum_repository 可以创建或修改yum源配置文件

# 新建一个yum源配置文件/etc/yum.repos.d/myyum.repo
# yum源文件名为myyum,该文件的内容如下:
ansible test -m yum_repository -a "name=myyum description=hello baseurl=ftp://192.168.4.254/centos gpgcheck=no"
[myyum]
baseurl=ftp://192.168.4.254/centos
gpgcheck=0
name=hello # 修改yum源文件内容
ansible test -m yum_repository -a "name=myyum description=hi baseurl=ftp://192.168.4.254/centos gpgcheck=no" # 删除yum源文件myyum
ansible test -m yum_repository -a "name=myyum state=absent"

yum 模块

安装、卸载、升级软件包

# 安装软件包
ansible test -m yum -a "name=unzip state=present"
# 升级软件包, 软件名称可以是*,代表升级所有软件包
ansible test -m yum -a "name=unzip state=latest"
# 卸载unzip软件包
ansible test -m yum -a "name=unzip state=absent"

service 模块

启动、关闭、重启服务、设置开机启动

  • state:started|stopped|restarted
  • enabled:yes 设置开机启动
# 启动test组的httpd服务
ansible test -m service -a "name=httpd state=started"
# 停止test组的httpd服务
ansible test -m service -a "name=httpd state=stopped"
# 重启test组的httpd服务
ansible test -m service -a "name=httpd state=restarted"
# 设置test组的httpd服务开机自启, enabled的值可以填写 (yes|no|true|false)
ansible test -m service -a "name=httpd enabled=yes"

lvg 模块

创建、删除卷组(VG),修改卷组大小

state:present(创建)| absent(删除)

# 安装lvm2软件包
ansible test -m yum -a "name=lvm2"
# 创建名称为myvg的卷组,该卷组由/dev/vdb1组成
ansible test -m lvg -a "vg=myvg pvs=/dev/vdb1"
# 修改卷组大小
ansible test -m lvg -a "vg=myvg pvs=/dev/vdb1,/dev/vdb2"

给虚拟机增加一块硬盘

使用parted进行分区,第一步可以使用parted /dev/sdb mklabel gpt

使用 /dev/sdb1 创建卷组 myvg

修改卷组,增加 /dev/sdb2

lvol 模块

创建、删除逻辑卷(LV),修改逻辑卷大小

  • state:present(创建)| absent(删除)
# 使用myvg这个卷组创建一个名称为mylv的逻辑卷
ansible test -m lvol -a "lv=mylv vg=myvg size=2G"
# 修改LV逻辑卷大小
ansible test -m lvol -a "lv=mylv vg=myvg size=4G"
# 删除逻辑卷
ansible test -m lvol -a "lv=mylv vg=myvg state=absent force=yes"
# 删除卷组 myvg
ansible test -m lvg -a "vg=myvg state=absent"

删除逻辑卷

删除卷组

setup 模块

  • ansible_facts 用于采集被管理设备的系统信息
  • 所有收集的信息都被保存在变量中
  • 每次执行playbook默认第一个任务就是Gathering Facts
  • 使用setup模块可以查看收集到的facts信息

setup模块可以查看到以下信息(有父子关系时使用.分隔):

  • ansible_all_ipv4_address
  • ansible_bios_version
  • ansible_memtotal_mb
  • ansible_hostname
  • ansible_devices.vda.partitions.vda1.size

可以使用参数进行过滤:ansible agent -m setup -a "filter=*ipv4*"

debug 模块

debug 模块可以显示变量的值,可以辅助排错

debug 模块有两个参数,var(不需要加双括号)和msg(引用变量需要{{}})

在playbook中,通过debug模块可以显示特定的facts信息

1、获取信息 Gathering Facts >> 执行任务 test facts

2、使用debug模块,显示变量的值

使用场景

首先,ansible.cfg和hosts是这样的......

[root@node01 ansible]# cat ansible.cfg
[defaults] inventory = ~/ansible/hosts
#forks = 5
#ask_pass = True
#remote_port = 22
#host_key_checking = False [root@node01 ansible]# cat hosts
[master]
node01
[agent]
node02
node03
node04
[master:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_become_pass=123456
[agent:vars]
ansible_ssh_user=root
ansible_ssh_pass=123456
ansible_become_pass=123456
[cluster:children]
master
agent

1、查看agent组的内核版本

2、查看agent组防火墙运行状态

3、查看嵌套主机组cluster(即集群所有服务器)的network服务运行状态

Ansible - [03] Ansible ad-hoc模式的更多相关文章

  1. XE7 & IOS开发之开发账号(2):发布证书、发布授权profile的申请使用,附Ad hoc真机调试、生成ipa文件演示(XCode所有版本通用,有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...

  2. ansible基础-ansible角色的使用

    ansible基础-ansible角色的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...

  3. [sql异常]SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的

    //执行远程数据库表查询 SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=数据库地址;User ID=sa;password=sa' ).n ...

  4. OFDM、FTTx、SCTP、Ad Hoc、WSN术语简介

    上课提到一些术语,下来查了一下,总结在这里. OFDM: OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(M ...

  5. 什么是 Ansible - 使用 Ansible 进行配置管理

    [注]本文译自:https://www.edureka.co/blog/what-is-ansible/   Ansible 是一个开源的 IT 配置管理.部署和编排工具.它旨在为各种自动化挑战提供巨 ...

  6. 即席查询(Ad Hoc)如何做到又快又稳?

    数字化与数字生态建设,是当前所有企业成长发展的必经之路.随着"加强新型基础设施建设"第一次被写入政府工作报告,5G.人工智能.工业互联网.智慧城市等新型基建彻底激发了数字的价值. ...

  7. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问

    delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...

  8. Ad hoc sql

    SQL Server如何启用Ad Hoc Distributed Queries? 2011-08-11 14:53 wangdingbang CSDN博客 字号:T | T   本文主要介绍了SQL ...

  9. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问

    消息 15281,级别 16,状态 1,第 2 行SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/Open ...

  10. XE7 & IOS开发之开发账号(3):证书、AppID、设备、授权profile的申请使用,附Debug真机调试、Ad hoc下iPA文件生成演示(XCode5或以上版本推荐,有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...

随机推荐

  1. openEuler欧拉设置git pull免密

    使用git config命令在本地全局设置用户名和邮箱 git config --global user.name "username":全局添加用户名 git config -- ...

  2. 【转载】Apache Doris、DorisDB傻傻分不清。。。

    https://www.sohu.com/a/488816742_827544   相信这两天很多社区小伙伴都看到 StarRocks 所谓"开源"的动态了,开源用户群里有很多小伙 ...

  3. mybatis-plus逻辑删除不生效的解决办法

    我们在使用mybatis-plus时,一般设备逻辑删除是非常简单的,基本上在yaml等配置文件中做一下配置.然后在字段上注解@TableLogic就可以了.有不清楚的,可以参考https://www. ...

  4. Qt编写ffmpeg本地摄像头显示(16路本地摄像头占用3.2%CPU)

    一.前言 内核ffmpeg除了支持本地文件.网络文件.各种视频流播放以外,还支持打开本地摄像头,和正常的解析流程一致,唯一的区别就是在avformat_open_input第三个参数传入个AVInpu ...

  5. Qt编写安防视频监控系统49-多数据库支持

    一.前言 数据库设置模块,因为很多项目都会用到,索性这期间也将这玩意重新架构了一遍,对应的数据库组件同样重写了一遍,关于数据库的参数无非就6个,数据库类型(sqlite.mysql等).数据库名称.主 ...

  6. Qt音视频开发10-ffmpeg控制播放

    一.前言 很多人在用ffmpeg做视频流解码的时候,都会遇到一个问题,如何暂停,如果打开的是本地视频文件,暂停你只需要停止解码即可,但是视频流你会发现根本没用,一旦你停止了解码,下次重新解码的时候,居 ...

  7. IM跨平台技术学习(八):新QQ桌面版为何选择Electron作为跨端框架

    本文由QQ技术团队王辉.吴浩.陈俊文分享,编辑Tina整理,本文收录时有内容修订和排版优化. 1.引言 在瞬息万变的互联网行业中,年过二十四的即时通讯IM应用 QQ 堪称超长寿的产品,见证了中国互联网 ...

  8. 零基础快速入门WebRTC:基本概念、关键技术、与WebSocket的区别等

    本文引用自Hussein Nasser的两个视频分享,原文内容由卢冰聪翻译整理,即时通讯网收录时有大量修订和重新排版. 1.内容概述 本文是专为学习开源实时音视频工程WebRTC的入门者编写的速成指南 ...

  9. Detectron2使用

    Detectron2使用 Detectron2安装 git clone https://github.com/facebookresearch/detectron2.git cd detectron2 ...

  10. C++之OpenCV入门到提高007:调整图像亮度和对比度

    一.介绍 今天是这个系列<C++之 Opencv 入门到提高>的第七篇文章.这篇文章也不难,介绍如何调整图像的亮度.图像本质上也是数据,既然是数据,我们就可以针对图像的每个像素进行增加或者 ...