为什么我的 Ansible 脚本不使用其最顶层目录归档文件?

2024-01-10

我正在编写一个 Ansible 脚本来根据文件类型、创建前的天数等来归档文件(及其目录结构)。为了选择文件类型,我正在使用find命令,然后将所有文件放入列表中(使用set_fact模块)。之后,我将此列表提供给存档模块archive.

但我的问题是,它总是不考虑我在源中给出的最顶层目录以将其存档在目的地。

tasks:

  - name: Recursively find directories/files which are older than given days
    find:
       paths: "{{ source }}"
       file_type: any
       patterns: "{{ type_file }}"
       age: "{{ days }}d"
       recurse: true
    register: output
  
  - block:

     - name: Archiving files/directories
       set_fact:
         files_to_archive: "{{ files_to_archive|default([]) + [ item.path ] }}"
       with_items: "{{ output.files }}"

     - archive:
         path: "{{ files_to_archive }}"
         dest: "{{ destination }}/backup.tar.gz"
         format: gz
         force_archive: yes

假设我有目录Dfile

Dfile
└── efile
    ├── 1.sh
    ├── 2.sh
    └── kfile
        └── mfile
            ├── 1.txt
            └── 2.txt

在此我想存档所有*.sh文件。所以在目的地输出是这样的

efile
    ├── 1.sh
    ├── 2.sh

这意味着它正在删除Dfile作为最顶层目录。

谁能告诉我这个 Ansible 脚本出了什么问题吗?我在目的地需要这样的输出

Dfile
└── efile
    ├── 1.sh
    ├── 2.sh

我将你的问题理解为

如何在通过 Ansible 归档的文件中强制使用绝对路径archive模块?怎么做archive模块的行为类似于tar命令?

一个最小的示例剧本

---
- hosts: test.example.com
  become: false
  gather_facts: false

  tasks:

  - name: Recursively find directories/files which are older than given days
    find:
      paths: "/home/{{ ansible_user }}/test/toarchive"
      file_type: file
      patterns: "*.sh"
      age: "0d"
      recurse: true
    register: output

  - name: Archiving files/directories
    set_fact:
      files_to_archive: "{{ files_to_archive | default([]) + [ item.path ] }}"
    loop_control:
      extended: true
      label: "{{ item.path }}"
    loop: "{{ output.files }}"

  - debug:
      msg: "{{ files_to_archive }}"

  - archive:
      path: "{{ files_to_archive }}"
      dest: "backup.tar.gz"
      format: gz
      force_archive: true

  - archive:
      path: "{{ files_to_archive }}"
      dest: "/home/{{ ansible_user }}/test/backup.tar.gz"
      format: gz
      force_archive: true

以绝对路径输出

TASK [debug] *****************************
ok: [test.example.com] =>
  msg:
  - /home/ansible-user/test/toarchive/2.sh
  - /home/ansible-user/test/toarchive/3.sh
  - /home/ansible-user/test/toarchive/1.sh

以及通过检查的存档文件如何查看里面的具体路径tar.gz? https://superuser.com/q/1337229/754490,给出的结果是

~/test$ tar tf ../backup.tar.gz
# or
~/test$ tar tf backup.tar.gz
1.sh
2.sh
3.sh
~/test$ tar tf ../backup.tar.gz /home/
# or
~/test$ tar tf backup.tar.gz
tar: /home: Not found in archive
tar: Exiting with failure status due to previous errors

更改为如下示例安西布尔:archive没有添加特定路径到存档 https://stackoverflow.com/a/71118191/6771046,行为仍然存在,创建的档案没有绝对路径,特别是根路径在每种情况下都丢失了。

总结一下

