首页 > 其他分享 >五月学习之Ansible ad-hoc和常用模块

五月学习之Ansible ad-hoc和常用模块

时间:2023-05-26 22:32:31浏览次数:38  
标签:ad webservers ansible name state Ansible yes data hoc

一、Ansible ad-hoc

1、ad-hoc是什么

ad-hoc简而言之就是临时命令,执行完即结束,并不会保存
应用场景1:查看多台节点的进程是否存在
应用场景2:拷贝指定的文件至本地

2、ad-hoc命令使用

ansible 'groups' -m command -a 'df -h'

五月学习之Ansible ad-hoc和常用模块_hive

3、ad-hoc执行过程

1. 加载ansible配置文件,默认/etc/ansible/ansible.cfg 
2. 查找对应的主机配置文件,找到要执行的主机或者组,默认/etc/ansible/hosts
3. 加载对应的模块文件:command
4. ansible指挥目标主机执行命令 
  4.1 控制端生成临时执行文件          ~/.ansible/cp
  4.2 通过连接插件,与目标主机建立连接        paramiko_ssh
  4.3 通过插件功能将控制端的临时执行文件传输至目标主机的临时目录   ~/.ansible/tmp
  4.4 指挥目标主机给临时执行文件添加执行权限
  4.5 目标主机执行临时文件并将结果返回给控制主机 
  4.6 目标主机删除临时执行py文件,然后断开连接
5. ansible控制端显示结果,并退出。

4、ad-hoc执行状态

绿色:被管理端主机没有被修改

黄色:被管理端主机发现变更

红色:出现了故障,注意查看提示

二、常用模块

1、command

chdir:   #执行Ansible时,切换到指定的目录
creates: #如果文件存在,则跳过执行
removes: #如果文件存在,则执行

备份:如果备份的文件存在,则不执行备份的命令;如果文件不存在,则执行备份的命令;
ansible webservers -m command -a "creates=/tmp/log ifconfig eth0"

sersync2   --》判断该命令是否存在,如果存在就启动该命令,如果不存在就不执行;
如果文件存在,就执行,如果不存在,就不执行;
ansible webservers -m shell -a "removes=/tmp/log ifconfig eth0"

2、shell

shell支持  |管道符号;
command并不支持该类符号;
什么命令都可以执行  (SHell命令);

3、yum

name:			软件包名称
state:			状态
	present		安装
	absent		删除
	latest		最新版
enablerepo		通过哪个仓库获取
disablerepo		不使用哪些仓库的包
exclude			kernel排除
	
1.安装vsftpd软件包
ansible webservers -m yum -a 'name=vsftpd state=present'
2.删除vsftpd
ansible webservers -m yum -a 'name=vsftpd state=absent'
3.安装httpd服务,必须从epel仓库中安装(所有的被控都有这个epel仓库)
ansible webservers -m yum -a 'name=httpd state=present enablerepo=epel'
4.更新所有的软件包,唯独kernel程序不更新;
ansible webservers -m yum -a 'name=* state=present exclude="kernel*"'

4、copy

src:   控制端的源文件路径;
	dest: 被控端的文件路径;
  owner: 属主
  group: 属组
  mode:  权限
	backup: 备份;
	validate:验证;
	content   新建文件并给文件添加内容
  
1.更新nfs配置,将控制端的exports.j2 文件同步到 被控端的 /etc/exports 
ansible webservers -m copy -a 'src=./exports.j2 dest=/etc/exports owner=root group=root mode=0644 backup=yes'

2.往一个文件中写入内容的;  rsync.pass    1
ansible webservers -m copy -a 'content="oldxu.net123" dest=/etc/rsync.pass owner=root group=root mode="0600" backup=yes'

3.验证sudo配置是否正确(adhoc测试失败):
[root@manager project]# cat tt.yaml 
- hosts: webservers
  tasks:
  - name: Copy a "sudoers" file on the remote machine for editing
    copy:
      src: ./sudoers
      dest: /etc/sudoers
      validate: /usr/sbin/visudo -csf %s

5、group

name: 指定组名称
	gid: 指定gid
	state:
		present:创建  默认
		absent:删除
		
ansible webservers -m group -a 'name=www gid=666 state=present'
ansible webservers -m group -a 'name=mysqldb system=yes state=present'

6、user

