ansible服务器搭建及Ad-Hoc模块使用


前言

一、ansible特点(批量)

  • 将多台主机的控制集中到一台,通过shell设置好,集中控制。
  • ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
  • ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

二、ansible安装以及实验环境准备

准备三台虚拟主机
一台ansible服务器(172.25.254.1)
两台受控主机(网段分别为172.25.254.2、172.25.254.3)
配置完毕可以无图形运行,节约内存。

基本出参数如表:

主机名IP作用
server1172.25.254.1安装ansible服务,需配置联网
server2172.25.254.2受控机1
server3172.25.254.3受控机2

最后全部通过ssh连接上即可
在这里插入图片描述

2.1 配置epel源

我是将物理机做了地址转换,让虚拟机server1-3都可以联网。

2.2 安装ansible

-	dnf install ansible -y
-	ansible --version

-	ansible的基本信息:
	/etc/ansible/ansible.conf		##全局配置文件,默认很少修改
	/etc/ansible/hosts			    ##全局主机清单清单文件

在这里插入图片描述在这里插入图片描述

2.3配置免密登陆

让server1可以免密ssh server2 server3

ssh-keygen
ssh-cope-id  IP

2.4 ansible主机下使用普户,并配置执行server2,server3为root权限(为了安全)

ansible主机下:
su - haojin 切换到普通用户,此时对受控机没有root权限
在这里插入图片描述

受控机下:
给ansble主机普通用户配置root权限并免密登陆
visudo

在这里插入图片描述在这里插入图片描述修改后,都测试成功!
在这里插入图片描述怎么省去 -b选项,又让我执行以超户权限执行呢
在默认/etc/ansible/ansible.conf 中找到模板
在这里插入图片描述粘贴到当前用户ansible/ansible.conf下,并去掉#
在这里插入图片描述

三、ansible配置文件与清单

前面二单元都是做该实验的准备,这里开始正式学习ansible相关

 /etc/ansible/hosts              ##控制默认清单列表位置
  清单写主机名或者ip都可以,每行一个
	server2  #配置了本地域名解析,相当于ip地址
	server3

 组内清单查看:
	ansible test --list-hosts     ##显示test组中的ip清单
 	ansible prod --list-hosts     ##显示prod组中的ip清单
 	ansible ungrouped --list-hosts  ##显示没有分组的列表ip
  	ansible all  --list-hosts       ##显示所有分组列表内容
 清单形式:
 	#单层组清单#
		[test]
		server2
		[prod]
		server3
		[list3]
		server2
	    server3
	    server4

	#组嵌套清单#
		[westos:children]     ##格式必须对
		test
	    list3
	#主机规格的范围化操作
		##通过指定主机名称或IP的范围可以简化Ansible主机清单
		#语法:
			#[start:end]
			示例:
			[westostest]
			172.25.254.[100:108]
	#ansible命令指定清单的正则表达式
-		*		##所有
				##172.25.254.*
				##westos*
				示例
					ansible 'westos*' -i /mnt/westos --list
					ansible '172.*'   -i /mnt/westos --list
-		:		##逻辑或
				##:westos1:linux:
				##172.25.254.100:172.25.254.200
				示例
					ansible 'westos_list1:westos_list2' -i /mnt/westos --list
-		:&		##逻辑与
				##"westos1:&linux"
				##主机即在westos1清单也在linux清单	
				示例
					ansible 'westos_list2:&westos_list3' -i /mnt/westos --list
-		:!		##逻辑非
				##'westos1:!linux'
				##在westos1中不在linux中	
				示例
					ansible 'westos_list2:!westos_list3' -i /mnt/westos --list
-		~		##以关键字开头,执行优先级高
				~(str1|str2)	##以条件1或者条件2开头	
				示例
					ansible '~westos' -i /mnt/westos --list	
					ansible '~list:!westos' --list-hosts -i /mnt/westos 
					ansible '~list:westos' --list-hosts -i /mnt/westos
					ansible '~list:&westos' --list-hosts -i /mnt/westos
  
  
  ansible westos -m ping -u root -k    
  ##通过密码输入,来ping通westos列表中的用户ip。m表示执行指令
  ansible westos --list-hosts -i /mnt/westos      ##i指定列表文件

四、Ansible配置文件参数详解

1. 格式
- 	ansible 清单中组名称 -m 模块 -u remote_user(远程主机用户)

2. 配置文件的分类与优先级
-	/etc/ansible/ansible.cfg	#基本配置文件,找不到其他配置文件此文件生效
-	~/.ansible.cfg				#用户当前目录中没有ansible.cfg此文件生效
-	./ansible.cfg				#优先级最高

