【小菜鸟之---Ansible基础详解】

news2024/10/6 10:27:46

文章目录

    • 1 【Ansible简介】
      • 1.1简介
      • 1.2 Ansible 特点
      • 1.3 Ansible的工作机制
      • 1.4Ansible任务工作模式
    • 2【安装部署】
      • 2.1安装命令
      • 2.2 Ansible配置文件
      • 2.3主机清单配置
      • 2.4 基于ssh免密登录
      • 2.5常用命令
    • 3【Ansible常用模块】
      • 3.1 ping模块
      • 3.2 shell模块
      • 3.3 command模块
      • 3.4 copy模块
      • 3.5 file模块
      • 3.6 corn模块
      • 3.7 yum模块
      • 3.8 service模块
      • 3.9 user模块
      • 3.10 script 模块
      • 3.11 debug模块
      • .....
    • 4【剧本模式-playbooks】
      • 4.1 简介
      • 4.2 playbook核心元素
      • 4.3 基本语法
      • 4.4 Handler
      • 4.5 roles

1 【Ansible简介】

1.1简介

​ Ansible是一种基于python开发的自动化运维工具,它只需要在服务端安装ansible,无需在每个客户端安装客户端程序,通过ssh的方式来进行客户端服务器的管理,集合了众多运维工具(puppet、chef、func、fabric)的优点,基于模块实现了批量系统配置、批量程序部署、批量运行命令等功能。

1.2 Ansible 特点

1 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
2 默认使用SSH协议对设备进行管理;
3 有大量常规运维操作模块,可实现日常绝大部分操作;
4 配置简单、功能强大、扩展性强;
5 支持API及自定义模块,可通过Python轻松扩展;
6 通过Playbooks来定制强大的配置、状态管理;
7 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
8 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。
9 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

1.3 Ansible的工作机制

Ansible架构图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主要模块

    Ansible:Ansible核心程序。
    HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
    Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
    CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
    CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
    ConnectionPlugins:连接插件,Ansible和Host通信使用

​ Ansible的工作原理是基于模块的。它通过SSH协议连接到远程主机,并使用Ansible模块在远程主机上执行任务。每个模块都是独立的,可以完成不同的任务,例如配置系统、部署应用程序、运行命令等。

Ansible的工作流程如下:

  1. 1. Ansible 通过SSH连接到远程主机。
    2. Ansible根据配置文件中的主机组和主机列表确定要操作的目标主机。
    3. Ansible在目标主机上安装并运行一个临时的Python脚本,该脚本用于执行Ansible模块。
    4. Ansible通过SSH将模块代码传输到目标主机,并在目标主机上执行模块代码。
    5. 模块执行完成后,Ansible将执行结果返回给控制节点。
    

1.4Ansible任务工作模式

 ansible分为两种工作模式:

一是adhoc(点对点模式):此模式相当于对管理主机执行单个的shell命令。

二是playbook(剧本模式):该模式应用较多,该模式是指将一系列任务整合形成一个剧本,以此来达成某种功能(譬如部署某个服务,数据库备份等)的目的。

上述两种模式可类比于一个是执行单个shell命令,一个是shell脚本。

2【安装部署】

2.1安装命令

需要先安装一个epel-release包,然后再安装 ansible 即可。
[root@localhost ~]$ yum -y install epel-release
[root@localhost ~]$ yum -y install ansible

安装目录如下(yum安装):

配置文件目录:/etc/ansible/
执行文件目录:/usr/bin/
Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/
Help文档目录:/usr/share/doc/ansible-X.X.X/
Man文档目录:/usr/share/man/man1/

2.2 Ansible配置文件

​ Ansible 的配置文件为/etc/ansible/ansible.cfg,常见参数

inventory = /etc/ansible/hosts #这个参数表示资源清单inventory文件的位置

library = /usr/share/ansible #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开

forks = 5	#并发连接数,默认为5

sudo_user = root	#设置默认执行命令的用户

remote_port = 22	#指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全

ask_pass = True     #是否需要密码

host_key_checking = False	#设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例

timeout = 60	#设置SSH连接的超时时间,单位为秒

log_path = /var/log/ansible.log	 #指定一个存储ansible日志的文件(默认不记录日志)

2.3主机清单配置

