使用Ansible stat模块检查目录是否存在

news/2024/9/18 11:08:01/ 标签: ansible, 服务器

使用Ansible stat模块检查目录是否存在或者是否为一个目录还是文件

理论知识

在Ansible中,你可以使用stat模块来检查一个目录是否存在。stat模块可以用来获取文件或目录的状态信息,包括它是否存在。下面是一个简单的例子,说明如何使用stat模块来检查一个目录是否存在:

- name: Check if a directory existsstat:path: /path/to/directoryregister: directory_stat- name: Print a message depending on the existence of the directorydebug:msg: "Directory exists"when: directory_stat.stat.exists and directory_stat.stat.isdir- name: Print an alternative message if the directory does not existdebug:msg: "Directory does not exist or is not a directory"when: not directory_stat.stat.exists or not directory_stat.stat.isdir

在这个例子中:

  • stat模块被用来获取指定路径的状态。
  • 使用register关键字将结果存储到directory_stat变量中。
  • 在第一个debug任务中,我们检查目录是否存在并且是一个目录(isdirTrue)。
  • 在第二个debug任务中,如果目录不存在或者不是一个目录,则打印一条消息。

这个方法确保了不仅检查路径的存在性,还确认了该路径确实是一个目录。如果需要进一步确认目录的状态(例如权限、所有者等),可以通过directory_stat.stat访问更多的属性。

记得将/path/to/directory替换为你想要检查的实际目录路径。


例子懂得多

在使用中遇到了一下问题,记录一下:
playbook包含一下内容:

---
- name: test how 'stat' work herehosts: webserverstasks:- name: Check ssl cert dirstat:path: /etc/httpd/conf.d/sslregister: dir_status- name: The status of diransible.builtin.debug:var: dir_status- name: If Directory not existansible.builtin.file:path: "{{ ssl_cert_dir }}"state: directorywhen: not dir_status.stat.isdir

比如检查此目录/etc/httpd/conf.d/ssl是否存在于server上,当这个目录不存在的时候,
在这里插入图片描述
执行playbook这个会有下面的错误:

TASK [Check ssl cert dir] ******************************************************
ok: [serverb.lab.example.com]TASK [If Directory not exist] **************************************************
fatal: [serverb.lab.example.com]: FAILED! => {"msg": "The conditional check 'not dir_status.stat.isdir' failed. The error was: error while evaluating conditional (not dir_status.stat.isdir): 'dict object' has no attribute 'isdir'\n\nThe error appears to be in '/home/student/control-review/playbook.yml': line 37, column 11, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n        - name: If Directory not exist\n          ^ here\n"}

在这里插入图片描述
按照理论来说xx.stat.isdir应该是没语法问题可以正常使用的,但是这个确保错了,说’dict object’ has no attribute ‘isdir’…

然后从debug中我们就知道问题了, 确实dir_status的stat中没有isdir属性,只有一个existsfalse
在这里插入图片描述
当我们创建一个对应的ssl目录出来时:
在这里插入图片描述
再次运行playbook,会看到
在这里插入图片描述
在这里插入图片描述
这里可以看到exists变为了true,并且我们有了更多的属性,其中就包括了isdir,这就得出了一个小结论:
不要上来就直接用 dir_status.stat.isdir, 而应该用dir_status.stat.exists 先判断一下文件/目录是否存在,然后再来判断是否为目录。


http://www.ppmy.cn/news/1519564.html

相关文章

OpenCV4深度神经网络DNN实战教程

OpenCV4深度神经网络DNN实战教程 1-概述与环境配置2-卷积神经网络概述3-加载网络模型与设置3.1 所需的模型下载3.2 所使用的模型(googlenet)3.3 Net介绍3.4 代码输出网络结构信息3.5 计算后台设置3.6 所有代码 4-图像分类网络inception的使用5-读取分类标…

NLP从零开始------15.文本中阶序列处理之语言模型(3)

4. 注意力机制 4.1 注意力机制 循环神经网络的一个主要局限是不能很好地建模长距离依赖,即使像长短期记忆这样的变体也只是改善而不是完全解决了长距离依赖的问题。其根本原因在于,如果序列中的第i个词需要对第j个词(假设j>i)产生影响,需…

024、架构_资源_主机

摘要 在主机管理界面,可查看 GoldenDB 使用的主机信息,可对主机执行新增、编辑、删除操作。 主机列表 选择菜单[资源管理→主机管理],进入主机列表界面。 新增主机(单个、批量) 新增主机流程: 添加

Gradio学习——图像流输出

对于在后端实时获取的视频帧,经过图像处理函数处理后,需要不停的返回给前端。由于不是固定的视频,无法用gr.Video()方法,那利用gradio应该怎么处理?方法如下: import gradio as gr import time import cv2…

CS224W—07 Machine Learning with Heterogeneous Graphs

CS224W—07 Machine Learning with Heterogeneous Graphs 本节中,我们将学习如何在异构图中进行图神经网络学习。 Heterogeneous Graphs 图中的节点类型/边类型不同,就会形成一个异构图(Heterogeneous Graph),例如下…