3. 常用配置参数
-	#[default]					##基本信息设定
-		inventory=				##指定清单路径
-		remote_user=			##在受管主机上登陆的用户名称,未指定使用当前用户
-		ask_pass=				##是否提示输入SSH密码,如果公钥登陆设定为false
-		library=				##库文件存放目录
-		local_tmp=				##本机临时命令执行目录
-		remote_tmp=				##远程主机临时py命令文件存放目录
-		forks=					##默认并发数量
-		host_key_checking=		##第一次连接受管主机时是否要输入yes建立host_key
-		sudo_user=				##默认sudo用户
-		ask_sudo_pass=			##每次在受控主机执行ansible命令时是否询问sudo密码
-		module_name=			##默认模块,默认使用command,可以修改为shell
-		log_path=				##日志文件路径

4.[privilege_escalation]		##身份信息设定
-		become=					##连接后是否自动切换用户
-		become_method=			##设定切换用户的方式,通常用sudo
-		become_user=			##在受管主机中切换到的用户,通常为root
-		become_ask_pass			##是否需要为become_method提示输入密码,默认为false

五、常用模块

5.1 ansible实现管理的方式

  • Ad-Hoc ##利用ansible命令直接完成管理,主要用于临时命令使用场景
  • playbook ##ansible脚本,主要用于大型项目场景,需要前期的规划

5.2 Ad-Hoc执行方式中如何获得帮助

ansible-doc	##显示模块帮助的指令

格式

 ansible-doc [参数] [模块...]

常用参数

 	-l		 ##列出可用模块
 	-s		##显示指定模块的playbook片段

5.3 ansible命令运行方式及常用参数

-格式

ansible	清单	  -m 模块	 -a 模块参数

-常用参数

    --version	##显示版本
	-m module	##指定模块,默认为command模块
	-v			##详细过程 -vv -vvv更详细过程
	--list		##显示主机列表,也可以用--list-hosts
	-k			##提示输入ssh连接密码,默认key认证
	-C			##预执行检测
	-T			##执行命令的超时时间,默认10s
	-u			##指定远程执行的用户
	-b			##执行sudo切换身份操作(相当于ansible.cfg中的become参数)
	-become-user=USERNAME	##指定sudo的用户
	-K			##提示输入sudo密码(相当于ansible.cfg中的become_ask_pass参数)

5.4 ansible执行后基本颜色信息

颜色代表意思
绿色执行成功但没有对远程主机做任何改变
黄色执行成功并对远程主机做改变
红色执行失败

5.5 常用模块

5.5.1 command模块

- #功能: 在远程主机执行命令,此模块为默认模块

- #常用参数
	chdir		##执行命令前先进入到指定目录
	cmd			##运行命令指定
	creates		##如果文件存在将不运行
	removes		##如果文件存在将运行
	free_form	##在远程主机中执行的命令,此参数不需要加
- #实例
	ansible all -m command -a "useradd lee" -u root -k
	ansible all -m command -a "userdel -r lee" -u root -k
	ansible all -m command -a "chdir=/etc cat passwd " -u root -k
	ansible all -m command -a "chdir=/etc creates=/etc/passwd cat passwd " -u root -k 
	ansible all -m command -a "chdir=/etc removes=/etc/passwd cat passwd " -u root -k
	
-##注意##
	Linux中的很多通配符在command模块中不支持,如*等

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

5.5.2 shell 模块

- #功能: 和command功能类似

- #常用参数
	chdir           ##执行命令前先进入到指定目录
	cmd             ##运行命令指定
	creates         ##如果文件存在将不运行
	removes         ##如果文件存在在将运行
	free_form 	##在远程主机中执行的命令,此参数不需要加
	executable	##指定执行环境,默认为sh(比command多的参数)

- #实例
	ansible all -m shell -a "executable=sh ps ax | grep $$ " -k
	

在这里插入图片描述

5.5.3 script模块

- 功能:
	在ansible主机中写好的脚本在受控主机中执行
	ansible-doc -s script  查看帮助
- 实例
	vim /mnt/westos.sh
		#!/bin/bash
		echo $HOSTNAME

	ansible all -m script -a "/mnt/westos.sh" -k

其中HOSTNAME是环境变量,这里不用定义,查看环境变量可用env命令
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.5.4 copy模块

- 功能
- 	从ansible主机复制文件到受控主机