主机清单在 /etc/ansible/hosts 文件内。

#格式:
[定义一个主机组名字]
  主机1 #ip或者主机名
  主机2
 
 如:
 [ansibleTest]
 192.168.58.130 # ansible_user=root ansible_port=22 ansible_ssh_pass=root
 192.168.58.131 # ansible_user=root ansible_port=22 ansible_ssh_pass=root
 
 [manager] #本机也可以管理自己
192.168.58.129
 
 当需要对该类主机进行操作时,只要调用ansibleTest即可调用该分组内所有主机
#查看所有主机
[root@iau ~]# ansible all --list-hosts
  hosts (3):
    192.168.58.130
    192.168.58.131
    192.168.58.129

2.4 基于ssh免密登录

#1.创建密钥对 在管理服务端操作
[root@iau ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  #回车
Enter passphrase (empty for no passphrase): #回车
Enter same passphrase again: #回车
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:2oqspUsBe3bq7rF6CU0IOAcNLTSOMtGvUgbcuA3LO4Q root@iau.com
The key's randomart image is:
+---[RSA 3072]----+
|BOo              |
|O=*.             |
|OB=.             |
|EO+..            |
|o==..   S        |
|o=o+   o         |
| o=.. . .        |
| oo* . .         |
|.=Ooo .          |
+----[SHA256]-----+

#2.公钥传到被控端
[root@iau ~]# ssh-copy-id root@192.168.58.130
[root@iau ~]# ssh-copy-id root@192.168.58.131


[root@iau ~]# ssh-copy-id root@192.168.58.131
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.58.131 (192.168.58.131)' can't be established.
ED25519 key fingerprint is SHA256:CH3r9ZSnB5QNlJhATt/Bvv4bVPUM32ggkFm/LTrOtAY.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: 192.168.58.130
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.58.131's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.58.131'"
and check to make sure that only the key(s) you wanted were added.
# 使用命令检测免密登录
[root@iau ~]# ssh root@192.168.58.130
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Thu May  2 21:39:59 2024 from 192.168.58.129
#退出
[root@zbx-agent01 ~]# exit
注销
Connection to 192.168.58.130 closed.

2.5常用命令

ansible-doc -l :列出所有模块
 
ansible-doc -s <模块名> :查看模块的参数信息
 
ansible --version :查看ansible版本
 
ansible -v :输出详细详细;-vv:输出更详细的信息
 
ansible -m :指定调用的模块名称
 
ansible -a :调用模块的参数
 
ansilbe -c :测试命令执行结果,不实际执行
 
ansible -k :提示输入ssh的秘密,而不是基于ssh认证
 
ansible -u :指定执行命令的用户
 
ansilbe -i :指定访问的主机列表文件
 
ansilbe -f :指定并发进程数

3【Ansible常用模块】

3.1 ping模块

#ping模块用来检查目标主机是否在线
[root@iau ~]# ansible ansibleTest -m ping
192.168.58.130 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.58.131 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

#ping模块ping网段
[root@iau ~]#  ansible 192.168.58.* -m ping
192.168.58.131 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.58.130 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.58.129 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

3.2 shell模块

shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能
#查看目录
[root@iau ~]# ansible ansibleTest -m shell -a "ls /iau"
192.168.58.131 | CHANGED | rc=0 >>
i,a,u
shell
192.168.58.130 | CHANGED | rc=0 >>
i,a,u
shell

#创建文件夹,并列举(中间用分号隔开)
[root@iau ~]# ansible ansibleTest -m shell -a "mkdir /iau/ansible ; ls /iau"
192.168.58.131 | CHANGED | rc=0 >>
ansible
i,a,u
shell
192.168.58.130 | CHANGED | rc=0 >>
ansible
i,a,u
shell

#查看apache服务器状态(131没安装apache)
[root@iau ~]# ansible ansibleTest -m shell -a "systemctl status httpd.service"
192.168.58.131 | FAILED | rc=4 >>
Unit httpd.service could not be found.non-zero return code
192.168.58.130 | FAILED | rc=3 >>
○ httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/httpd.service.d
             └─php-fpm.conf
     Active: inactive (dead)
       Docs: man:httpd.service(8)non-zero return code

3.3 command模块

可以直接在远程主机上执行命令,并将结果返回本主机。不支持特殊字符,如管道符。

[root@iau ~]$ ansible ansibleTest -m command -a 'date'

常用的选项:
	chdir:     # 在执行命令之前,先切换到该目录
	executable:   # 切换shell来执行命令,需要使用命令的绝对路径
	free_form:   # 要执行的Linux指令,一般使用Ansible的-a参数代替。
	creates:     # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
	removes:      # 一个文件名,这个文件不存在,则该命令不执行
	

#先切换到/data/ 目录,再执行“ls”命令
[root@iau ~]$ ansible ansibleTest -m command -a 'chdir=/iau/ ls'

#如果/data/aaa.jpg存在,则不执行“ls”命令
[root@iau ~]$ ansible ansibleTest -m command -a 'creates=/iau/aaa.jpg  ls'

#如果/data/aaa.jpg存在,则执行“cat /data/a”命令
[root@iau ~]$ ansible ansibleTest -m command -a 'removes=/iau/aaa.jpg  cat /data/a'

#查看磁盘使用率
[root@iau ~]$ ansible ansibleTest -m command -a 'df -hT'

#系统时间
[root@iau ~]# ansible ansibleTest -m command -a 'date'
192.168.58.131 | CHANGED | rc=0 >>
2024年 05月 02日 星期四 22:19:53 CST
192.168.58.130 | CHANGED | rc=0 >>
2024年 05月 02日 星期四 22:19:54 CST

3.4 copy模块

# 用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。远程主机目录不存在,则会自动创建

# 常用参数
src		 	 	# Ansible端源文件或者目录,空文件夹不拷贝;
content		 	# 用来替代src,用于将指定文件的内容,拷贝到远程文件内;
dest		    # 客户端目标目录或者文件,需要绝对路径;
backup			# 拷贝之前,先备份远程节点上的原始文件;backup=yes
directory_mode	 # 用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝;
follow			# 支持link文件拷贝;
force			# 覆盖远程主机不一致的内容;
group		 	# 设定远程主机文件夹的组名;
mode		 	# 指定远程主机文件及文件及的权限;
owner		 	# 设定远程主机文件夹的用户名,拥有者。

##为 "ansibleTest" 的目标主机上创建一个名为 "an" 的文件,并将内容 "ansible test" 写入其中,并制定权限
[root@iau ~]# ansible  ansibleTest -m copy -a 'content="ansible test\n" dest=/iau/an  mode=777'
##查看
[root@iau ~]# ansible  ansibleTest -m shell -a 'cat /iau/an'
192.168.58.130 | CHANGED | rc=0 >>
ansible test
192.168.58.131 | CHANGED | rc=0 >>
ansible test

##把文件的内容修改一下,然后选择覆盖备份
ansible ansibleTest -m copy -a 'content="I am iauxcn\n" backup=yes dest=/iau/an mode=777'
[root@iau ~]#  ansible  ansibleTest -m shell -a 'cat /iau/an'
192.168.58.131 | CHANGED | rc=0 >>
I am iauxcn
192.168.58.130 | CHANGED | rc=0 >>
I am iauxcn

##远程拷贝.本地文件复制到远程主机上的指定路径。
ansible ansibleTest -m copy -a 'src=/iau/test.sql dest=/iau/ mode=644'

3.5 file模块

该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。

# Ansible file模块主要用于对文件的创建、删除、修改、权限、属性的维护和管理,File模块使用详解:

# 常用参数介绍
src					   Ansible端源文件或者目录;
follow				   支持link文件拷贝;
force				   覆盖远程主机不一致的内容;
group				   设定远程主机文件夹的组名;
mode				   指定远程主机文件及文件及的权限;
owner				   设定远程主机文件夹的用户名;
path				   目标路径,也可以用dest,name代替;
attributes			   文件或者目录特殊属性。
state:  #状态,有以下选项:
		directory:如果目录不存在,就创建目录
		file:即使文件不存在,也不会被创建
		link:创建软链接
		hard:创建硬链接
		touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
		absent:删除目录、文件或者取消链接文件

#创建文件新目录
ansible all -m file -a 'name=/iau/xcn state=directory'

#创建新文件
ansible all -m file -a 'name=/iau/xcn1 state=touch'

#删除文件
ansible all -m file -a 'name=/iau/xcn1 state=absent'

#创建软连接
ansible all -m file -a 'src=/iau/xcn dest=/iau/xcn.link state=link '
		# src 是源文件的路径
		# dest 是符号链接的目标路径

3.6 corn模块

该模块适用于管理cron计划任务的。其使用的语法跟我们的crontab文件中的语法一致。

常用选项:
	name:     #定时任务描述
	job:      #指明运行的命令是什么,可以写shell命令
	cron_file:      # 自定义cron_file的文件名,使用相对路径则在/etc/cron.d中。
	user:           # 以哪个用户的身份执行

	minute:         # 分(0-59, *, */N),不写时,默认为*
	hour:           # 时(0-23, *, */N),不写时,默认为*
	day:            # 日(1-31, *, */N),不写时,默认为*
	month:          # 月(1-12, *, */N),不写时,默认为*
	weekday:        # 周(0-6 for Sunday-Saturday, *),不写时,默认为*

	special_time     # 特殊的时间范围,参数: reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
	state  #指定状态
		present表示添加定时任务,也是默认设置
		absent表示删除定时任务

#每分钟打印时间
ansible ansibleTest -m cron -a 'name="打印时间" job="date >> /iau/date.txt" minute="*"'

#删除定时任务
ansible ansibleTest -m cron -a 'name="打印时间" state=absent'

#查看定时任务
ansible ansibleTest -m shell -a 'crontab -l'

3.7 yum模块

RedHat和CentOS的软件包安装和管理工具。

常用选项:
	name=             #所安装的包的名称
	state=            #present--->安装, latest--->安装最新的, absent---> 卸载软件。
	update_cache       #强制更新yum的缓存
	conf_file          #指定远程yum安装时所依赖的配置文件(安装本地已有的包)。
	disable_pgp_check  #是否禁止GPG checking,只用于presentor latest。
	disablerepo        #临时禁止使用yum库。 只用于安装或更新时。
	enablerepo         #临时使用的yum库。只用于安装或更新时。
	
	#安装下载httpd
	[root@iau ~]# ansible 192.168.58.131 -m yum -a 'name=httpd state=present'
192.168.58.131 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Installed: mod_http2-2.0.26-1.el9.x86_64",
        "Installed: httpd-filesystem-2.4.57-8.el9.noarch",
        "Installed: apr-util-1.6.1-23.el9.x86_64",
        "Installed: apr-util-bdb-1.6.1-23.el9.x86_64",
        "Installed: httpd-tools-2.4.57-8.el9.x86_64",
        "Installed: mod_lua-2.4.57-8.el9.x86_64",
        "Installed: httpd-2.4.57-8.el9.x86_64",
        "Installed: apr-util-openssl-1.6.1-23.el9.x86_64",
        "Installed: httpd-core-2.4.57-8.el9.x86_64",
        "Installed: apr-1.7.0-12.el9.x86_64"
    ]
}

