• ansible学习


    Ansible学习

    1 ansible 原理与环境搭建

    1.1 Ansible对于企业运维的重大意义

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

    1.2 Ansible的安装

    -	epel源
    -	dnf install ansible -y
    -	ansible --viersion
    
    -	ansible的基本信息:
    -		/etc/ansible/ansible.conf		##全局配置文件,默认很少修改
    -		/etc/ansible/hosts			##全局主机清单清单文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.3. 前期环境的配置

    - 一台ansible服务器(172.25.254.110)
    - 两台受控主机(网段分别为172.25.254.20、172.25.254.30)
    
    • 1
    • 2
    1. ansible主机的设定

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

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    如果电脑卡就关掉图形界面,使用无图形界面!!
    配置完毕!!!

    1. 配置受控主机172.25.254.20、172.25.254.30

    主机名分别为node1.westos.org、node2.westos.org

    在这里插入图片描述

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

    1.4 清单介绍

    - /etc/ansible/hosts              ##控制默认清单列表位置
    - 	清单写主机名或者ip都可以,每行一个
    -	node1.westos.com
    -	node2.westos.com
    -	172.25.254.20
    - 清单查看:
    -	ansible westos --list-hosts     ##显示westos列表中的ip
    - 	ansible westos1 --list-hosts    ##显示westos1列表中的ip
    - 	ansible ungrouped --list-hosts  ##显示没有分组的列表ip
    -  	ansible all  --list-hosts       ##显示所有分组列表内容
    - 清单形式:
    - 	#单层清单#
    -		[list1]
    -		node1.westos.com
    -		node2.westos.com
    -		[list2]
    -		node2.westos.com
    -		[list3]
    -		172.25.254.240
    
    -	#嵌套清单#
    -		[westos:children]     ##格式必须对
    -		list1
    -		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指定列表文件
    - 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    指定文件的测试
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    正则表达式测试

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

    1.5 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=				##日志文件路径
    
    -	#[privilege_escalation]		##身份信息设定
    -		become=					##连接后是否自动切换用户
    -		become_method=			##设定切换用户的方式,通常用sudo
    -		become_user=			##在受管主机中切换到的用户,通常为root
    -		become_ask_pass			##是否需要为become_method提示输入密码,默认为false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述
    inventory= ##指定清单路径
    在这里插入图片描述
    在这里插入图片描述

    local_tmp= ##本机临时命令执行目录
    remote_tmp= ##远程主机临时py命令文件存放目录
    remote_user= ##在受管主机上登陆的用户名称,未指定使用当前用户

    临时执行目录
    在这里插入图片描述
    在这里插入图片描述

    指定用户
    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
    ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。在这里插入图片描述
    在这里插入图片描述
    [privilege_escalation] ##身份信息设定

    	-	远程需要在系统及文件夹或者需要修改没有权限的文件,就需要设定身份信息,可以直接以root用户身份执行。
    
    • 1

    在这里插入图片描述

    在这里插入图片描述(此处的10.20,10.30和254.20,254.30一样)
    在这里插入图片描述

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

    2 ansible常见模块合集

    2.1 ansible实现管理的方式

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

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

    - ansible-doc	##显示模块帮助的指令
    
    - #格式
    - ansible-doc [参数] [模块...]
    
    - #常用参数
    - 	-l		##列出可用模块
    - 	-s		##显示指定模块的playbook片段
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    2.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参数)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    在这里插入图片描述

    2.4.ansible的颜色含义

    - 绿色		##执行成功但没有对远程主机做任何改变
    - 黄色		##执行成功并对远程主机做改变
    - 红色		##执行失败
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2.5 常用模块

    2.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模块中不支持,如*等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

    2.5.2 shell 模块

    - 功能:
    - 和command功能类似
    - 常用参数
    -	chdir           ##执行命令前先进入到指定目录
    -	cmd             ##运行命令指定
    -	creates         ##如果文件存在将不运行
    -	removes         ##如果文件存在在将运行
    -	free_form 	##在远程主机中执行的命令,此参数不需要加
    -	executable	##指定执行环境,默认为sh(比command多的参数)
    
    -实例
    -	ansible all -m shell -a "executable=sh ps ax | grep $$ " -k
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    2.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    2.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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

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

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

    2.5.5 fetch模块

    - 功能
    - 	从受控主机把文件复制到ansible主机,但不支持目录
    
    - 常用参数
    -	src			##受控主机的源文件
    -	dest		##本机目录
    -	flat		##可以直接拷贝文件,忽略文件的上层目录(基础名称功能)
    - 实例
    	ansible all -m fetch -a "src=/etc/hostname dest=/mnt" -k
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    在这里插入图片描述

    2.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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

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

    2.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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

    2.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    2.5.9 hostname

    #作用
    管理主机名称
    
    #常用参数
    name		##指定主机名称
    
    #实例
    ansbile 172.25.254.100 -m hostname -a 'name=lee.westos.com'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

    2.5.10 cron

    - 作用
    -	计划任务
    
    - 常用参数
    	minute		##分钟
    	hour		##小时
    	day			##天
    	month		##月
    	weekday		##周
    	name		##任务名称
    	job			##任务脚本或命令
    	disabled	##yes 禁用计划任务
    				##no  启动计划任务
    	state		##absent 删除计划任务
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    - 实例
    	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
    
    • 1
    • 2
    • 3
    • 4

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

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

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

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

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

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

    2.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    2.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    - 实例
    	ansible all -m dnf -a "name=httpd state=latest"
    	ansible all -m dnf -a 'name="httpd,mariadb-server" 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' ##安装组件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

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

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

    在这里插入图片描述

    下载组文件

    在这里插入图片描述
    更新所有文件

    在这里插入图片描述

    2.5.13 service

    - 作用
    - 	管理系统服务状态
    
    - 常用参数
    	name		##指定服务名称
    	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" 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

    2.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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

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

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

    指定shell
    在这里插入图片描述
    在这里插入图片描述
    用户说明comment

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

    password

    明文密码
    在这里插入图片描述
    在这里插入图片描述

    加密密码

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

    在这里插入图片描述

    2.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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    2.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"'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

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

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

    在这里插入图片描述
    在这里插入图片描述
    regexp=“(h.{4}).*(w.{5})” line=“\1”

    在这里插入图片描述在这里插入图片描述
    insertafter与insertbefore

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

    在这里插入图片描述

    在这里插入图片描述

    2.5.17 replace

    - 作用
    -	replace 模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换
    
    - 常用参数
    -	path		##指定要操作的文件
    -	regexp		##指定一个正则表达式
    				#文件中与正则匹配的字符串将会被替换。
    -	replace		##指定最终要替换成的字符串。
    -	backup		##是否在修改文件之前对文件进行备份,最好设置为yes。
    	
    - 实例
    	ansible all -m replace -a 'path=/mnt/westos regexp="WESTOS" replace="westos_lee" backup=yes'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    2.5.18 setup

    - 作用
    -	setup模块用于收集远程主机的一些基本信息
    
    - 常用参数
    -	filter		##用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。
    
    - 实例
    	ansible all -m setup -k
    	ansible all -m setup   -a "filter='ansible_all_ipv4_addresses'" -k
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    2.5.19 debug

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

    在这里插入图片描述

    2.5.20 seboolean

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

    在这里插入图片描述

    在这里插入图片描述

    2.5.21 filesystem

    - 作用
    - 格式化硬盘,并设置格式化类型、大小
    
    - 常用参数:
    -	fstype:	    ##设置文件类型,(Aliases: type)(Choices: btrfs, ext2, ext3, ext4, ext4dev,f2fs, lvm, ocfs2, reiserfs, xfs, vfat, swap)
    - dev               ##选择修改的硬盘文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    2.5.22 mount

    - 作用
    	挂载
    
    - 常用参数:
    - backup:	  ##备份挂载目录的原有文件
    - fstab :     ##永久挂载到的位置
    - fstype:     ##挂载的硬盘类型
    - path:       ##挂载点
    - src:        ##挂载的文件
    - state:      ##present挂载,absent解除挂载
    - opts:       ##挂载参数( 如 ro,noauto)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    2.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    3 playbook

    1.1 Playbook的功能

    - playbook 是由一个或多个play组成的列表
    - Playboot 文件使用YAML来写的
    
    • 1
    • 2

    1.2 YAML

    - 简介
    - 	是一种表达资料序列的格式,类似XML
    -	Yet Another Markup Language
    -	2001年首次发表
    -	官网www.yaml.org
    
    - 特点
      -	可读性好
      -	和脚本语言交互性好
      -	易于实现
      -	适用程序执行流梳理方式
      -	可扩展性强
    
    - 语法简介
      -	在文件中用[---]开始
      -	在文件中用[...]结尾
      -	次行一般书写文件内容
      -	缩进严格
      -	大小写敏感
      -	key/value可以多行书写也可一行书写,一行书写用,隔开
      -	value可以是个字符串,也可是list
      -	一个play需要包括name和tasks
      -	name 是描述
      -	tasks 是动作
      -	一个name只能包含一个task
      -	扩展名称yml或者yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    1.3 YAML 列表

    - [Linux,C++,Java,Python]  ##一个中括号多个元素,并列关系
    -	Linux
    - 	C++
    - 	Java
    - 	Python
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.4 YAML的字典

    - 字典作用存放键值
      -	name:westos
      -	age:12
      -	jobs:linux
      -	{name: "westos", age: "12", jobs: "linux"}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.5 playbook执行命令

    - ansible-playbook xxx.yml ...
      -	--check|-C	##检测
      -	--syntax-check	##check language检测语法
      -	--list-hosts	##列出hosts
      -	--list-tags	##列出tag,即动作部分
      -	--list-tasks	##列出task
      -	--limit		##指定执行主机
      -	-v -vv		##显示执行过程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.6 Playbook的核心组件

    - name			#可选,建议使用多用于说明
    - hosts			#受控主机列表
    - tasks			#任务
    				#用于选择执行部分代码
    
    • 1
    • 2
    • 3
    • 4

    1.7 基本示例

    1.##配置vsftpd,lftp
    --- 
    - name: config vsftpd,lftp
      hosts: list1
      tasks:
      	- name: install vsftpd
      	  dnf:
      	    name: vsftpd,lftp
      	    state: latest
      	- name: config vsftpd,lftp
      	  lineinfile:
      	  	path: /etv/vsftpd/vsftpd.conf
      	  	regexp: '^anonymous_enable'
      	  	line: 'anonymous_enable=YES'
        - name: start vsftp
          service:
          	name: vsftpd
          	state: started
          	enabled: yes
    ...
    
    2.这里的主机列表如果是自定义的,可以通过下面命令实现
    ansible-playbook -i my_hosts shell.yaml # -i指定对应的host列表
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    2.## apache配置http.yml
    	---
    	- name: config httpd
    	  hosts: list1
    	  tasks:
    	    - name: install httpd
    	      dnf :
    	              name: httpd
    	              state: latest
    	    - name: start httpd
    	      service:
    	              name: httpd
    	              state: started
    	              enabled: yes
    	    - name: set firewalld
    	      firewalld:
    	              service: http
    	              permanent: yes
    	              state: enabled
    	              immediate: yes
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    1. vsftpd、lftp配置

      俩种写法
      在这里插入图片描述

      在这里插入图片描述

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

    2. appache配置
      客户机仓库提前装好。

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

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

    1.8 vim 设定技巧

    - autocmd FileType yaml setlocal ai ts=2 sw=2 et  ##针对yml文件生效
    
    - setlocal	##设定当前文件
    - ai		##自动退格对齐     auto indent
    - ts		##tab建长度为2空格 tabstop=2
    - sw		##缩进长度为2	   shiftwidth=2
    - et		##把tab键变成空格  expandtab
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    4 ansible变量使用

    4.1 变量命名

    - 只能包含数字,下划线,字母
    - 只能用下划线或字母开头
    
    • 1
    • 2

    4.2 变量级别

    - 全局:	从命令行或配置文件中设定的
    - paly:	在play和相关结构中设定的
    - 主机:	由清单,事实收集或注册的任务
    - 优先级:主机>play>全局 
    
    - 变量优先级设定:
    	-	狭窄范围优先于广域范围
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.3 变量设定和使用方式

    4.3.1 在playbook中直接定义变量并使用变量

    - 示例
    	---
    	- name: create user
    	  hosts: list1
    	  vars:
    	    user: westos1
    	  tasks:
    	    - name: create user
    	      user:                ##user模块
    	        name: "{{user}}"
    	        state: present
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    在这里插入图片描述

    4.3.2 在文件中定义变量

    - 示例
    - vim  /root/ansible/user_list.yml
    	---
    	user: westos1
    	...
    - vim westos.yml
    	---
    	- name: Create User
    	  hosts: all
    	  vars_files:
    	    - /root/ansible/user_list.yml
    	  tasks:
    	    - name: create user
    	      user:
    	        name: "{{user}}"
    	        state: present
    	...
    	或者
    	---
    	- name: Create User
    	  hosts: all
    	  vars_files: /root/ansible/user_list.yml
    	  tasks:
    	    - name: create user
    	      user:
    	        name: "{{user}}"
    	        state: present
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    在这里插入图片描述

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

    在这里插入图片描述

    4.4 设定主机变量和清单变量

    - 在定义主机变量和清单变量时使用
    
    vim inventory
    	[westos_list1]
    	172.25.0.254
    	172.25.0.1
    	
    	[westos_list2]
    	172.25.0.2
    	
    	[westos_list3]
    	172.25.0.3
    	
    	[westos_group:children]
    	westos_list2
    	westos_list3
    	
    	[westos_list1:vars]
    	USER=westos1
    	
    	[westos_group:vars]
    	USER=westos2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

    4.5 目录设定变量

    - group_vars	##清单变量,目录中的文件名称与主机清单名称一致
    - host_vars	##主机变量,目录中的文件名称与主机名称一致(取决于清单里是主机名还是ip)
    
    • 1
    • 2

    group_vars

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

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

    4.6 用命令覆盖变量(本身没变量也会被覆盖)

    - ansible-playbook user.yml -e "user=hello"
    
    • 1

    在这里插入图片描述

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

    4.7 使用数组设定变量

    - vim user_var.yml
    	---
    	USER:
    	  lee:
    	    age: 18
    	    obj: linux
    	  
    	  westos:
    	    age: 20
    	    obj: java
    	...
    - vim user.yml
    	---
    	- name: Create User
    	  hosts: all
    	  vars_files:
    	    ./user_var.yml
    	  tasks:
    	  	- name: create user
    	      shell:
    	        echo  "{{USER['lee']['age']}}"   ##新的书写方式,官方推荐
    	        echo  "{{USER.westos.obj}}"   	 ##旧的书写方式
    	...
    - 练习	
    	create web vhost
    	www.westos.com  80    ------ > /var/www/html
    	linux.westos.com 80 ------> /var/www/virtual/westos.com/linux
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

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

    在这里插入图片描述

    4.8 注册变量

    - register 把模块输出注册到指定字符串中
    
    	---
    	- name: test register
    	  hosts: list1
    	  tasks:
    	    - name: hostname command
    	      shell:
    	        hostname
    	      register: westos
    	
    	    - name: show messages
    	      shell:
    	        echo "{{info['stdout']}}"
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    在这里插入图片描述

    4.9 事实变量

    - 事实变量是ansible在受控主机中自动检测出的变量
    - 事实变量中含有与主机相关的信息
    
    - 当需要使用主机相关信息时不需要采集赋值,直接调用即可
    - 因为变量信息为系统信息,所以不能随意设定仅为采集信息,故被成为事实变量
    - gather_facts: yes|no    ##等于yes收集事实信息;no不收集事实信息,执行更快。
    - 示例
    ---
    - name: test register
      hosts: list1
      gather_facts: yes
      tasks:
        - name: show messages
          debug:
            msg: "{{ansible_facts['fqdn']}}"   ##debug模块调用信息
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    有gather_facts的情况
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    练习,登陆主机的时候显示主机的主机名和ip

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

    4.10 魔法变量

    - hostvars:		    	##ansible软件的内部信息
    - eg:
    - 	ansible localhost -m debug -a "var=hostvars"
    - group_names:			##当前受管主机所在组
    - eg:
    - 	ansible list1 -m debug -a "var=group_names"
    - groups:				##列出清单中所有的组和主机
    - eg:
    - 	ansible all -m debug -a "var=groups"
    - 	ansible all -m debug -a "var=groups['all']"	
    - 	ansible localhost -m debug -a "var=groups['all']"
    - inventory_hostname:	##包含清单中配置的当前授管主机的名称	
    - eg:
    - 	ansible list1 -m debug -a "var=inventory_hostname"
    - 	ansible localhost -m debug -a "var=inventory_hostname"
    - 练习
    - 	结合魔法变量和j2模板,显示主机名和ip
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

    在这里插入图片描述
    练习

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

    4.11 JINJA2模板

    - 介绍
    	Jinja2是Python下一个被广泛应用的模版引擎
    	他的设计思想来源于Django的模板引擎,
    	并扩展了其语法和一系列强大的功能。
    	其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能
    
    - j2模板书写规则#
    	
    	{# /etc/hosts line #}      ##注释文件说明
    	127.0.0.1	localhost      ##文件内容
    	{{ ansible_facts['all_ipv4_addresses'] }}	{{ansible_facts['fqdn']}}##使用事实变量作为内容,用于测试
    	
    	#for循环#
    		vim users.yml
    		users:
    		  - westos
    		  - linux
    		  - ansible
    		
    		vim test.j2
    		{% for NAME in users %}
    		{{ NAME }}
    		{%endfor%}
    	
    	#if 判定#
    		{% for NAME in users if not NAME == "ansible" %}
    		User number {{loop.index}} - {{ NAME }}
    		{%endfor%}
    		
    		loop.index	##循环迭代记数从1开始
    		loop.index0	##循环迭代计数从0开始
    		
    		{% for user in students %}
    		name:	{{user['name']}}
    		{%if user['age'] is defined%}
    		age:	{{user['age']}}
    		{%endif%}
    		{% if user['age'] is not defined %}
    		age:	null
    		{% endif%}
    		obj:	{{user['obj']}}
    		{%endfor%}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    4.12 j2模板在playbook中的应用

    #playbook1,别的文件中定义变量 
    	---
    	- name: test register
    	  hosts: xxxx
    	  tasks:
    	    - name: create hosts
    	      template:
    	        src: ./xxxx.j2
    	        dest: /mnt/hosts
    	...
    
    #playbook2,直接定义变量,j2模版中负责定义变量,paybook中负责传参
    	---
    	- name: test.j2
    	  hosts: 172.25.0.254
    	  vars:
    	    students:
    	      - name: student1
    	        obj: linux
    	
    	      - name: student2
    	        age: 18
    	        obj: linux
    	  tasks:
    	    - template:
    	        src: ./test.j2
    	        dest: /mnt/list
    	 ...
    
    
    - 测试,通过模板配置Apache
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    apache.yml
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    apache.j2

    在这里插入图片描述测试结果

    在这里插入图片描述

    4.13 Ansible的加密控制

    - 创建加密文件
    1. ansible-vault create westos.yml   
    
    2.
    	vim westosfile                          ##编辑加密文件
    		lee
    
    	ansible-vault create westos.yml --vault-password-file=westosfile
    
    - 加密现有文件
    	ansible-vault encrypt westos.yml
    
    - 查看加密文件
    	ansible-vault view westos.yml
    	ansible-vault view westos.yml --vault-password-file=westosfile
    
    - 编辑加密文件
    	ansible-vault edit westos
    	ansible-vault edit --vault-password-file=westos-valut westos
    
    - 解密文件
    	ansible-vault decrypt westos 			##文件永久解密
    	ansible-vault decrypt westos --output=linux	##文件解密保存为linux
    
    - 更改密码
    	ansible-vault rekey westos.yml
    	ansible-vault rekey westos.yml --new-vault-password-file=westosfile
    
    - playbook
    	ansible-playbook westos.yml  --ask-vault-pass
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

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

    密码文件加密

    在这里插入图片描述
    现有文件加密解密

    在这里插入图片描述
    查看文件
    在这里插入图片描述
    修改密码

    在这里插入图片描述

    编辑加密文件

    在这里插入图片描述

    playbook

    在这里插入图片描述

    5 ansible 控制流语句

    5.1 循环

    5.1.1 简单循环

    - loop:		##赋值列表
      - value1
      - value2
      - ...
      {{item}}	##迭代变量名称
    
    - 实例
    	---
    	- name: create file
    	  hosts: 172.25.0.254
    	  tasks:
    	    - name: file module
    	      file:
    	        name: /mnt/{{item}}
    	        state: present
    	
    	      loop:
    	        - westos_file1
    	        - westos_file2
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    device: /dev/vdb
    8 number: 1
    在这里插入图片描述在这里插入图片描述

    5.1.2 循环散列或字典列表

    - 示例
    	---
    	- name: create file
    	  hosts: 172.25.0.254
    	  tasks:
    	    - name: file module
    	      service:
    	        name: "{{ item.name}}"
    	        state: "{{ item.state }}"
    	      loop:
    	        - name: httpd
    	          state: started
    	        - name: vsftpd
    	          state: stopped
    	...
    
    - 练习2,前面学的建立用户
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    练习1,循环建立文件和文件夹

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述练习2

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

    5.2 条件

    - when:
      - 条件1
      - 条件2
    
    - 条件判断#
    	=			value == "字符串",value == 数字
    	<			value <  数字
    	>			value >  数字
    	<=			value <= 数字
    	>=			value >= 数字 
    	!=			value != 数字
    	is defined value	value is defined	变量存在
    	is not defined		value is not defined	变量不存在
    	bool变量 为true		value			value的值为true
    	bool变量 false		not value		value的值为false
    					value in value2		value的值在value2列表中
    - 
    - 多条条件组合
    	when:
    	  条件1 and 条件2
    	  或者
    	  - 条件1
    	  - 条件2
    
    	when:
    	  条件1 or 条件2
    	
    	when: >
    	  条件1
    	  or
    	  条件2
    - 练习:
    - 	建立playbook  !/ansible/lvm.yml要求如下:
    - 	如果westos不存在输出:
    - 		vg westos is not exist
    - 	如果westos存在,建立800M大小的lvm
    - (lvm模块lvol)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    在这里插入图片描述
    list3里面是172.25.10.20,172.25.0.30

    另一个练习题

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

    5.3 触发器

    - notify:		触发器当遇到notify是触发handlers
    - handlers:	触发器触发后执行的动作
    
    - 实例(可以不看)
    ---
    - name: create virtualhost for web server
      hosts: 172.25.0.254
      vars_files:
        ./vhost_list.yml
      tasks:
        - name: create document
          file:
            path: "{{web2.document}}"
            state: directory
        - name: create vhost.conf
          copy:
            dest: /etc/httpd/conf.d/vhost.conf
            content:
              "{web1.port}}>\n\tServerName {{web1.name}}\n\tDocumentRoot {{web1.document}}\n\tCustomLog logs/{{web1.name}}.log combined\n\n\n{web2.port}}>\n\tServerName {{web2.name}}\n\tDocumentRoot {{web2.document}}\n\tCustomLog logs/{{web2.name}}.log combined\n"
          notify:
            restart apache
    
      handlers:
        - name: restart apache
          service:
            name: httpd
            state: restarted
    ...
    
    - 示例(看这个)
    - ---
    - name: apache
      hosts: list2
    	  tasks:
    		 - name: install httpd
               dnf:
    		        name: httpd
    	            state: latest
     
    	     - name: config httpd.conf
    			    lineinfile:
            			path: /etc/httpd/conf/httpd.conf
    	            	regexp: "^Listen"
    			    	line: "Listen {{port}}"
    	       	notify:
    			       restart apache
    	 handlers:
    	   - name: restart apache
    		    service:
    	        name: httpd
    	        state: restarted
    ...
    
    - 练习: 配置vsftp上传下载功能
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    示例(需要看的)(软件已经有了卸载掉)

    在这里插入图片描述

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

    练习:vsftpd

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    模板文件内容
    在这里插入图片描述
    在这里插入图片描述
    脚本执行结果

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

    在这里插入图片描述

    5.4 处理失败任务

    5.4.1 ignore_errors

    - 作用:
    	当play遇到任务失败是会终止
    	ignore_errors: yes	将会忽略任务失败使下面的任务继续运行
    	
    - 实例
    ---
    - name: test
      dnf:
        name: westos
        state: latest
      ignore_errors: yes
      
    - name: create file
      file:
        path: /mnt/westos
        state: touch
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    练习1
    在这里插入图片描述

    在这里插入图片描述

    5.4.2 force_handlers

    - 作用:
    -  当任务失败后play被终止也会调用触发器进程(做实验触发器之前文件不要出错,看后面是否执行)
    -  示例(不需要看)
    ---
    - name: apache change port
      hosts: 172.25.0.254雕
      force_handlers: yes
      vars:
        http_port: 80
      tasks:
        - name: configure apache conf file
          lineinfile:
            path: /etc/httpd/conf/httpd.conf
            regexp: "^Listen"
            line: "Listen {{ http_port }}"
          notify: restart apache
    
        - name: install error
          dnf:
            name: westos
            state: latest
    
      handlers:
        - name: restart apache
          service:
            name: httpd
            state: restarted
            enabled: yes
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    示例看下图

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

    5.4.3 changed_when

    #作用:
    #控制任务在何时报告它已进行更改
    
    ---
    - name: apache change port
      hosts: 172.25.0.254
      force_handlers: yes
      vars:
        http_port: 8080
      tasks:
        - name: configure apache conf file
          lineinfile:
            path: /etc/httpd/conf/httpd.conf
            regexp: "^Listen"
            line: "Listen {{ http_port }}"
          changed_when: true
          notify: restart apache
      handlers:
        - name: restart apache
          service:
            name: httpd
            state: restarted
            enabled: yes
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    5.4.4 failed_when

    #当符合条件时强制任务失败
    
    ---
    - name: test
      hosts: 172.25.0.254
      tasks:
        - name: shell
          shell: echo hello
          register: westos
          failed_when: "'hello' in westos.stdout"
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    5.4.5 block(注意格式)

    block: 		##定义要运行的任务
    rescue:		##定义当block句子中出现失败任务后运行的任务
    always:	##定义最终独立运行的任务
    
    - 测试练习
    	建立playbook  ~/westos.yml要求如下:
    	建立大小为1500M名为/dev/vdb1的设备
    	如果/dev/vdb不存在请输入:
    	     /dev/vdb  is not exist
    	如果/dev/vdb大小不足2G请输出:
    	     /dev/vdb is less then 2G
    	并建立800M大小的/dev/vdb1
    	此设备挂载到/westos上
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    普通练习1:

    在这里插入图片描述

    在这里插入图片描述
    普通练习2:
    在这里插入图片描述

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

        dev: /dev/vdb1
    - mount:
    
    • 1
    • 2

    测试练习
    3000M执行效果

    在这里插入图片描述

    在这里插入图片描述
    执行结果

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    自动挂载成功!!!不需要重启!!!

    2000M执行效果
    在这里插入图片描述
    执行结果
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

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

    6. ansible roles

    6.1 roles简介

    * Ansible roles 是为了层次化,结构化的组织Playbook
    * roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们
    * roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高
    * 以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个功能切割成片段来执行。
    
    • 1
    • 2
    • 3
    • 4

    6.2 roles目录结构

    files		##存放copy或script等模块调用的函数
    tasks		##定义各种task,要有main.yml,其他文件include包含调用
    handlers	##定义各种handlers,要有main.yml,其他文件include包含调用
    vars		##定义variables,要有main.yml,其他文件include包含调用
    templates	##存储由template模块调用的模板文本
    meta		##定义当前角色的特殊设定及其依赖关系,要有main.yml的文件        
    defaults	##要有main.yml的文件,用于设定默认变量
    tests		##用于测试角色
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6.3 role存放的路径在配置文件ansible.cfg中定义

    roles_path = path/roles  (默认目录:/etc/ansible/roles)
    
    • 1

    6.4 创建目录结构

    $ ansible-galaxy init apache(创建apache目录结构,即角色)
    $ ansible-galaxy role list  ##查看角色列表
    
    • 1
    • 2

    6.5 playbook中使用roles

    - playbook中使用roles:
    	---
    	- hosts: server2
    	  roles:
    	    - role: role1
    	    - role: role2
    	      var1: value1		##此处变量会覆盖roles中的定义变量
    	...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6.6 控制任务执行顺序

    ---
    - hosts: server2
      roles:
        - role: role1	##角色任务
      pre_tasks:		##角色执行前执行的play
        - tasks1
      tasks:		##普通任务
        - tasks2
      post_tasks:		##在角色和普通任务执行完毕后执行的play
        - tasks3
      handlers:
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    6.7 ansible—galaxy命令工具

    * Ansible Galaxy 是一个免费共享和下载 Ansible 角色的网站,可以帮助我们更好的定义和学习roles。
    * ansible-galaxy命令默认与https://galaxy.ansible.com网站API通信,可以查找、下载各种社区开发的 Ansible 角色
    * ansible-galaxy在 Ansible 1.4.2 就已经被包含了
    * 在galaxy.ansible.com网站查询roles
    
    • 1
    • 2
    • 3
    • 4

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

    6.8 安装选择的角色

    #install https://galaxy.ansible.com roles
    $ansible-galaxy install geerlingguy.nginx
    
    
    #install local roles
    $ vim install_apache_role.yml
    ---
    - src: file:///mnt/apache.tar.gz
      name: apache
    
    $ ansible-galaxy  install -r install_apache_role.yml   ##主要用的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6.9 综合练习

    1. 搭建vsftp虚拟用户

    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述
    在这里插入图片描述
    配置vsftpd.conf
    在这里插入图片描述
    在这里插入图片描述

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

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

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

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

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    受控主机测试执行效果

    在这里插入图片描述
    角色压缩后供多人使用,也可以上传到ftp服务器

    在这里插入图片描述

    1. 搭建ddns服务器

    前期工作
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    配置dns模板
    named.conf
    在这里插入图片描述

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

    named.rfc1912.conf
    在这里插入图片描述

    在这里插入图片描述
    /mnt/var/named/named.localhost

    在这里插入图片描述

    在这里插入图片描述
    /mnt/etc/named.root.key

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

    在这里插入图片描述

    配置dhcpd.conf模板

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    书写各个模块的yml文件
    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

    执行结果

    在这里插入图片描述

    在这里插入图片描述
    打包角色文件

    在这里插入图片描述

  • 相关阅读:
    【超图+CESIUM】【基础API使用示例】49、超图|CESIUM -自定义按钮操作视角上下左右东西南北移动|修改覆盖罗盘的上下左右东西南北的视角移动
    七个开发者不可不知的VS Code小技巧
    【scikit-learn基础】--『监督学习』之 支持向量机回归
    Unity 获取任意按键输入
    【Unity引擎核心-Object,序列化,资产管理,内存管理】
    Scala / Java - 采用 MD5 加盐 实现 id 均匀分组
    Libcurl 学习与使用
    检测防火墙是否开启、判断程序是否加入防火墙白名单(附源码)
    为什么yolov8val的dfl_loss一直上升呢
    在 debian 虚拟机里如何设置 iso 文件为本地安装源
  • 原文地址:https://blog.csdn.net/qwerty1372431588/article/details/133697663