- 常用参数
-	src			##源文件
-	dest		##目的地文件
-	owner		##指定目的地文件所有人
-	group		##指定目的地文件所有组
-	mode		##指定目的地文件权限
-	backup=yes	##当受控主机中存在文件时备份原文件(传送的文件名字和已有文件名字冲突时)
-	content		##指定文本内容直接在受控主机中生成文件

- 实例
-	ansible all -m copy -a "src=/root/westos dest=/mnt/westos  owner=lee mode=777 backup=yes"
-	ansible all -m copy -a "content='hello westos\nhello linux\n' dest=/mnt/westosfile1 owner=lee mode=600"

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.5.5 fetch模块

- 功能
- 	从受控主机把文件复制到ansible主机,但不支持目录

- 常用参数
-	src			##受控主机的源文件
-	dest		##本机目录
-	flat		##可以直接拷贝文件,忽略文件的上层目录(基础名称功能)
- 实例
	ansible all -m fetch -a "src=/etc/hostname dest=/mnt" -k
	ansible all -m fetch -a "src=/etc/hostname dest=/mnt flat=yes" -k

在这里插入图片描述在这里插入图片描述

5.5.6 file模块

- 功能
 	设置文件的属性

- 常用参数
	path=		 ##指定文件名称
	state=	     ##指定操作状态
	      touch		     ##建立
	      absent		 ##删除
	      directory 	 ##递归
	      link		     ##建立软链接
	      hard	         ##建立硬链接
	mode=		 ##设定权限
	owner=	     ##设定文件用户
	group=	     ##设定文件组
	src=		 ##源文件
	dest=		 ##目标文件
	recurse=yes	 ##递归,相当于-R参数

- 示例
	ansible all -m file -a 'path=/mnt/test.sh state=touch'
	ansible all -m file -a 'path=/mnt/test.sh state=absent'
	ansible all -m file -a 'path=/mnt/westos state=directory'
	ansible all -m file -a 'path=/mnt/westos state=directory mode=777 recurse=yes'
	ansible all -m file -a 'src=/mnt/file dest=/mnt/westos state=link'
	ansible all -m file -a 'src=/mnt/file dest=/mnt/westos1 state=hard'
	ansible all -m file -a 'path=/mnt/file state=touch owner=lee group=westos mode=777'

在这里插入图片描述在这里插入图片描述

5.5.7 unarchive模块

- 功能
-		解压缩
- 常用参数
-	copy		##默认为yes 从ansible主机复制文件到受控主机
				##设定为no  从受控主机中寻找src源文件
-	remote_src	##功能同copy且相反
				##设定为yes 表示包在受控主机(包为压缩包)
				##设定为no表示包在ansible主机
-	src			##包路径,可以使ansible主机也可以使受控主机
-	dest		##受控主机目录
-	mode		##加压后文件权限
-	owner
-	group
-	list_files  ##显示压缩的文件列表信息
- 实例
	ansible all -m unarchive -a 'src=/mnt/etc.tar.gz dest=/mnt owner=lee' -k
	ansible all -m unarchive -a "src=/opt/etc.tar.gz dest=/mnt copy=no"

5.5.8 archive

#作用: 压缩

#常用参数
path		##打包目录名称
dest		##声称打包文件名称
format		##打包格式
owner		##指定文件所属人
mode		##指定文件权限

#实例
ansible all -m archive -a 'path=/etc dest=/opt/etc.tar.gz format=gz owner=lee mode=700' -k

  

5.5.9 hostname

#作用
管理主机名称

#常用参数
name		##指定主机名称

#实例
ansbile 172.25.254.100 -m hostname -a 'name=lee.westos.com'

改名速度有点慢,不知道原因。
在这里插入图片描述在这里插入图片描述

5.5.10 cron

- 作用:计划任务

- 常用参数
	minute		##分钟
	hour		##小时
	day			##天
	month		##月
	weekday		##周
	name		##任务名称
	job			##任务脚本或命令
	disabled	##yes 禁用计划任务
				##no  启动计划任务
	state		##absent 删除计划任务


- 实例
	ansible list1 -m cron -a "job='echo hello' name=test disable=yes" -k
	ansible list1 -m cron -a "job='echo hello' name=test disabled=yes" -k
	ansible list1 -m cron -a "job='echo hello' name=test state=absent" -k

5.5.11 yum_repository

- 作用
-	配置系统软件仓库源文件

- 常用参数
	name		##指定仓库名称
	baseurl		##指定源路径
	description	##指定仓库描述
	file		##指定仓库文件名称
	enabled		##仓库是否启用
	gpgcheck	##仓库是否检测gpgkey
	state		##默认值present 建立
				##absent为删除