3.8 service模块

该模块用于服务程序的管理。

常用选项:

	enabled=[yes|no] #是否开机启动 默认no
	name:           #必选项,服务名称
	pattern:        #定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
	sleep:          #如果执行了restarted,在则stop和start之间沉睡几秒钟
	state:          #对当前服务执行启动,停止、重启、重新加载等操作    
					 #(started,stoped,restarted,reloaded)
					 
	#开启nginx
	ansible ansibleTest -m service -a 'name=nginx state=started'
	
	#关闭nginx
	ansible ansibleTest -m service -a 'name=nginx state=stopped'
	
	#开启ngingx,并设置自启动
	ansible ansibleTest -m service -a 'name=nginx state=started enabled=yes'

3.9 user模块

该模块主要是用来管理用户账号。

常用选项:
	comment  # 用户的描述信息
	createhome  # 是否创建家目录
	force  # 在使用state=absent时, 行为与userdel –force一致.
	group  # 指定基本组
	groups  # 指定附加组,如果指定为(groups=)表示删除所有组
	home  # 指定用户家目录
	move_home  # 如果设置为home=时, 试图将用户主目录移动到指定的目录
	name  # 指定用户名
	non_unique  # 该选项允许改变非唯一的用户ID值
	password  # 指定用户密码
	remove  # 在使用state=absent时, 行为是与userdel –remove一致
	shell  # 指定默认shell
	state  # 设置帐号状态,不指定为创建,指定值为absent表示删除
	system  # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
	uid  # 指定用户的uid