user:
    name: 				创建的名称
    uid: 				指定uid
    group: 				指定基本组
	  shell: 				登录shell类型默认/bin/bash
	  create_home			是否创建家目录
	  password			设定对应的密码,必须是加密后的字符串才行,否则不生效;
	  system				系统用户
	  groups: admins,dev  附加组
	  append: yes			追加
    state: absent		删除
    remove: yes			家目录一起结束
    
1.创建www用户,指定uid 666,基本组www
ansible webservers -m user -a 'name=www uid=666 group=www shell=/sbin/nologin create_home=no'

2.创建db用户,基本组是root,附加组,adm,sys
ansible webservers -m user -a 'name=db group=root groups=adm,sys append=yes shell=/bin/bash create_home=yes'

3.创建一个ddd用户,密码123,需要正常登录系统;
ansible webservers -m user -a "name=ddd password=$6$salt$jkHSO0tOjmLW0S1NFlw5veSIDRAVsiQQMTrkOKy4xdCCLPNIsHhZkIRlzfzIvKyXeGdOfCBoW1wJZPLyQ9Qx/1 shell=/bin/bash create_home=yes"

4.创建一个dev用户,并为其生成对应的秘钥
ansible webservers -m user -a 'name=dev generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=~/.ssh/id_rsa'

7、file

创建文件:
	创建目录:
	授权:
  file:
    path: 		在被控端创建的路径;
    owner: 		属主;
    group: 		属组;
    mode: 		权限
	  state: 		类型
		touch: 文件
		directory: 目录
		link: 软链接
		hard:硬链接
	  recurse: yes 递归授权
	
前置:
useradd www -u 666
useradd -u 666 -g 666 www
1.创建一个/data目录,授权为www身份
ansible webservers -m file -a 'path=/data owner=www group=www mode="0755" state=directory recurse=yes'

2.在/data目录中创建一个文件
ansible webservers -m file -a 'path=/data/books owner=www group=www mode="0644" state=touch'

8、systemd

name			服务名称
	state			服务状态
		started		启动
		stopped		停止
		restarted	重启
		reloaded	重载
	enabled			开启自启动|  yes 启   no 不
	daemon_reload: yes

1.启动服务,并加入开机自启动
ansible webservers -m systemd -a 'name=nfs state=started enabled=yes'

2.停止服务,并关闭开机自启动
ansible webservers -m systemd -a 'name=nfs state=stopped enabled=no'

9、mount

src: 源设备路径,或网络地址;
    path: 挂载至本地哪个路径下;
    fstype: 设备类型; nfs
    opts:   挂载的选项
    state:  挂载还是卸载;
		present			永久挂载,但没有立即生效
		absent			卸载,临时挂载+永久挂载
		mounted			临时挂载
		unmounted		临时卸载;

1.将172.16.1.7的/data目录挂载到  172.16.1.8 /opt目录;
ansible 172.16.1.8 -m mount -a 'src=172.16.1.7:/data path=/opt fstype=nfs opts=defaults state=mounted'

10、cron

name: 		描述信息,描述脚本的作用;
  minute: 	分钟;
  hour:		小时;
	weekday:	周;
	user:		该任务由哪个用户取运行;默认root
  job: 		任务


1.每天凌晨3点执行 /bin/bash /scripts/client_push_data_server.sh &>/dev/null
ansible webservers -m cron -a 'name="backups app data scripts" hour=03 minute=00 job="/bin/bash /scripts/client_push_data_server.sh &>/dev/null"'

[root@web01 ~]# crontab  -l
#Ansible: backups app data scripts
00 03 * * * /bin/bash /scripts/client_push_data_server.sh &>/dev/null

2.删除 backups app data script  执行;
ansible webservers -m cron -a 'name="backups app data scripts" hour=03 minute=00 job="/bin/bash /scripts/client_push_data_server.sh &>/dev/null" state=absent'


3.注释 backups app data script  执行;
ansible webservers -m cron -a 'name="backups app data scripts" hour=03 minute=00 job="/bin/bash /scripts/client_push_data_server.sh &>/dev/null" disabled=yes'

11、get_url

get_url:
    url: 下载地址
    dest: 下载到本地的路径;
    mode: 权限;
	  checksum:对资源做校验;

1.下载一个资源到本地/tmp目录;
ansible webservers -m get_url -a 'url=http://fj.xuliangwei.com/config_vpn_new.zip dest=/tmp mode=0666'