- 实例
	ansible all -m yum_repository -a "name=AppStream baseurl=http://172.25.254.250/rhel8.2/AppStream description=AppStream_westos gpgcheck=no file=westos_test" -k
	ansible all -m yum_repository -a "name=AppStream  file=westos_test state=absent" -k

5.5.12 dnf

- #作用
-	管理系统中的dnf仓库及管理软件

- 常用参数
	name		##指定包
	state		##指定动作
				#present	安装
				#latest		更新(安装最新版或者更新到最新版)
				#absent		卸载
	list		##列出指定信息
				# httpd	
				# installed
				# all
				# available
	disable_gpg_check   ##禁用gpgkey检测
	enablerepo			##指定安装包来源
	disablerepo			##禁用安装包来源
	autoremove=yes|no  ##yes卸载全部依赖,默认为no
	

- 实例
	ansible all -m dnf -a "name=httpd state=latest"
	ansible all -m dnf -a 'name="httpd,mariadb" state=present'
	ansible all -m dnf -a 'name=httpd state=absent'
	ansible all -m dnf -a 'name=httpd state=absent autoremove=no'
	ansible all -m dnf -a 'name=httpd state=present enablerepo=AppStream'
	ansible all -m dnf -a 'name="*" state=latest'      ##更新所有组件
	ansible all -m dnf -a 'name=http://172.25.254.250/software/wps-office-xxx.rpm state=present'
	ansible all -m dnf -a 'name="@Virtualiation Tools" state=present' ##安装组件

在这里插入图片描述
在这里插入图片描述

5.5.13 service

- 作用
- 	管理系统服务状态

- 常用参数
	name=		##指定服务名称
	            httpd
	            vsftpd
	            mariadb
	            firewalld
	state=		##指定对服务的动作
				started
				stoped
				restarted
				reloaded
	enabled=	##设定服务开机是否启动
				yes开启启动
				no开机不启动

- 实例
	ansible all -m service -a "name=httpd state=started enabled=yes" 
	ansible all -m service -a "name=httpd state=restarted enabled=yes" 

在这里插入图片描述

在这里插入图片描述

5.5.14 user

- 作用
  模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作

- 常用参数
	name		##必须参数,用于指定要操作的用户名称。
	group		##指定用户所在的基本组。
	gourps		##指定用户所在的附加组。
	append		##指定添加附加组默认值为no
	shell		##指定用户的默认 shell。
	uid			##指定用户的 uid 号。
	comment		##指定用户的注释信息。
	state		##用于指定用户是否存在于远程主机
				#present	建立
				#absent		删除
	remove		##当删除用户是删除用户家目录,默认值为no
	password	##此参数用于指定用户的密码。但密码为明文,
				##可以用openssl passwd -6  '密码'生成加密字符
	generate_ssh_key ##生成sshkey

- 实例
	ansible all -m user -a 'name=lee'
	ansible all -m user -a 'name=lee state=absent'
	ansible all -m user -a 'name=lee remove=yes state=absent'
	ansible all -m user -a 'name=lee  group=888'   设定
	ansible all -m user -a 'name=lee  group=888 groups="user1,user2"'
	ansible all -m user -a 'name=lee groups="user3"'
	ansible all -m user -a 'name=lee groups="user1,user2" append=yes'
	openssl passwd -6 'westos'
	ansible all -m user -a 'name=lee password="$6$F4OBwqoXAigDV.dn$I2OgEPB3kfyl8CPmdh3Y8vKDqewZKrVMIDPPIt8GKnhs/DW4gZHfxrZX5ziQN7rVjISX7l14KwDQHEd.uprlV/"'
	ansible all -m user -a 'name=lee generate_ssh_key=yes'

5.5.15 group模块

- 作用
  group 模块可以帮助我们管理远程主机上的组。
- 常用参数
	name		##用于指定要操作的组名称。
	state		##用于指定组的状态
				present	建立
				absent		删除
	gid			用于指定组的gid。
 	system    yes|no   ##默认为no,=yes时创建一个系统组
- 实例
	ansible all -m group -a 'name=westoslee'
	ansible all -m group -a 'name=westoslee state=absent'
	ansible all -m group -a 'name=westoslee gid=8888'

5.5.16 lineinfile模块

- 	path		##指定要操作的文件。
-	line		##指定文本内容。
-	regexp		##使用正则表达式匹配对应的行当替换文本时
				##如果有多行文本都能被匹配
				##则只有最后面被匹配到的那行文本才会被替换
				##当删除文本时,如果有多行文本都能被匹配
				##这么这些行都会被删除。