即使能够重现观察结果,我也不确定这是否是预期的行为。人们可能需要进一步调查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 Ansible 脚本不使用其最顶层目录归档文件? 的相关文章

  • Ansible设置mysql root密码

    你们中有人有想法构建一个 yml 用于 mysql 更新 root 密码并授予权限吗 我已经创建了我的剧本 并且在全新安装时它按预期工作 完全没有问题 但是 当我再次进行 vagrant 配置时 它现在无法设置 root 密码 并且出现错误
  • 如何删除或排除 Ansible 模板列表中的项目?

    我正在编写一个 Ansible 模板 需要生成主机组中的 IP 列表 排除当前主机IP 我在网上和文档中进行了搜索 但找不到任何允许您删除列表中项目的过滤器 我在下面创建了 hacky for循环来执行此操作 但想知道是否有人知道这样的过滤
  • 如何使用 Ansible 在远程文件中搜索字符串?

    基于一个问题 如何使用 Ansible 在文件中搜索字符串 https superuser com a 1764857 754490 Ansible 如何从文件内容中提取特定字符串 https stackoverflow com a 750
  • 从 dict 列表中删除一个项目并分割 stdout_lines

    我试图从字典列表中删除一个项目 即 未找到结果 的项目 validar LPARNAME No results were found LPARNAME server1 server2 server4 LPARNAME server3
  • 从 Ansible 中的自定义模块访问 playbook 变量[重复]

    这个问题在这里已经有答案了 我正在 Ansible 中编写一个特定于 Playbook 的自定义模块 是否可以直接访问剧本变量 而不需要将其作为参数传递给任务 这是不可能的 因为模块是远程执行的 除非显式传递 否则所有变量都不可用 我有同样
  • 在 Ansible 中将 Python 脚本的输出转换为 dict

    我有一个名为test py这是 usr bin python a A 2 nB 5 print a 现在 在我的 Ansible 剧本中 我正在运行此脚本并使用此任务将输出注册到变量 name Create variable from th
  • jenkins 管道中的该模块需要 boto3 和 botocore

    我正在尝试通过 jenkins groovy 脚本运行 ansible playbook 但不断收到错误 boto3 is required 我已经安装了 boto3 pip list boto grep boto boto3 1 20 3
  • 即使在开始时已经输入,Ansible 同步也会提示密码

    Ansible v1 6 5 的同步模块提示输入密码 Enter passphrase for key 尽管我一开始就已经输入了运行剧本 知道为什么吗 我使用以下选项运行我的剧本 u myuser ask sudo pass private
  • 将事实收集到事实缓存的最快方法

    我正在尝试让 Ansible 与 limit 一起工作 为此我需要有关其他主机的事实 我正在使用fact caching进行缓存 我应该运行什么命令 以便它只收集所有主机上的所有事实并缓存它们 而不运行任何任务 像这样的东西设置模块 htt
  • 无法在守护进程模式下运行 Ansible

    我可以运行 Ansible 像守护进程一样管理我的主机吗 例如 我有时会更改我的剧本 但我不想手动运行 ansible playbook main yml 请不要建议 crontab 有一个特定的点 我不能在生产服务器上使用 crontab
  • 如何从 Ansible 中的指定组中删除用户?

    我们假设user01定义了两个组 groupA and groupB 除了主要组之外 我可以将帐户添加到groupC 确保user01属于groupC using user name user01 groups groupC append
  • 带变量的 ansible regex_search

    如何在ansible playbook中使用正则表达式查找匹配项 其中变量出现在regex search争论 以下剧本在使用以下命令运行时找不到匹配项 ansible playbook playbook yml hosts localhos
  • 如何使用Vault在Ansible中运行playbook api

    我有一本带有Vault的剧本 我可以运行它 ansible playbook info yml ask vault pass 现在 我想在 Ansible 中运行我的 playbook api 答案在如何使用Vault在Ansible v2
  • Ansible 权限问题

    我正在尝试将当前用户添加到系统中的某个组 然后执行需要该组权限的命令 我的剧本是这样的 name Add this user to RVM group sudo true user state present name vagrant ap
  • 在 Ansible 中检查已安装的 yum 包/rpm 版本并使用它的最佳方法

    我已经在 CentOS 7 上尝试使用 Ansible 2 0 0 2 我试图从已安装的 rpm yum 软件包中获取版本 但在运行脚本时遇到警告消息 安塞布尔脚本 name Get version of RPM shell yum lis
  • 使用 Ansible 配置 EC2 实例时遇到问题

    我对如何使用 Ansible 启动 EC2 实例感到非常困惑 我正在尝试使用 ec2 py 库存脚本 我不确定应该使用哪一个 因为 Ansible 安装了三个 ansible lib ansible module utils ec2 py
  • Ansible 和硬件检查

    我必须使用 ansible 检查 Linux 机器上的不同硬件和配置元素 我完全不确定如何做到这一点 RAM 磁盘空间 DNS CPU 我知道我几乎可以找到我想要的所有事实都在 ansible 中 但我不明白如何使用它 例如 我必须检查 R
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 包含 contains 的 json 格式查询

    我在 ansible 中有以下 json 输出 active transaction null cores 4 hostname alpha auth wb01 active transaction null cores 4 hostnam
  • 如何在 Ansible 中运行 MySQL 查询

    我需要编写一个 Ansible 脚本来在 MySQL 数据库中执行 SQL 查询 这是我尝试过的 你能指导一下吗 hosts localhost tasks name retrive data command mysql u root h