#创建用户
#如果压迫设置密码,要先mkpasswd --method=SHA-512设置加密,将生成的加密密码用于创建用户并设置密码,以确保密码安全性。
[root@iau ~]# mkpasswd --method=SHA-512
密码:#输入用户密码
$6$pbW1x7.YeXyuyu89$dkf4Q3J3b7hRlHAnV09.AbtBKFPpV0kUyni6jsl3MqxHVXYjmu2qB7Vj.0BIpvYHVBpD1jDV..8szvYTTSLty.

[root@iau ~]# ansible ansibleTest -m user -a 'name=ansible password=$6$pbW1x7.YeXyuyu89$dkf4Q3J3b7hRlHAnV09.AbtBKFPpV0kUyni6jsl3MqxHVXYjmu2qB7Vj.0BIpvYHVBpD1jDV..8szvYTTSLty. uid=9529'

#删除用户
[root@iau ~]# ansible ansibleTest -m user -a 'name=ansible state=absent'

#更新用户密码,设置update_password为always以确保密码更新。
ansible ansibleTest -m user -a 'name=ansible password=<加密后的新密码>' -e 'update_password=always'


3.10 script 模块

该模块用于将本机的脚本在被管理端的机器上运行。

[root@iau iau]# ansible ansibleTest -m script -a '/iau/test.sh'

