Ansible - [03] Ansible ad-hoc模式
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模式的更多相关文章
- XE7 & IOS开发之开发账号(2):发布证书、发布授权profile的申请使用,附Ad hoc真机调试、生成ipa文件演示(XCode所有版本通用,有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...
- ansible基础-ansible角色的使用
ansible基础-ansible角色的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...
- [sql异常]SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的
//执行远程数据库表查询 SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=数据库地址;User ID=sa;password=sa' ).n ...
- OFDM、FTTx、SCTP、Ad Hoc、WSN术语简介
上课提到一些术语,下来查了一下,总结在这里. OFDM: OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(M ...
- 什么是 Ansible - 使用 Ansible 进行配置管理
[注]本文译自:https://www.edureka.co/blog/what-is-ansible/ Ansible 是一个开源的 IT 配置管理.部署和编排工具.它旨在为各种自动化挑战提供巨 ...
- 即席查询(Ad Hoc)如何做到又快又稳?
数字化与数字生态建设,是当前所有企业成长发展的必经之路.随着"加强新型基础设施建设"第一次被写入政府工作报告,5G.人工智能.工业互联网.智慧城市等新型基建彻底激发了数字的价值. ...
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...
- Ad hoc sql
SQL Server如何启用Ad Hoc Distributed Queries? 2011-08-11 14:53 wangdingbang CSDN博客 字号:T | T 本文主要介绍了SQL ...
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问
消息 15281,级别 16,状态 1,第 2 行SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/Open ...
- XE7 & IOS开发之开发账号(3):证书、AppID、设备、授权profile的申请使用,附Debug真机调试、Ad hoc下iPA文件生成演示(XCode5或以上版本推荐,有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...
随机推荐
- Java8使用Stream实现List中对象属性的合并(去重并求和)
前言 在需求开发中,我们需要对一个List中的对象进行唯一值属性去重,属性求和,对象假设为Pool,有name.value两个属性,其中name表示唯一值,需要value进行求和,并最后保持一份对象. ...
- 获取公众号openid,通过unionid 和小程序用户绑定起来
时间仓促,暂时记录一下,有问题请留言 背景:目前客户项目有两套系统.一套暂时定为A系统,另一套为B系统,两套系统下有不同的公众号,小程序. 需求:B系统为用户端系统,需要发送公众号模板消息,所以需要用 ...
- 【机器学习】SVM(支持向量机)算法实验
(一)实验名称:SVM(支持向量机)算法实验 (二)实验目的: 学习支持向量机SVM的基本概念 了解核函数的基本概念 掌握使用scikit-learn API函数实现SVM算法 (三)实验内容:使用s ...
- 【Linux】职教云作业
作业_职教云_Day01 @ 哔哩哔哩 萌狼蓝天 1.由普通用户切换到root用户 su 2.列出home目录下的各个文件名字 cd /home ls 3.在/etc/目录下显示以sysc开头的所有命 ...
- sublime text 4 安装(含激活码)
一.下载步骤 官网地址:Sublime Text - the sophisticated text editor for code, markup and prose windows下载链接:Than ...
- UML之包的导入与访问
包是UML中管理元素的有效手段,UML中的所有元素均隶属于某一个包,即使你没有指定元素所属的包,这些元素也会被置于一个默认包中,包的本质是命名空间.当我们在一个包中需要访问另一个包中的元素时,可以使用 ...
- 并发和并行 | Python中实现多线程 threading 和多进程 multiprocessing
并发和并行 | Python中实现多线程 threading 和多进程 multiprocessing 昨天晚上组会轮到我汇报技术内容,最近正在和 ray 以及 spark 打交道,索性讲一下并发和并 ...
- [云研发]腾讯云cloudstudio使用教程-记录1
cloudstudio 在vscode中新建终端,使用nvidia-smi查看显卡与gpu情况,可知当前使用的显卡是T4的,显存有15G
- [LC515]在每个树的行中找最大值
题目内容 题目分析 这是一道典型的树结构遍历题,可以使用层序遍历(BFS)或者(DFS)进行解题. 在BFS中,使用队列结构遍历树的每一层并维护每层的最大值. 在DFS中,由于并不是一层一层的去访问树 ...
- python连接pgsql&mysql
1.python连接pgsql import psycopg2 def connect_pgsql(list_sql): conn = psycopg2.connect(host='db_host', ...