随机推荐

  • (++i) 和 (i++) 之间的区别

    在 C 中我明白 i 应该返回一个引用i因为需要串联运算符 但我无法弄清楚的是 Why i 应该返回i按价值 谁能澄清一下 i 返回一个值 因为它返回的是old的价值i while i增加了1 其基本实现是 int i int old i
  • 转换素数[重复]

    这个问题在这里已经有答案了 可能的重复 帮助解决 SPOJ 的算法问题 https stackoverflow com questions 3221134 help with algorithm problem from spoj 遇到这个
  • 一个视图控制器用于多个 UITabBar 部分

    我目前正在开发一个简单的 iPhone 应用程序 使用 UITabBar 和表视图来显示数据 选项卡栏包含 8 个部分 每个部分包含相同的视图但使用不同的数据源 表视图的标题也不同 但除此之外视图是相同的 我想为每个视图使用相同的视图控制器
  • 列表命令在 xcode 中挂起

    我正在使用 Jenkins Xcode 插件 https wiki jenkins ci org display JENKINS Xcode Plugin https wiki jenkins ci org display JENKINS
  • WIX 安装程序无法从以前安装的 Windows 安装程序软件升级

    我正在为我们的软件创建一个 WIX 安装程序 现在在从以前的 Windows Installer 打包软件升级时遇到一些问题 出现问题之前的一件事是 从一个 WIX 打包软件升级到另一个 WIX 打包软件实际上工作正常 我能够卸载旧版本并安
  • 单击按钮时 Primefaces 在新选项卡中打开页面

    我有这个
  • 如何在html中按下按钮时显示图像?

    我认为做这样的事情会起作用 但我很困惑为什么当样式一开始隐藏图像但按下按钮时不显示它时却不起作用 这是代码 function showImg x document getElementById map img x style visibil
  • Pythontensorflowlite错误:无法设置张量:得到类型1的张量,但输入88的预期类型3

    我已将模型转换为tensorflow lite 但在编译时出现以下错误 这是我的代码 interpreter tf contrib lite Interpreter model path mnt ficusspain cqli tensor
  • 使用 PassportJS,如何将附加表单字段传递给本地身份验证策略?

    我正在使用 PassportJS 我想要提供的不仅仅是req body username and req body password我的身份验证策略 护照本地 我有 3 个表单字段 username password foo 我该如何访问r
  • Blueimp 文件上传在 IE 8 中没有任何反应

    我在一个项目中使用 blueimp 文件上传插件 在使用 IE8 时遇到了一些困难 主要是没有任何反应 我的设置尽可能接近插件演示设置 文件以相同的顺序包含 html 结构仅略有不同 css 相同等 在其他浏览器 ie9 中 一切都按预期工
  • 无法更改 rbenv 全局 ruby​​ 版本

    我最近从 RVM 切换到 rbenv 尽管 rbenv versions 告诉我我有想要切换到的版本 但我似乎无法在 ruby 版本之间切换 这就是我正在做的事情 ruby v ruby 1 8 7 2012 02 08 patchleve
  • 为什么照片应用程序未显示在设备上的文档提供程序扩展中?

    我正在应用程序中选择照片 我已经使用过UIDocumentMenuViewController显示文档提供者的扩展名列表 此列表显示 Dropbox iCloud GoogleDrive 但不显示本机照片应用程序 为什么 我的代码示例 UI
  • 媒体源 Api 不适用于自定义 webm 文件(Chrome 版本 23.0.1271.97 m)

    我指的是对此给出的媒体源 api 演示link http html5 demos appspot com static media source html 它对于给定的测试 webm 文件工作正常 但是当我尝试将文件名更改为自定义 webm
  • 如何调试 spring 集成

    我们对 spring 集成非常满意 除非事情没有按预期工作 那么真的很难找出到底发生了什么 我们使用的是xml配置 有人可以向我指出 spring 集成组件背后的 java 组件以便调试它们 例如 如果我有一个 headerValueRou
  • 我应该如何随机生成异常值?

    我正在生成一个随机数据集 我的数据集是连续的 并且有上限和下限 在某些随机点 我希望我的数据集具有高于和低于限制的异常值 这是我的代码 generated data 12 np random rand 100 630 outlier dat
  • 由不受信任的机构颁发的证书链

    我正在使用curl 终端并发出以下命令 curl anyauth user admin admin https localhost 8000 LATEST search q caesar 我收到以下警报 curl 77 schannel 下
  • Python JSONDecoder 自定义转译null类型

    在 python 中 JSONDecoder 默认将 null 转换为 None 如下所示 我怎样才能将 null gt None 的翻译更改为不同的内容 即 null gt 猫 class json JSONDecoder encodin
  • BigQuery 中的查询命中和自定义维度?

    我正在 BigQuery 中处理 GoogleAnalytics 数据 我想输出 2 列 特定事件操作 点击 和自定义维度 基于会话 所有这一切 都使用标准 SQL 我不知道如何正确地做到这一点 文档也没有帮助 请帮我 这就是我正在尝试的
  • 最长正和子串

    我想知道如何获得序列中最长的正和子序列 例如 我有 6 3 4 4 5 所以最长的正子序列是 3 4 4 事实上 总和是正数 3 我们不能添加 6 和 5 否则它会变成消极的 它可以很容易地在 O N 2 中解决 我认为可能存在更快的东西
  • 为什么我的 Ansible 脚本不使用其最顶层目录归档文件?

    我正在编写一个 Ansible 脚本来根据文件类型 创建前的天数等来归档文件 及其目录结构 为了选择文件类型 我正在使用find命令 然后将所有文件放入列表中 使用set fact模块 之后 我将此列表提供给存档模块archive 但我的问