2.对下载的资源做验证:
ansible webservers -m get_url -a 'url=http://fj.xuliangwei.com/config_vpn_new.zip dest=/opt mode=0666 checksum=md5:7107b0e2e01facb067842a6c4c7ffa31'

12、unarchive

unarchive:
    src: 			控制端的源文件
    dest: 			解压到被控端的路径
	  remote_src: yes	源文本是否在被控端,yes则在,no则不在

1.将控制端的压缩包,解压到被控端;  remote_src: no
ansible webservers -m unarchive -a 'src=./test.tar.gz dest=/mnt'

2.将被控端的压缩包解压到被控端:    remote_src: yes   config_vpn_new.zip
ansible webservers -m unarchive -a 'src=/tmp/config_vpn_new.zip dest=/mnt remote_src=yes'

13、archive

1.将被控端的/opt 打包到 /mnt 目录下,并命名为 opt.tar.gz 
ansible webservers -m archive -a 'path=/opt dest=/mnt/opt.tar.gz format=gz'

14、selinux

ansible webservers -m selinux -a 'state=disabled'

15、firewalld

zone:		要操作的区域  默认public
	source:	来源地址
  service: 	 服务名称 http,https,sshd,......
	port:		端口
  permanent:	永久生效,但不会立即生效
	immediate:	临时生效;
    state: 		启用和关闭;
		disabled
		enabled

1.让被控端都放行80端口;
ansible webservers -m systemd -a 'name=firewalld state=started'
ansible webservers -m firewalld -a 'port=80/tcp immediate=yes state=present'


2.让被控端都放行https端口;
ansible webservers -m systemd -a 'name=firewalld state=started'
ansible webservers -m firewalld -a 'service=https immediate=yes state=present'

16、iptables

iptables:
	  table: 					表
    chain: 					链
    source: 				来源IP
	  destination				目标IP
	  destination_port		目标端口
	  protocol	协议
    jump: DROP	动作
	  action		如何添加规则
		  insert:插入
		  append:追加

1.来源IP是192.168.1.1 目标地址 1.1.1.1 目标端口 80  协议 tcp  则拒绝; 规则要写入第一行;
ansible webservers -m iptables -a 'table=filter chain=INPUT source=192.168.1.1/32 destination=1.1.1.1 destination_port=80 protocol=tcp jump=DROP action=insert'

2.NAT:SNAT和DNAT:
	DNAT: 如果请求1.1.1:80端口,则DNAT到2.2.2.2:8800
	ansible webservers -m iptables -a 'table=nat chain=PREROUTING protocol=tcp destination=1.1.1.1 destination_port=80 jump=DNAT to_destination="2.2.2.2:8800"'

	DNAT: 如果请求1.1.1:81端口,则DNAT到3.3.3.3:8800
	ansible webservers -m iptables -a 'table=nat chain=PREROUTING protocol=tcp destination=1.1.1.1 destination_port=81 jump=DNAT to_destination="3.3.3.3:8800"'

SNAT:  
	POSTROUTING
	iptables -t nat -I POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 5.5.5.5

ansible webservers -m iptables -a 'table=nat chain=POSTROUTING source=172.16.2.0/24 jump=SNAT to_source=6.6.6.6'
ansible webservers -m iptables -a 'table=nat chain=POSTROUTING source=172.16.3.0/24 jump=SNAT to_source=7.7.7.7 action=insert'

17、lineinfile

path 目标文件
  regexp 正则表达式,要修改的行
  line 最终修改的结果
  insertafter 将文本插到指定的行之后
  insertbefore 将文本插入到指定的行之前
  state 可以选择absent删除,默认是present替换
  backup 是否在修改文件之前对文件进行备份
  create 文件不存在时,是否要创建文件
  
1.替换httpd.conf文件中, ^Listen   为  Linsten 8080;
ansible webservers -m lineinfile -a 'path=/etc/httpd/conf/httpd.conf regexp="^Listen" line="Listen 8080"'
2.给主机增加一个网关;
ansible webservers -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth1 line="GATEWAY=172.16.1.200"'
3.删除主机的网关;
ansible webservers -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth1 regexp="^GATEWAY" state=absent'
4.给主机增加一个网关,但需要增加到ONBOOT下面;
ansible webservers -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth1 insertafter="ONBOOT=yes" line="GATEWAY=172.16.1.200"'
5.给主机增加一个网关,但需要增加到ONBOOT上面;
ansible webservers -m lineinfile -a 'path=/etc/sysconfig/network-scripts/ifcfg-eth1 insertbefore="ONBOOT=yes" line="test=172.16.1.200"'