3.11 debug模块

[root@iau iau]# ansible manager -m debug -a "msg='debug test'"

4【剧本模式-playbooks】

4.1 简介

​ Playbooks是Ansible的配置,部署和编排语言。他们可以描述您希望在远程机器做哪些事。使用易读的YAML格式组织Playbook。
​ Playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。

4.2 playbook核心元素

Hosts       执行的远程主机列表
Tasks       任务集
Varniables  内置变量或自定义变量在playbook中调用
Templates   模板,即使用模板语法的文件,比如配置文件等
Handlers    和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
tags        标签,指定某条任务执行,用于选择运行playbook中的部分代码。
remote_user 在远程主机以哪个用户身份执行;

4.3 基本语法

playbook使用yaml语法格式,后缀可以是yaml,也可以是yml。

[root@localhost ~]$ vim test.yaml
---      #表示文档开始
- hosts: ansibleTest           # "- "表示一个块序列的节点,注意:横杠后面有空格,可以写主机名,主机组名,多个使用逗号隔开
  remote_user: root            #指定在进行远程操作时使用root用户进行操作
  tasks:                       #使用tasks关键字指明要进行操作的任务列表,之后的行都属于tasks键值对中的值。
  - name: Ping                 #每个任务都以"- "开头,每个任务都有自己的名字,任务名使用name关键字进行指定
    ping:                      #ansible模块
  - name: make directory test  #第二个任务使用file模块,使用file模块时,指定了path参数与state参数的值。
    file:                      #ansible模块
       path: /data/test        #模块的参数
       state: directory  
	   
---                             #标记文件的开始
- hosts: manager                #指定该playbook在哪个服务器上执行
  vars:                         #表示下面是定义的变量,
    http_port: 80               #变量的形式,key: value,这里http_port是变量名,80是值
    max_clients: 200
  remote_user: root             #指定远程的用户名,这里缩进和vars保持了一致,说明变量的代码块已经结束。
  tasks:                        #下面构成playbook的tasks,每个task都有 - name: 开始,name指定该任务的名称。
  - name: ensure apache is at the latest version  #指定该任务的名称。
    yum: pkg=httpd state=latest                   #yum说明要是用的模板名称,后面指定对应的参数,这两行结合起来就相当于一个shell命令。

  - name: write the apache config file            #每个task之间可以使用空行来做区分。
    template: src=/srv/httpd.j2  dest=/etc/httpd.conf

#需要说明的是缩进的意义和python中缩进的意义是一样,是来区分代码块的。


