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. [OS] 计算机资源虚拟化技术

    1 定义:计算机资源虚拟化 服务器虚拟化主要通过软件技术将物理服务器的硬件资源抽象化,创建多个独立的虚拟服务器环境. 2 虚拟化技术方向 以下是一些常见的服务器虚拟化方式和工具: 基于hypervis ...

  2. 鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性

    鸿蒙应用开发从入门到入行 第一天 - HarmonyOS介绍 导读:在本篇文章里,您将了解到HarmonyOS是什么,以及有哪些振奋人心的特性.并且猫林老师会在本篇文章里给出结论:鸿蒙必能蚕食安卓份额 ...

  3. node 使用 pm2-logrotate 分割pm2日志 && 停止 pm2-logroatate

    使用pm2-logrotate 解决pm2日志体积过大,进行分割 什么是pm2-logrotate? pm2-logrotate 是一个pm2的插件,可以对pm2日志进行管理,所以它的运行需要依靠pm ...

  4. logback 中打印自定义参数 (ip 服务名)

    打印 application.properties 配置文件中的参数 首先需要引入文件 <property resource="application.properties" ...

  5. 关于Java的UUID

    UUID或者UNID或者UID,是一个统一唯一标识,可以用来标记文档.数据或其它需要唯一标识的东西.Java 5.0内置UUID的实现,见java.util.UUID. 下面代码是找到的2种实现方式, ...

  6. javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplicati

    把这两个勾选去掉

  7. Eclipse生成javadoc方法与错误解决

    1.Eclipse生成javadoc方法与错误解决 2.Eclipse自动生成文件注释以及使用javadoc命令自动生成API文档 3.maven配置生成java doc文档中文乱码问题解决方案 4. ...

  8. Matlab深度学习

    View image files Instructions are in the task pane to the left. Complete and submit each task one at ...

  9. CDS标准视图:维护通知活动信息 I_MaintNotificationActyData

    视图名称:维护通知活动信息 I_MaintNotificationActyData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'INOTIFACTY ...

  10. .NET 中管理 Web API 文档的两种方式

    前言 在 .NET 开发中管理 Web API 文档是确保 API 易用性.可维护性和一致性的关键.今天大姚给大家分享两种在 .NET 中管理 Web API 文档的方式,希望可以帮助到有需要的同学. ...