ansible学习

Ansible学习

  • [1 ansible 原理与环境搭建](#1 ansible 原理与环境搭建)
    • [1.1 Ansible对于企业运维的重大意义](#1.1 Ansible对于企业运维的重大意义)
    • [1.2 Ansible的安装](#1.2 Ansible的安装)
    • [1.3. 前期环境的配置](#1.3. 前期环境的配置)
    • [1.4 清单介绍](#1.4 清单介绍)
    • [1.5 Ansible配置文件参数详解](#1.5 Ansible配置文件参数详解)
  • [2 ansible常见模块合集](#2 ansible常见模块合集)
    • [2.1 ansible实现管理的方式](#2.1 ansible实现管理的方式)
    • [2.2 Ad-Hoc执行方式中如何获得帮助](#2.2 Ad-Hoc执行方式中如何获得帮助)
    • [2.3. ansible命令运行方式及常用参数](#2.3. ansible命令运行方式及常用参数)
    • 2.4.ansible的颜色含义
    • [2.5 常用模块](#2.5 常用模块)
      • [2.5.1 command](#2.5.1 command)
      • [2.5.2 shell 模块](#2.5.2 shell 模块)
      • [2.5.3 script模块](#2.5.3 script模块)
      • [2.5.4 copy模块](#2.5.4 copy模块)
      • [2.5.5 fetch模块](#2.5.5 fetch模块)
      • [2.5.6 file](#2.5.6 file)
      • [2.5.7 unarchive模块](#2.5.7 unarchive模块)
      • [2.5.8 archive](#2.5.8 archive)
      • [2.5.9 hostname](#2.5.9 hostname)
      • [2.5.10 cron](#2.5.10 cron)
      • [2.5.11 yum_repository](#2.5.11 yum_repository)
      • [2.5.12 dnf](#2.5.12 dnf)
      • [2.5.13 service](#2.5.13 service)
      • [2.5.14 user](#2.5.14 user)
      • [2.5.15 group](#2.5.15 group)
      • [2.5.16 lineinfile](#2.5.16 lineinfile)
      • [2.5.17 replace](#2.5.17 replace)
      • [2.5.18 setup](#2.5.18 setup)
      • [2.5.19 debug](#2.5.19 debug)
      • [2.5.20 seboolean](#2.5.20 seboolean)
      • [2.5.21 filesystem](#2.5.21 filesystem)
      • [2.5.22 mount](#2.5.22 mount)
      • [2.5.23 parted](#2.5.23 parted)
  • [3 playbook](#3 playbook)
    • [1.1 Playbook的功能](#1.1 Playbook的功能)
    • [1.2 YAML](#1.2 YAML)
    • [1.3 YAML 列表](#1.3 YAML 列表)
    • [1.4 YAML的字典](#1.4 YAML的字典)
    • [1.5 playbook执行命令](#1.5 playbook执行命令)
    • [1.6 Playbook的核心组件](#1.6 Playbook的核心组件)
    • [1.7 基本示例](#1.7 基本示例)
    • [1.8 vim 设定技巧](#1.8 vim 设定技巧)
  • [4 ansible变量使用](#4 ansible变量使用)
    • [4.1 变量命名](#4.1 变量命名)
    • [4.2 变量级别](#4.2 变量级别)
    • [4.3 变量设定和使用方式](#4.3 变量设定和使用方式)
      • [4.3.1 在playbook中直接定义变量并使用变量](#4.3.1 在playbook中直接定义变量并使用变量)
      • [4.3.2 在文件中定义变量](#4.3.2 在文件中定义变量)
    • [4.4 设定主机变量和清单变量](#4.4 设定主机变量和清单变量)
    • [4.5 目录设定变量](#4.5 目录设定变量)
    • [4.6 用命令覆盖变量(本身没变量也会被覆盖)](#4.6 用命令覆盖变量(本身没变量也会被覆盖))
    • [4.7 使用数组设定变量](#4.7 使用数组设定变量)
    • [4.8 注册变量](#4.8 注册变量)
    • [4.9 事实变量](#4.9 事实变量)
    • [4.10 魔法变量](#4.10 魔法变量)
    • [4.11 JINJA2模板](#4.11 JINJA2模板)
    • [4.12 j2模板在playbook中的应用](#4.12 j2模板在playbook中的应用)
    • [4.13 Ansible的加密控制](#4.13 Ansible的加密控制)
  • [5 ansible 控制流语句](#5 ansible 控制流语句)
    • [5.1 循环](#5.1 循环)
      • [5.1.1 简单循环](#5.1.1 简单循环)
      • [5.1.2 循环散列或字典列表](#5.1.2 循环散列或字典列表)
    • [5.2 条件](#5.2 条件)
    • [5.3 触发器](#5.3 触发器)
    • [5.4 处理失败任务](#5.4 处理失败任务)
      • [5.4.1 ignore_errors](#5.4.1 ignore_errors)
      • [5.4.2 force_handlers](#5.4.2 force_handlers)
      • [5.4.3 changed_when](#5.4.3 changed_when)
      • [5.4.4 failed_when](#5.4.4 failed_when)
      • [5.4.5 block(注意格式)](#5.4.5 block(注意格式))
  • [6. ansible roles](#6. ansible roles)
    • [6.1 roles简介](#6.1 roles简介)
    • [6.2 roles目录结构](#6.2 roles目录结构)
    • [6.3 role存放的路径在配置文件ansible.cfg中定义](#6.3 role存放的路径在配置文件ansible.cfg中定义)
    • [6.4 创建目录结构](#6.4 创建目录结构)
    • [6.5 playbook中使用roles](#6.5 playbook中使用roles)
    • [6.6 控制任务执行顺序](#6.6 控制任务执行顺序)
    • [6.7 ansible---galaxy命令工具](#6.7 ansible—galaxy命令工具)
    • [6.8 安装选择的角色](#6.8 安装选择的角色)
    • [6.9 综合练习](#6.9 综合练习)

1 ansible 原理与环境搭建

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

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

1.2 Ansible的安装

复制代码
-	epel源
-	dnf install ansible -y
-	ansible --viersion

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

1.3. 前期环境的配置

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


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

配置完毕!!!

  1. 配置受控主机172.25.254.20、172.25.254.30

主机名分别为node1.westos.orgnode2.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.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

inventory= ##指定清单路径

local_tmp= ##本机临时命令执行目录

remote_tmp= ##远程主机临时py命令文件存放目录

remote_user= ##在受管主机上登陆的用户名称,未指定使用当前用户

临时执行目录

指定用户





ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

privilege_escalation\] ##身份信息设定 - 远程需要在系统及文件夹或者需要修改没有权限的文件,就需要设定身份信息,可以直接以root用户身份执行。 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f7cc132c6429ef987941d1cda7c11f3f.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1564e2194c2e561fadf05ebcea4254ff.webp)(此处的10.20,10.30和254.20,254.30一样) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/24603dec6ff78ca6d0f4a8fd40ef7b3d.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d70d53760706a88e5c044b38837996f0.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/21a4a64acb9575e04a78aa205c97eafb.webp) ## 2 ansible常见模块合集 ### 2.1 ansible实现管理的方式 - Ad-Hoc ##利用ansible命令直接完成管理,主要用于临时命令使用场景 - playbook ##ansible脚本,主要用于大型项目场景,需要前期的规划 ### 2.2 Ad-Hoc执行方式中如何获得帮助 - ansible-doc ##显示模块帮助的指令 - #格式 - ansible-doc [参数] [模块...] - #常用参数 - -l ##列出可用模块 - -s ##显示指定模块的playbook片段 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e91c9b338c33f5ac9acec0d87553020a.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/cef73f0a3c5243f5acffa9f536b19e31.webp) ### 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参数) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f2c4b6d64e446fe7e1958ad6e105b8f4.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4de2b6ebaafe22b1fb049defe2b909d1.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/9b88e3448e3b9b9cae6e909891316d7c.webp) ### 2.4.ansible的颜色含义 - 绿色 ##执行成功但没有对远程主机做任何改变 - 黄色 ##执行成功并对远程主机做改变 - 红色 ##执行失败 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/07df20a50b669c73d8d9055883dc2f69.webp) ### 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模块中不支持,如*等 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7bf671bd3f766cffbd4d45d4ce57401c.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/29ef91d54f643f078d55486ac5b80db5.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/42c5f20c27c89ab44c55385ace554b15.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/36c864105bff83d0bbece6e1ce0f6dfa.webp) #### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/3d9acbb06a5f2771fca03e96563d3368.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a7dc49ff5d8ec7e1d3f87361fd38b3f9.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d864e8c85bf3054011127c0df56dfcd0.webp) #### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8ea405ba1d4712f0c21c7628b31e84e1.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7b497263b64a3c096cc438b7c1358889.webp) #### 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" ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e0f46b7d11b2f172c82a971fb043131c.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/3d6fa1ce2e097d4740128b17f436e04d.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0f1b9f7f5d0df8195cbd8aa530bce413.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/6f0262d0410a0e6e3bf9140ecf33b0fd.webp) backup ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7414f3dc10d2b65d3f874045aa8e6500.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e566374684a293ff211d60bf4827fc97.webp) content ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5f1d14ee747f79352881ad9cbd7f453b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c56025165371753e840e14ed4bc5f536.webp) #### 2.5.5 fetch模块 - 功能 - 从受控主机把文件复制到ansible主机,但不支持目录 - 常用参数 - src ##受控主机的源文件 - dest ##本机目录 - flat ##可以直接拷贝文件,忽略文件的上层目录(基础名称功能) - 实例 ansible all -m fetch -a "src=/etc/hostname dest=/mnt" -k ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/84a91ee7f7c8a90f32a1247da7e30a97.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0b317bd0324422e109621327aa37be26.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/bba6a1fe5ae809b4160a543177bf2876.webp) #### 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' ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/6e59061156a5507f08167a350a427004.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/16fe75f5221048c5f4ee881116a34ffa.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/b4b42bbb0ec53852e4f8aba81e88640f.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/656fa2cadb862203121de39fd857a80f.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5472f9326b6eecac26de30b71f0451af.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/86688812149506ba0cc01320dc8726bf.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/bb515b46d7c341cd6e0cbc595988eb18.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fb0a4b0a0ce524e560a7592dc23568d3.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e3d7e40f5aaa1f6c8985e8d10fc7179b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c421817362010346e21313911479fad9.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/68b0946731a5e9db969056256cc07b79.webp) #### 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" ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/14faa4a85b4f3fc9b61f1990881a05ce.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1aaee5e953250fd6035267d4420ade3d.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0eb00b3be71d50ed956a89b82cbc8bd6.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0baa5be671ad759bf1993b339a10a5c7.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fb01547984b870c0915b73f0f6084735.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/40086c73910ee7d36ae26f35147b1af6.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7caad4671b700dd76213e463c107374e.webp) #### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/087862be3585e168ea69155d0fa9d6d7.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7c73faf1f2c236e69c17afe0770f9d8f.webp) #### 2.5.9 hostname #作用 管理主机名称 #常用参数 name ##指定主机名称 #实例 ansbile 172.25.254.100 -m hostname -a 'name=lee.westos.com' ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/b4d78b8bd1b3fe142d4cc584053b6b19.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/10758e1dc2b9e96c76e4781c5e94a32e.webp) ​ #### 2.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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1d899c277b71122a2defc5de3818b887.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/3e218a919864ef7018820e23fa91e533.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7ffc1134e663b743bb1d762cd594593e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8987a1a4d3dcd0cc1e3dfbdd46af4ee5.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/779814cf1593a7b854af8136edef3358.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/b42e24c629e0dbc1cc25bb0b10067ece.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/885bfcb3f86c8b1e3494daec972ba824.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e7d9013f0fda0699a35145f86ae8d81e.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/9999af2714f5088a36d5275d6171ce41.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2cdf39fc027e96c50cdccd0304179f1b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f98f1def207620f8a1cf450210e5824a.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/ae205c0b0641786ad908fb3db15fb6a7.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/95d4a96bf8b8eafdab133cf7ab3c00d7.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/59e778cd553950a95b30d7d9cfacd4e4.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/864dd7d29b9cb63530420cfebc7496ef.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/bce8d2f25466b8ed680cdbd471d7dfc8.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/dd627cee88618b9bbf0b3d6f4bc1a616.webp) #### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/dd1995f3118f4f24e84b93aaba7d8f46.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/119024663d75c24a87b21ba57ac89e55.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/bf9467258985b4c1d2e69af0b0405f13.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a1bf8e78d78c908278242f655d147231.webp) #### 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 ​ - 实例 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' ##安装组件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/207e62b6f96577fe3c9f0a12aa54291e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c74b9051c435d2c35d6a5a2f25197146.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a8cdb8c8beaa64770538f2f688a4bb30.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/439f16bf1d5b479db7834f762aae59cc.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fbd337d98e52b63a2f153d52ca7c20a0.webp)enablerepo ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2e6f79d8736c659b831905854d1ac0b5.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5261c2eb47bbdbe4423cff36bf50d3d8.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/6491e7c612fdf8b552881c9790fde0c0.webp)disablerepo ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/cd340cef8e3ff3eaeb7f86447672bb34.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e414086e398a423617a2959bd49e0deb.webp) disable_gpg_check ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c8e281ee864371e7c5e88b41267ac81a.webp) 下载组文件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e7b3dadb7d0a52e102b872dc64b85203.webp) 更新所有文件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/98b9f5ffc7a16e72ac0ee4b9b8bc25c3.webp) #### 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" ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7e8072f5717237fce4145b00a00996e8.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/ffbbdb2db73634c3f15e5d718cd38886.webp) #### 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' ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/dec9a95f04d30b48712b583094b19c94.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/bbc6dac7b13a27fc561ff28611533f64.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/3fac1ae5942892650c283bee80ae1cec.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/80d1c5fc1e7bdd362c322b0e58e3c98b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a07c1b7e1c1d41af9d4ca9de39fd940e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f6de1e307e32fdc17bf45e0ce609f6a4.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e223eec15688ff1ef05a0450566e2af4.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7bef5acde1ffdda7e5e8be3b6d302e65.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/667e0cce0def909f66933378a9f73d9b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a5b052b8ee4ee317dbf4ebda5632ae36.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/59a880228a4b2ee9356cd8cb2c9f2818.webp) 指定shell ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e202bcaa55f4a5baf051622026061962.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/13dad1dd9ec003e30497fbe032633fb8.webp) 用户说明comment ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7c937b240cce65effef910273d438dcd.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e52f60df6d97e33c1143c04b758ef568.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/08eadef50c4269cfbeef5b5d15ec43ba.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/322ddd8d7d68a02c973018223da9a390.webp) password 明文密码 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5ed84de0452ea860428437bf40468f3d.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/3b3ae26add2ce3af21218236e2a36bf4.webp) 加密密码 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5584ce3491a1fe7ce143a23aa5dfa971.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/706ba381f165d79dc04cc305fcf89727.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/34eb3c189c7f14cc7980d4ad1e6549f5.webp) #### 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' ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/69cba0bb9ec7e166dd0a96780b42a6f9.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f0ab1f05a6e23f8cb20e65a056af58a1.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/12a8e96884df0c8b9fc4e3f2c10568c0.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2bdfc232ab5a7f9a95009b6902aee233.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fda973cbf50e203626a01257779d6566.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/b518079b1a873693529ce05b0568b39d.webp) #### 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"' create ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/40b8f1414c6da6d2c6aabba558d14680.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/9edaf3753b1aa9b1714d437d13361c54.webp) regexp ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/dfdc61e7300703f3f685f829cc4a378b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/9d53b8f9c9921a9560751f81e3d36c18.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/69b0f40c35c418ce8dafd6ce7e08c3e7.webp)absent ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/090bec7d5f602a5bdf9eb37c479b694b.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/cebcab5865d93f66e0c85b9b39036a6a.webp) backrefs ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4c57fda2f31971848aca04c2f3a7fed2.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/99111b86a9b4305732d72b72fdede5da.webp) regexp="(h.{4}).\*(w.{5})" line="\\1" ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e2f770fd7a4c13ac83ae66ff5927e3e6.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/45bd103b578d8340353e83726f8efccd.webp) insertafter与insertbefore ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2fe0e39c977e8cb522cd53ed265c52e2.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d59708c94dc859dbf792c81e307deb5e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5a70e81a32f20831f92dc4deed3ac7de.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a28875532fb9565b2c2c9756bc6f9d48.webp) backup ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fe81acc41ff9aa9a0985cf27c51f9537.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c33e0d125d2f173048080a64026dd915.webp) #### 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' ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f3e0c481be5d93d350a57eda3f2b2551.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/710bcbd4e3c29741eb120747da244b40.webp) ​ #### 2.5.18 setup - 作用 - setup模块用于收集远程主机的一些基本信息 - 常用参数 - filter ##用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。 - 实例 ansible all -m setup -k ansible all -m setup -a "filter='ansible_all_ipv4_addresses'" -k ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a7ba495e7c63234845a77b404dacbc0e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/be1afcd0e1b1947f6f1e24fa549ffd80.webp) #### 2.5.19 debug - 作用 - 调试模块,用于在调试中输出信息 - 常用参数: - msg: ##调试输出的消息,相当于echo - var: ##将某个任务执行的输出作为变量传递给debug模块 相当于echo `ls /hello` ##debug会直接将其打印输出 - verbosity: ##debug的级别(默认是0级,全部显示) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c98425ffe9c94e78856eeb5bf5ab4c16.webp) #### 2.5.20 seboolean - 作用 - 设置sebool值 - 常用参数: - name: ##设置的sebool值的内容,可以通过getsebool -a 查看 - state: ##状态yes|no - persistent:##yes立即生效,no不生效 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d7e6178adc7ca6b7cc063ef55e7b2ab1.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0596007df9126a68df89326007549862.webp) #### 2.5.21 filesystem - 作用 - 格式化硬盘,并设置格式化类型、大小 - 常用参数: - fstype: ##设置文件类型,(Aliases: type)(Choices: btrfs, ext2, ext3, ext4, ext4dev,f2fs, lvm, ocfs2, reiserfs, xfs, vfat, swap) - dev ##选择修改的硬盘文件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1193049f4d8d1d56f1af8764d2d8d409.webp) #### 2.5.22 mount - 作用 挂载 - 常用参数: - backup: ##备份挂载目录的原有文件 - fstab : ##永久挂载到的位置 - fstype: ##挂载的硬盘类型 - path: ##挂载点 - src: ##挂载的文件 - state: ##present挂载,absent解除挂载 - opts: ##挂载参数( 如 ro,noauto) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1805cde5fdcf368406a40e3eb9a47de0.webp) #### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5b13127bc88c9088a0ee7e7b72167454.webp) ## 3 playbook ### 1.1 Playbook的功能 - playbook 是由一个或多个play组成的列表 - Playboot 文件使用YAML来写的 ### 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.3 YAML 列表 - [Linux,C++,Java,Python] ##一个中括号多个元素,并列关系 - Linux - C++ - Java - Python ### 1.4 YAML的字典 - 字典作用存放键值 - name:westos - age:12 - jobs:linux - {name: "westos", age: "12", jobs: "linux"} ### 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.6 Playbook的核心组件 - name #可选,建议使用多用于说明 - hosts #受控主机列表 - tasks #任务 #用于选择执行部分代码 ### 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列表 ​ 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. vsftpd、lftp配置 俩种写法 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/92748e53a2d8482c40e328002ac9e6a6.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0679b1a93aeb57703cdd7a83f9aaf39d.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d1f0e3776de1d31effdca7bbc462edbf.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2a4d116e0a4e1f5fa5c0a22a68d87a3c.webp) 2. appache配置 客户机仓库提前装好。 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/42cb8470b2b27966cbe79f0a7fff6f76.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/b84c3938ecd600b0fd5e713afd09456a.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/633e614e9ffccae4287b97fa409981fa.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/915169d61213beefb62b70c0510cfa37.webp) ### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/3d29d6c58c19ac88e5fc5b37c684caab.webp) ## 4 ansible变量使用 ### 4.1 变量命名 - 只能包含数字,下划线,字母 - 只能用下划线或字母开头 ### 4.2 变量级别 - 全局: 从命令行或配置文件中设定的 - paly: 在play和相关结构中设定的 - 主机: 由清单,事实收集或注册的任务 - 优先级:主机>play>全局 - 变量优先级设定: - 狭窄范围优先于广域范围 ### 4.3 变量设定和使用方式 #### 4.3.1 在playbook中直接定义变量并使用变量 - 示例 --- - name: create user hosts: list1 vars: user: westos1 tasks: - name: create user user: ##user模块 name: "{{user}}" state: present ... ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/ad8210989a8ec3fa12f2f9ec5104c74c.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7a9afaeba1077462699cc9be9a48abad.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/48237f4494a96bc376132765ddddc38e.webp) ​ #### 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 ... ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4433026036a888894f3b772b40fb6f0d.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/396397857a3a2c0fa090239b046bb9c5.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/dd04e84551a1cf796630c016312a18ec.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4c35bb84dc32735a48d9889717f71198.webp) ### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/263a34385891fd0a6a43f3110fa14f9a.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/93cb937d8694f5f267a0a22423e0db36.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4ade8fbad544ad384371c7e3a26668b7.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/eb3edc75cbabd3d9338698b47c87b460.webp) ### 4.5 目录设定变量 - group_vars ##清单变量,目录中的文件名称与主机清单名称一致 - host_vars ##主机变量,目录中的文件名称与主机名称一致(取决于清单里是主机名还是ip) group_vars ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fe45a918b6f6b08d6f7dcd6e83f1f5d5.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a1dea3e17e06317686a806a026443b5a.webp) host_vars ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/ee7905205d29e79969576f3875b71a2b.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8750f65e8eb57a2acfe27ab908e30006.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1199e8e9df3dee6ac53b69e65fc4d1aa.webp) ### 4.6 用命令覆盖变量(本身没变量也会被覆盖) - ansible-playbook user.yml -e "user=hello" ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/38d8f96998cf82768b6b095d50d5665e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e325259c7bcc79f7981299064e76718b.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/282bed2dbb5437a8ee202d7d88bcd02d.webp) ### 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 练习 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/eb944f4b33c28b8a1427e90b800a8dec.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/af111f08fba1b88f7c0f099cdeb6d8be.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/dd87ade9028a3952076a3f7fe46c527e.webp) ### 4.8 注册变量 ```yaml - register 把模块输出注册到指定字符串中 --- - name: test register hosts: list1 tasks: - name: hostname command shell: hostname register: westos - name: show messages shell: echo "{{info['stdout']}}" ... ``` ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0404ecd9408dcb88418578d1c7527e55.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/248acb91712457c102352e0c023a7a44.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/dff7fb4c31cdfcec0e81e83f7fab179a.webp) ### 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模块调用信息 ... 有gather_facts的情况 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4bc0c5e9d3e2d906aa0e1a482848bc49.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c59507729f615d1b2e8947ec5952acda.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/de003d4596f6728a061b145b8ae4f5a6.webp) 练习,登陆主机的时候显示主机的主机名和ip ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0a51ed00aa57645830905f4a91f033dc.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2a33c5e18543cd166e5eaff2f15573ca.webp) ### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/6b462c29c2a07dabfdaca5ab15a5bcee.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4d2471881378fafbff6f6ebbcd74e56a.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/ebcf41def499a9564fc4a3e8ee122c68.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f5c09b2ec44adeb877e6af0a24d88e6d.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7784e1353d3d506b939f870343b8fa8d.webp) 练习 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/bcfbbd85f036869df203158caa3f4f42.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c40f17b0f39f8704f332744fb04d2062.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d0afeb883816e3d3d89e1fd418e55f46.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f38d8d508d21913fcae739d7c6a716fa.webp) ### 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%} ### 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 apache.yml ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/515680dd23209a22ee0f0c5584e66890.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/583074d75eadef9436d79c4e1cb4d190.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/6a21491c2c0b11403d389c8ec1318e83.webp) apache.j2 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/682df46fb834d199fc403072f8355ba1.webp)测试结果 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/0351eccf2f862b124509f35cb066f49e.webp) ### 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 创建 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4958fdef6ffc4ef5ca0c3bf1d50f2677.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/9be07b4514c4c2c12be17c69d92320c1.webp) 密码文件加密 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d9d9767b43560e7cdfd9bc830878d73b.webp) 现有文件加密解密 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/79c265d7818a20e03d0c00c936d6eb44.webp) 查看文件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/14b1ec225330a41cc6f4a2cd23720495.webp) 修改密码 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c000cc0067fbbf4081db4db7875233bf.webp) 编辑加密文件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7fa6103d85a6aeb383c2eb28bc62048f.webp) playbook ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8823e005cf45335d3cc417400a7c8adc.webp) ## 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 ... device: /dev/vdb 8 number: 1 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/296b5f826d520eccd04053d2b3f4eaf6.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/b9d1fc6421e5122a80d26cfd6599b281.webp) #### 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,循环建立文件和文件夹 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/946b11be787752ade3f2ffbe99b42db2.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/ffe05d4888efd9de0b58f32ff4c9ea59.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1b31b1b148e46962f295e7894cd45f77.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/937562151016e0a330b416146976a86c.webp)练习2 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e5317dcad0ef1188482e9a4e6d5be667.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7d2a19e73fa36bc36927d94301191065.webp)![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a3fd8c06e698d99390b5a58a96e74487.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/eccf810ead8be43da38c6b98e49f0a78.webp) ### 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) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/6846a6b084e437787d06c4cbbbfddbea.webp) list3里面是172.25.10.20,172.25.0.30 另一个练习题 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/42f67e6f911498ba5fb716338f8804a8.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8adc7d710efae30219295034f5c0cea4.webp) ### 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: "\n\tServerName {{web1.name}}\n\tDocumentRoot {{web1.document}}\n\tCustomLog logs/{{web1.name}}.log combined\n\n\n\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上传下载功能 示例(需要看的)(软件已经有了卸载掉) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/19ecf3bc7d25c034b19e252176834af1.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/cf2e12e97a8b9f63a627fe5d36876312.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1a7b2252ee79d94bcb6df1e2c27ea079.webp) 练习:vsftpd ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f8e2d2196095d8772b1b67911017be46.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/9ab0a508707517a03b4ac249f0efa014.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5143def3056be5b147f3cde162232eca.webp) 模板文件内容 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c1dcb424e985e0cf367c3fc39c90495c.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2664917a2cb880c23a69896cf2e72273.webp) 脚本执行结果 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8e6d55b0a324ea4ccdbb63ce2768696f.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f2dd342cc465a99201a2446fb0335bac.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/500cf9609765c08d85212250280e63ae.webp) ### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4d6cbaab40c377fe3555d4114626f4cc.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d4abc501cda347ed83420cf58d0ba7d5.webp) #### 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 ... 示例看下图 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/26e0a9e59ead73c60d948917ad19a835.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f6b4132401fa9dc9e0d1506fd8ee5e85.webp) #### 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 ... #### 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" ... ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/bc321a84a137747b725ab9bafd102563.webp) #### 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: ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e98d9c4f3ca6299921db6fe52ac112fb.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5aa62c20a5e2a785716fe00e42f24903.webp) 普通练习2: ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d0e9a53846e2b254c9a26440f3b8f957.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/57d43757c3189c143af6269fd875c671.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/31359eb836f03287f086e41cee669907.webp) dev: /dev/vdb1 - mount: 测试练习 3000M执行效果 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/3c764d7dcbfc399e296a9a7b16c480ec.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/9bf7739c9afccdd876d5e1de5be2d5ab.webp) 执行结果 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/323680073b6969a3355e87546905c757.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/051eb9b0664e51706db9b5c781f688db.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2d1adc4b4a098dfd798b0e9e1e396e9f.webp) 自动挂载成功!!!不需要重启!!! 2000M执行效果 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7d06d7e1008ebe3dbd23afcb371c78f9.webp) 执行结果 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/654a37bd83cdccee824320aa2805f071.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7eb682217adf0664237a9ecc80c6b100.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/35d086489fd65564d6fcace0cafa9d9e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/19ace2d34fbfe716da4a745ae45bde71.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/7545b0bb1f44904cc782c892c8ae39b3.webp) ## 6. ansible roles ### 6.1 roles简介 * Ansible roles 是为了层次化,结构化的组织Playbook * roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们 * roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高 * 以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个功能切割成片段来执行。 ### 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 ##用于测试角色 ### 6.3 role存放的路径在配置文件ansible.cfg中定义 roles_path = path/roles (默认目录:/etc/ansible/roles) ### 6.4 创建目录结构 $ ansible-galaxy init apache(创建apache目录结构,即角色) $ ansible-galaxy role list ##查看角色列表 ### 6.5 playbook中使用roles - playbook中使用roles: --- - hosts: server2 roles: - role: role1 - role: role2 var1: value1 ##此处变量会覆盖roles中的定义变量 ... ### 6.6 控制任务执行顺序 --- - hosts: server2 roles: - role: role1 ##角色任务 pre_tasks: ##角色执行前执行的play - tasks1 tasks: ##普通任务 - tasks2 post_tasks: ##在角色和普通任务执行完毕后执行的play - tasks3 handlers: ... ### 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 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a39c9016209ecf5b9e5ff2121d97b388.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/ce5a12095799ff87655f2af65b3cc261.webp) ### 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 ##主要用的 ### 6.9 综合练习 1. 搭建vsftp虚拟用户 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/adb314df4fe3bb965cbe6b84b79bb3e8.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1027571156016db59ba6d141bbb7f151.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/80241ddf976a069e41a22b2ee8b74587.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/3dbed474a8a66180b64a11c25684bc55.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5fd8ed064c0caea8dd74efdca42f4eac.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/793dc7ae7faa36ceec16683761a7c89f.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/37a027a89d370d269a61e00f42321860.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4f23bb48774348046de875137a821206.webp) 配置vsftpd.conf ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1c8d7912f387d6749b9a5d3cf153ba1f.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/e9563f0bf1e5a66076b2901d257df19c.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1d03c76a92ce84b29b4b3efb0942d64a.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/2077de87c277774834557964566fc7ed.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a3afe9ffcb49a8bc9a4503525b86d47c.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8130888a39d6f4323dd0937a72a82802.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c6baa482f194e4259a1b90016752787f.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/559c6e13c439a18ddb9ed6b5ba8a0fa4.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/9d487ff9716ab9459748aa3cef1bf456.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fc9ff0894fa8a55fe66e4594f298495f.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/58463a1c5767636b63dda59a55d2bee1.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1a65385e11cb5d2a0a9cfda2f780443e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8aa781cc0d380e5d7021b9c038dec528.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/97390c282dc037769d1e0b012d92b328.webp) 受控主机测试执行效果 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/6aa8d039c1b99fee2af169a622667656.webp) 角色压缩后供多人使用,也可以上传到ftp服务器 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/33f91bbb9b4cf0eb9f9fd2e8e3dfbc74.webp) 2. 搭建ddns服务器 前期工作 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/659bbef050910b0673a476d787bc6839.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/5c2c6b2066d73fb4e55ae8dbe45ac492.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c5d0a1022c8f5b4197b7dd88136f9386.webp) 配置dns模板 named.conf ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/580aec4f8df9c99fe02757d6502d706a.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/625acc81997fd947f5cfb75534bf7705.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/6ede3582b326cd66741e82e6e8bb5677.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/60e93ec589356bb73e6713a82e187920.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/70dde4bb4b4906ddfbd9430e22166733.webp) named.rfc1912.conf ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f97cd5dec8fa8836f737654922d5a5d1.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/27d1150825d5faff6996011cd3786c3b.webp) /mnt/var/named/named.localhost ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/d98bfd9b41c015dfbe9a3b3244b58b89.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a539b64aa3d8f3089d72b3e27a084c42.webp) /mnt/etc/named.root.key ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f3ef946a2190a8350cea9f96364e37fa.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/a47e439f4fe8ee2d11cdbd571670630e.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/cb6cb1def29a02a6748f5522c324a1ad.webp) 配置dhcpd.conf模板 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fe81d9a6b5de8762a01bc069ab7c8948.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/ad715cef0cfe0cc0fd29cea5f8ec5c56.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/fce616af7c7553b6d59dc849bf55f10b.webp) 书写各个模块的yml文件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/614e129e1fab5ee9aa4bc40e4c66e217.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/8b6658c1b268179345e24016d4fff428.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/c6f294c19ea62c362747af2466becaa1.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/daf32d2e7f2ca5de2f152a6002b24d39.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/05f826209b70136290efcd05ea5faa78.webp) 执行结果 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/1a4f10555b480b20ad6ad6adc62deabe.webp) ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/4aab679857ed8b9b9ca998abad77529c.webp) 打包角色文件 ![在这里插入图片描述](https://file.jishuzhan.net/article/1711230209585319937/f88020529fd13939b336e6a1bedd2fb9.webp)

相关推荐
风清再凯2 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机2 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星15 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥15 天前
ANSIBLE
ansible
码农101号15 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号15 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信16 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li16 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@19 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91923 天前
Ansible
ansible