#playbook创建文件 vim /iau/playbook.yaml,
---
- hosts: manager
  tasks:
    - name: create a directory
      file:
        path: /iau/playbooks
        state: directory
      tags: 
        - directory  

    - name: create a file 
      file:
        path: /iau/playbooks
        state: touch
      tags: 
        - touch
        
    - name: remove directory
      file:
      	path: /iau/playbooks
      	state: absent
      tags:
      	rmdir
       	
    - name: remove file
      file:
		path: /iau/playbooks
		state: absent
      tags:
      	rmfile

语法检测

[root@iau ~]$ ansible-playbook  --syntax-check  /iau/playbook.yaml

测试运行

[root@iau ~]$ ansible-playbook -C /iau/playbook.yaml

运行

标签tags:

  1. 执行特定标记的任务:可以使用--tags参数来指定只执行带有特定标记的任务。这对于在大型Playbook中只运行特定任务非常有用,可以加快执行速度并减少不必要的操作。

    [root@iau iau]# ansible-playbook /iau/playbook.yaml --tags directory,touch
    
  2. 跳过特定标记的任务:可以使用--skip-tags参数来跳过带有特定标记的任务。这对于在执行Playbook时跳过某些任务非常有用,例如在特定情况下不需要执行的任务。

    [root@iau iau]# ansible-playbook /iau/playbook.yaml --skip-tags directory,touch 
    
  3. 组织和分类任务:通过为任务添加标记,可以更好地组织和分类任务,使得在维护和管理Playbook时更加清晰和有序。

  4. 重复使用标记:可以在多个任务中重复使用相同的标记,从而可以在需要时轻松地选择性地执行或跳过这些任务。

4.4 Handler

​ Handlers在Ansible中用于在Playbook中定义和触发操作。它们通常用于在执行任务后执行特定的操作,例如重启服务或执行其他清理任务。

​ 在Ansible中,Handlers通常与任务一起使用,当任务执行引起了更改时,Handlers会被触发。Handlers会在所有任务执行完毕后才会执行,确保在任务执行期间只触发一次。

#当任务ensure nginx is installed执行后引起了更改(即安装了nginx),notify关键字触发了名为restart nginx的Handler。Handler会在所有任务执行完毕后执行,重启nginx服务。
---
- hosts: manager
  tasks:
    - name: ensure nginx is installed
      yum:
        name: nginx
        state: present
      notify: restart nginx

  handlers:
    - name: restart nginx
      service:
        name: nginx
        state: restarted
        

4.5 roles

在Ansible中,Roles是一种组织和管理Playbooks的方法,使得代码更加模块化、可重用和易于维护。Roles允许你将相关的任务、变量、文件和处理程序组织在一起,以便在多个Playbooks中重复使用。

一个典型的Role结构包括以下目录和文件:

  • roles/
    • my_role/
      • tasks/
        • main.yml
      • handlers/
        • main.yml
      • templates/
      • vars/
      • files/
      • defaults/
      • meta/

每个目录用于存放特定类型的文件:

  • tasks/: 包含执行任务的YAML文件。
  • handlers/: 包含处理程序的YAML文件,用于在任务执行后执行操作。
  • templates/: 包含模板文件,用于生成配置文件等。
  • vars/: 包含变量文件,用于定义变量。
  • files/: 包含需要复制到目标主机的文件。
  • defaults/: 包含默认变量,可以在Role中被覆盖。
  • meta/: 包含Role的元数据,如依赖关系。

一个Role可以在一个或多个Playbooks中使用,通过roles关键字引用。以下是一个示例Playbook,演示了如何使用Role:

---
- hosts: manager
  roles:
    - my_role

my_role是一个Role的名称,Ansible会自动查找roles/目录下的my_role/目录,并执行其中定义的任务、处理程序等。

s是一种组织和管理Playbooks的方法,使得代码更加模块化、可重用和易于维护。Roles允许你将相关的任务、变量、文件和处理程序组织在一起,以便在多个Playbooks中重复使用。

一个典型的Role结构包括以下目录和文件:

  • roles/
    • my_role/
      • tasks/
        • main.yml
      • handlers/
        • main.yml
      • templates/
      • vars/
      • files/
      • defaults/
      • meta/

每个目录用于存放特定类型的文件:

  • tasks/: 包含执行任务的YAML文件。
  • handlers/: 包含处理程序的YAML文件,用于在任务执行后执行操作。
  • templates/: 包含模板文件,用于生成配置文件等。
  • vars/: 包含变量文件,用于定义变量。
  • files/: 包含需要复制到目标主机的文件。
  • defaults/: 包含默认变量,可以在Role中被覆盖。
  • meta/: 包含Role的元数据,如依赖关系。