标签:ad,webservers,ansible,name,state,Ansible,yes,data,hoc
From: https://blog.51cto.com/u_13236892/6359465

相关文章

  • 自动化工具ansible的部署和使用
    (文章目录)前言Ansible是一种自动化工具,可用于部署、配置和管理计算机系统。它是基于Python的开源软件,具有易于使用、可靠、灵活和可扩展等特点,被广泛应用于IT管理领域。Ansible提供了一个简单而强大的语言,用于描述系统如何配置和管理,称为“Playbook”。它使用SSH协议作为通信......
  • ThreadLocal源码学习笔记
    系列文章目录和关于我一丶ThreadLocal结构#每一个Thread对象都有一个名为threadLocals类型为ThreadLocal.ThreadLocalMap的属性,ThreadLocal.ThreadLocalMap对象内部存在一个Entry数组,其中存储的Entry对象key是ThreadLocal,value便是我们绑定在线程上的值。ThreadLocal可以做......
  • 何为ORM框架?和ADO.NET 对比
    百度:ORM(ObjectRelationalMapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。简单理解为一种框架的格式。只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。ORM是通过使......
  • 【K8s入门推荐】K8s1.24版本部署全教程,轻松掌握技巧kubeadm丨Kubernetes丨容器编排丨
    通过kubeadm方式极速部署Kubernetes1.24版本前言在Kubernetes的搭建过程中,繁琐的手动操作和复杂的配置往往会成为制约部署效率的关键因素。而使用kubeadm工具可以避免这些问题,大大提高集群的部署效率和部署质量。本文将为大家详细介绍如何使用kubeadm工具快速搭建Kubernetes1.24......
  • Thread Exercises C语言线程
    1/4Assignment4:ThreadsDue11Junby23:59Points10Availableuntil15Junat23:59Assignment4-ThreadExercisesDuedate11:59pm-SundayWeek13.Thisassignmentisdesignedtotestyourunderstandingofthreads,mutexesandsignalling.Download......
  • (ADI)AD7276ARMZ高速模数转换器、A4980KLPTR汽车步进电机驱动器
    AD7276ARMZ是(ADI)的高速模数转换器、数模转换器和AFE/CODEC构成了业界知名的高速数据转换器产品组合。该器件具有出色性能、高输入带宽和集成的信号处理,使设计人员能够轻松、可靠地选择合适的方案用于各种应用,包括仪表、军用/航天、无线/有线通信和医学影像。位数:12采样率(每......
  • Unity中的InitializeOnLoad特性:深入解析与实践
    Unity中的InitializeOnLoad特性:深入解析与实践在Unity开发过程中,我们经常需要在编辑器启动时或脚本重新编译后执行一些操作,例如初始化数据、注册事件等。这时,我们可以使用InitializeOnLoad特性来实现这一需求。本文将详细介绍InitializeOnLoad特性的用法,并通过三个实际案例来展示其......
  • SimpleAdmin手摸手教学之:项目架构设计2.1
    一、说明在2.0的架构设计中引用了插件式开发的概念,将功能模块插件化,以实现更清晰的目录结构,更灵活的解决方案,减少代码的臃肿性。随着2.0版本的使用,也随之暴露出一些问题,之前讲究的插件化并没有完全的实现插件化,我理想的插件化应该是需要某个业务或者功能模块,直接引用该项目既可,不......
  • 前端vue中实现文件下载的几种方法 四种方法, a.download = "重新下命名下载文件名"
    前端vue中实现文件下载的几种方法原文链接:https://blog.csdn.net/weixin_46074961/article/details/105677732第一种前端创建超链接,通过a标签向后端发送get请求,需要给a标签添加一个download属性这种写法是创造了一个a标签,把地址写到a标签里再用js调用点击,实现访问文件地址......
  • ADManager Plus:微软的全面活动目录管理解决方案
    摘要:ADManagerPlus是微软推出的一款全面活动目录(ActiveDirectory)管理解决方案。它提供了一系列强大的功能,帮助组织简化和自动化活动目录管理,提高安全性和效率。本文将介绍ADManagerPlus的特点、优势以及在企业中的应用价值。微软的ADManagerPlus是一款功能强大的全面活动目录管......