-	state		##当想要删除对应的文本时需要将state参数的值设置为absent
				##state的默认值为present。
-	backrefs	##当内容无匹配规则时不对文件做任何更改,默认值为no
				##向后引用regexp变量信息
-	insertafter	##借助insertafter参数可以将文本插入到“指定的行”之后
				##insertafter参数的值可以设置为EOF或者正则表达式
-	insertbefore##借助insertbefore参数可以将文本插入到“指定的行”之前
				#insertbefore参数的值可以设置为BOF或者正则表达式
-	backup		##是否在修改文件之前对文件进行备份。
-	create		##当要操作的文件并不存在时,是否创建对应的文件。

- 实例
	ansible all -m lineinfile -a 'path=/mnt/westos line="hello westos"'
	ansible all -m lineinfile -a 'path=/mnt/westos regexp="^westos" line="hello westos" '
	ansible all -m lineinfile -a 'path=/mnt/westos regexp="^test" line="westos test"'
	ansible all -m lineinfile -a 'path=/mnt/westos regexp='^test' line="westos test new" backrefs=yes'
	vim westos
		hello westos
		hello test
		hello linux
	ansible all -m lineinfile -a 'path=/mnt/westos regexp="(h.{4}).*(w.{5})" line="\1" backrefs=yes'  ##h后面四个字符,w后面5个字符,.*表示中间多个分割字符。  \1表示替换文件中第一个变量()里面的。
	执行完最后一行hello linux 变为hello
	ansible all -m lineinfile -a 'path=/mnt/westos line="###### westos end #####" insertafter=EOF'
	ansible all -m lineinfile -a 'path=/mnt/westos line="###### westos end lee #####" insertafter="hello"'
	ansible all -m lineinfile -a 'path=/mnt/westos line="###### westos test #####" insertbefore=BOF'
	ansible all -m lineinfile -a 'path=/mnt/westos line="###### westos test lee #####" insertbefore="hello"'

5.5.17 replace模块

- 作用
  replace 模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换

- 常用参数
	path		##指定要操作的文件
	regexp		##指定一个正则表达式
				#文件中与正则匹配的字符串将会被替换。
	replace		##指定最终要替换成的字符串。
	backup		##是否在修改文件之前对文件进行备份,最好设置为yes。
	
- 实例
	ansible all -m replace -a 'path=/mnt/westos regexp="WESTOS" replace="westos_lee" backup=yes'

5.5.18 setup模块

- 作用
  setup模块用于收集远程主机的一些基本信息

- 常用参数
	filter		##用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

- 实例
	ansible all -m setup -k
	ansible all -m setup   -a "filter='ansible_all_ipv4_addresses'" -k

5.5.19 debug模块

- 作用
  调试模块,用于在调试中输出信息

- 常用参数:
	msg:		##调试输出的消息,相当于echo
	var:		##将某个任务执行的输出作为变量传递给debug模块	相当于echo `ls /hello`
				##debug会直接将其打印输出
	verbosity:	##debug的级别(默认是0级,全部显示)

5.5.20 seboolean模块

- 作用
	设置sebool值

- 常用参数:
	name:	    ##设置的sebool值的内容,可以通过getsebool -a 查看
	state:		##状态yes|no
	persistent:##yes立即生效,no不生效

5.5.21 filesystem模块

- 作用
 格式化硬盘,并设置格式化类型、大小

- 常用参数:
	fstype:	    
    ##设置文件类型,(Aliases: type)(Choices: btrfs, ext2, ext3, ext4, ext4dev,f2fs, lvm, ocfs2, reiserfs, xfs, vfat, swap)
    dev               ##选择修改的硬盘文件

5.5.22 mount模块

- 作用
 挂载

- 常用参数:
  backup:	  ##备份挂载目录的原有文件
  fstab :     ##永久挂载到的位置
  fstype:     ##挂载的硬盘类型
  path:       ##挂载点
  src:        ##挂载的文件
  state:      ##present挂载,absent解除挂载
  opts:       ##挂载参数( 如 ro,noauto)

5.23 parted模块

- 作用
 分盘

- 常用参数:
    device:      ##分盘的设备
    number:      ##第几块分区
    part_start:  ##分区起始点
    part_end:    ##分区结束点,即分区大小
    state:       ##present建立分区,absent删除分区
    unit:        ##默认的分区大小单位,Choices: s, B, KB, KiB, MB, MiB, GB, GiB, TB, TiB, %, cyl,chs, compact
    label        ##设置盘符的标签,Choices: aix, amiga, bsd, dvh, gpt, loop, mac, msdos, pc98, sun
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值