一个Role可以在一个或多个Playbooks中使用,通过roles关键字引用。以下是一个示例Playbook,演示了如何使用Role:

---
- hosts: manager
  roles:
    - my_role

my_role是一个Role的名称,Ansible会自动查找roles/目录下的my_role/目录,并执行其中定义的任务、处理程序等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1646340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【notes2】并发,IO,内存

文章目录 1.线程/协程/异步&#xff1a;并发对应硬件资源是cpu&#xff0c;线程是操作系统如何利用cpu资源的一种抽象2.并发&#xff1a;cpu&#xff0c;线程2.1 可见性&#xff1a;volatile2.2 原子性&#xff08;读写原子&#xff09;&#xff1a;AtomicInteger/synchronized…

【从零开始学架构 前言】整体的学习路线

本文是《从零开始学架构》的第一篇学习笔记&#xff0c;在工作6年左右的这个时间点需要有一些先行的理论来指导即将面临的复杂实践&#xff0c;以便在真正面临复杂实践的时候能有所参照。 主要从以下几个方面和顺序来进行学习 架构基础&#xff1a;从架构设计的本质、历史背景…

# 怎么关闭 win10 系统中自带的【文件预览】功能?关闭WIN10【文件预览】功能的方法

怎么关闭 win10 系统中自带的【文件预览】功能&#xff1f;关闭WIN10【文件预览】功能的方法 win10 系统中自带的【文件预览】功能&#xff0c;默认是开启状态的&#xff0c;如果需要关闭它&#xff0c;一步搞定。 1、打开电脑文件浏览器&#xff0c;随便进入有文件的一个文件…

【Linux】操作系统

上一篇博客我们从硬件的角度谈了计算机&#xff0c;我们说到了计算机的效率跟操作系统写的好不好有着直接的关系&#xff0c;那么这篇博客我们从软件的角度&#xff0c;就来谈一谈究竟什么是操作系统&#xff0c;为什么要有操作系统&#xff1f; 首先我们来大体的认识一下操作…

php基础知识快速入门

一、PHP基本知识 1、php介绍&#xff1a; php是一种创建动态交互性的强有力的服务器脚本语言&#xff0c;PHP是开源免费的&#xff0c;并且使用广泛。PHP是解释性语言&#xff0c;按顺序从上往下执行&#xff0c;无需编译&#xff0c;直接运行。PHP脚本在服务器上运行。 2、ph…

解决 java: 非法字符: ‘\ufeff‘

【报错解释】&#xff1a; 该错误通常发生在尝试编译Java源代码文件时&#xff0c;文件开头的字符是一个字节顺序标记&#xff08;Byte Order Mark&#xff0c;BOM&#xff09;&#xff0c;即\ufeff。在Java中&#xff0c;\ufeff不是一个合法的字符&#xff0c;因此编译器会报…

【码银送书第十九期】《图算法:行业应用与实践》

作者&#xff1a;嬴图团队 01 前言 在当今工业领域&#xff0c;图思维方式与图数据技术的应用日益广泛&#xff0c;成为图数据探索、挖掘与应用的坚实基础。本文旨在分享嬴图团队在算法实践应用中的宝贵经验与深刻思考&#xff0c;不仅促进业界爱好者之间的交流&#xff0c;…

图卷积神经网络GCN

计算图 通过消息传递的框架构建一个局部邻域的计算图 每个节点分别构建自己的计算图 理论上任意深度&#xff0c;根据六度空间理论&#xff0c;层数一般不会超过六层 基本过程 数学形式 矩阵表示 代码表示 图计算改进 能够听见自己内心的声音 最终形式 如何训…

Flink时间语义 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

抖捧Ai实景直播案例-助力景区商家假期销量爆棚!

出门游玩你会提前做攻略吗&#xff1f;是不是早早就规划好了路线、定好了门票车票。这就是属于消费前置的动作。所以在消费前置的情况&#xff0c;各个景区的商家都铆足劲发展线上流量&#xff0c;短视频直播也成为众多商家必做的宣传渠道&#xff0c;特别是五一假期更让不少商…