情侣日记2.0.0_多种姿势卡_增进情侣感情必备工具

一款专门为情侣互动、增进感情而开发的一款软件;乐趣激情的游戏互动让你和ta的感情快速升温、拉近彼此的距离;恋爱话术技巧、享受甜蜜热恋;真心话大冒险、激情骰子、情侣飞行棋,享受生活小情趣! 链接:http…

TensorFlow创建回归神经网络及Optimizer优化器

一.TensorFlow创建神经层 如图所示,通过该神经网络识别动物猫或狗,共包括输入层(Input Layer)、隐藏层3层(Hidden Layer)和输出层(Output Layer)。其中每个隐藏层神经元都有一个激励…

开学季儿童护眼台灯怎么选择?盘点央视公布十大护眼灯!

随着年级的升高和学习内容的增加,学生的休闲娱乐时间逐渐减少,相反,他们在书桌前度过的时间却越来越多。近年来,由于电子产品的广泛使用,我国青少年的用眼负担显著增加。据权威机构预测,到2050年&#xff0…

windows下安装docker操作步骤

因为最近dockerb被封,下载资源太不方便了,所以还是自己本地安装上docker吧 下载的地址一定不要找错,是这里 https://docs.docker.com/desktop/install/windows-install/ 电脑--“控制面板”--“程序与功能”--开启windows功能 “Hyper-V”…

实战docker第一天——windows安装docker,测试,并解决被墙办法

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其所有依赖项打包在一个名为“容器”的单独环境中,从而确保应用程序在任何环境下都能一致地运行。以下是 Docker 的一些核心概念及其意义: 容器化:Docker 通过将应用程序及…

vrrp协议,主备路由器的选举

当VRRP备份组中的所有备份路由器(BACKUP)具有相同的优先级时,选举新的主路由器(MASTER)的过程将基于以下规则: IP地址优先:如果备份路由器的优先级相同,那么具有最高IP地址的路由器…

鱼哥好书分享活动第30期:一本书看完教你学习如何做B端竞品分析?《有效竞品分享》

鱼哥好书分享活动第30期:一本书看完教你学习如何做B端竞品分析?《有效竞品分享》 01 明确目标:案例分享:案例背景: 02 选择竞品:2.1 竞品的分类2.2 如何找到B端的竞品?1.找售前/销售沟通。2.各个…

C#护照查验接口集成示例、护照文字识别、外国人身份认证

护照查验是对护照有效性、真实性和符合相关出入境要求的确认过程。护照作为跨国旅行的重要身份证明文件,其查验是国际旅行中的一个必要程序。护照查验接口,支持查验出入境管理局签发护照的真伪,接口集成,简单高效便捷。 C#护照查验…

闲置物品|基于SprinBoot+vue的校园闲置物品交易平台(源码+数据库+文档)

校园闲置物品交易平台 目录 基于SprinBootvue的校园闲置物品交易平台 一、前言 二、系统设计 三、系统功能设计 5.1系统功能实现 5.2管理员模块实现 5.3用户模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xf…

Vue59 github案例 vue-resource版本

代码 List.vue <template><div class"row"><!-- 展示用户列表 --><div v-show"info.users.length" class"card" v-for"user in info.users" :key"user.login"><a :href"user.html_url&qu…

uniapp 生成H5 返回上一页 事件不执行

uniapp 生成H5 返回上一页事件不执行 背景&#xff1a;想根据返回的页面判断是否再返回一页 解决办法&#xff1a;uniapp&#xff0c;H5是先执行方法再返回&#xff0c;所以给事件增加延迟调用&#xff0c;如下代码 // 监听返回 onBackPress(e) {let pages getCurrentPages(…

数据结构(6.4_3)最短路径问题_Dijkstra算法

BFS的局限性 Dijkstra算法 1、 2、 3、 4、 如何使用数组信息 Dijkstra算法的时间复杂度 对比&#xff1a;Prim算法的实现思想 用于负权值带权图

docker实战基础三(Docker基础命令)

Docker 实战案例:构建镜像、查看容器运行信息、查看镜像构建信息 在这个实战案例中,我们将详细介绍如何构建Docker镜像、查看容器运行信息以及查看镜像构建信息。这些知识点非常实用,可以帮助你在实际工作中更好地利用Docker进行开发和运维。 一、构建Docker镜像 1. 创建…

【C++】C++STL 揭秘:Strng背后的底层逻辑

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇 在上篇介绍string类的使用与理解&#xff0c;本篇将为大家来带关于string的底层实现逻辑&#xff0c;当然这不是一定库里面的实现逻辑。我们设计一个string…

Android13 动态控制状态栏和导航栏

前言 在Android系统中,状态栏(StatusBar)、导航栏(NavigationBar)以及下拉菜单(通常称为Notification Shade或Quick Settings Panel)构成了用户界面不可或缺的三个元素,它们共同为用户提供了丰富的信息显示与便捷的交互体验。具体而言,状态栏实时展示着时间、电池电量…