C++面向对象程序设计 - 继承与派生进一步讨论

C中所谓“继承”就是在一个已存在的类的基础上建立一个新类&#xff0c;从已有的类那里获得已有特性&#xff0c;叫做类的继承。从另一角度说&#xff0c;从已有的类&#xff08;父类&#xff09;产生一个新的子类&#xff0c;称为类的派生。一个派生类只从一个基类派生&#x…

分布式与一致性协议之ZAB协议(四)

ZAB协议 ZooKeeper是如何选举领导者的。 首先我们来看看ZooKeeper是如何实现成员身份的&#xff1f; 在ZooKeeper中&#xff0c;成员状态是在QuorumPeer.java中实现的&#xff0c;为枚举型变量 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING }其实&…

权益商城系统源码 现支持多种支付方式

简介&#xff1a; 权益商城系统源码&#xff0c;支持多种支付方式&#xff0c;后台商品管理&#xff0c;订单管理&#xff0c;串货管理&#xff0c;分站管理&#xff0c;会员列表&#xff0c;分销日志&#xff0c;应用配置。 上传到服务器&#xff0c;修改数据库信息&#xff…

AI预测福彩3D第10套算法实战化赚米验证第2弹2024年5月6日第2次测试

由于今天白天事情比较多&#xff0c;回来比较晚了&#xff0c;趁着还未开奖&#xff0c;赶紧把预测结果发出来吧~今天是第2次测试~ 2024年5月6日福彩3D预测结果 6-7码定位方案如下&#xff1a; 百位&#xff1a;3、4、1、7、8、9 十位&#xff1a;4、5、3、7、8、9 个位&#x…

【数据结构(邓俊辉)学习笔记】栈与队列01——栈接口与应用

文章目录 0. 概述1. 操作与接口2. 操作实例3. 实现4. 栈与递归5. 应用5.1 逆序输出5.1.1 进制转换5.1.1.1 思路5.1.1.2 算法实现 5.2 递归嵌套5.2.1 栈混洗5.2.1.1 混洗5.2.1.2 计数5.2.1.3 甄别 5.2.2 括号匹配5.2.2.1 构思5.2.2.2 实现5.2.2.3 实例 5.3 延迟缓冲5.3.1 中缀表…

华为ensp中USG6000V防火墙双机热备VRRP+HRP原理及配置

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月6日20点26分 华为防火墙双机热备是一种高可用性解决方案&#xff0c;可以将两台防火墙设备组成一个双机热备组&#xff0c;实现主备切换。当主用防火墙出现故障时&…

企业网站 | 被攻击时该怎么办?

前言 每天&#xff0c;数以千计的网站被黑客入侵。发生这种情况时&#xff0c;被入侵网站可用于从网络钓鱼页面到SEO垃圾邮件或者其它内容。如果您拥有一个小型网站&#xff0c;很容易相信黑客不会对它感兴趣。不幸的是&#xff0c;通常情况并非如此。 黑客入侵网站的动机与所…

书籍推荐|经典书籍ic书籍REUSE METHODOLOGY MANUALFOR等和verilog网站推荐(附下载)

大家好&#xff0c;今天是51过后的第一个工作日&#xff0c;想必大家都还没有完全从节假日的吃喝玩乐模式转变为勤勤恳恳的打工人模式&#xff0c;当然也包括我&#xff0c;因此这次更新主要是分享几篇书籍和verilog相关的学习网站~ 首先是一本数字电路相关的基础书籍&#xf…

深入理解Docker容器镜像

深入理解Docker容器镜像 1 容器是什么&#xff1a;特殊的进程 容器其实是一种沙盒技术。顾名思义&#xff0c;沙盒就是能够像一个集装箱一样&#xff0c;把你的应用“装”起来的技术。这样&#xff0c;应用与应用之间&#xff0c;就因为有了边界而不至于相互干扰&#xff1b;而…

流量分析。

流量分析 在Wireshak抓包可以看到正常的执行流程如下&#xff1a; ● Client向Server发起Load data local infile请求 ● Server返回需要读取的文件路径 ● Client读取文件内容并发送给Server ● PS&#xff1a;在本机上启动服务端与客户端&#xff0c;启动wireshark 抓包&…