分子测试似乎忽略了ansible.cfg的remote_tmp设置

2023-12-07

我正在尝试使用molecule测试一个非常基本的角色。

(venv) [red@jumphost docker-ops]$ cat roles/fake_role/tasks/main.yml
---
# tasks file for fake_role
- name: fake_role | debug remote_tmp
  debug:
    msg: "remote_tmp is {{ remote_tmp | default('not_set') }}"

- name: who am i
  shell:
    cmd: whoami
    register: whoami_output

- name: debug who am i
  debug:
    msg: "{{ whoami_output }}"

这是我的molecule.yml:

(venv) [red@jumphost docker-ops]$ cat roles/fake_role/molecule/default/molecule.yml
---
dependency:
  name: galaxy
driver:
  name: docker
# platforms:
#   - name: instance
platforms:
  - name: instance
    image: docker.io/pycontribs/centos:7
    pre_build_image: true
    privileged: true
    volume mounts:
      - "sys/fs/cgroup:/sys/fs/cgroup:rw"
    command: "/usr/sbin/init"
provisioner:
  name: ansible
verifier:
  name: ansible

当我运行 ansible 版本时,我可以看到我的 ansible.cfg 是/etc/ansible/ansible.cfg我设置了remote_tmp in it.

(venv) [red@jumphost fake_role]$ ansible --version
/home/red/GIT/venv/lib64/python3.6/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
  from cryptography.exceptions import InvalidSignature
ansible [core 2.11.12]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/red/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/red/GIT/venv/lib64/python3.6/site-packages/ansible
  ansible collection location = /home/red/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/russell.cecala/GIT/venv/bin/ansible
  python version = 3.6.8 (default, Oct 19 2021, 05:14:06) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
  jinja version = 3.0.3
  libyaml = True
(venv) [red@ajumphost fake_role]$ grep remote_tmp /etc/ansible/ansible.cfg
#remote_tmp     = ~/.ansible/tmp
remote_tmp     = /tmp

当我跑...

(venv) [red@jumphost docker-ops]$ cd roles/fake_role/
(venv) [russell.cecala@jumphost fake_role]$ molecule test

...我得到这个输出...

... lots of output ...
PLAY [Converge] ****************************************************************

TASK [Include red.fake_role] *****************************************
/home/red/GIT/venv/lib64/python3.6/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
  from cryptography.exceptions import InvalidSignature

TASK [brightpattern.fake_role : fake_role | debug remote_tmp] ******************
ok: [instance] => {
    "msg": "remote_tmp is not_set"
}

TASK [red.fake_role : who am i] **************************************
fatal: [instance]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.
In some cases, you may have been able to authenticate and did not have permissions on the
target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted 
in \"/tmp\", for more error information use -vvv. Failed command was: 
( umask 77 && mkdir -p \"` echo ~/.ansible/tmp `\"&& mkdir \"` echo ~/.ansible/tmp/ansible-tmp-1668100608.7567627-2234645-21513917172593 `\" && echo ansible-tmp-1668100608.7567627-2234645-21513917172593=\"` echo ~/.ansible/tmp/ansible-tmp-1668100608.7567627-2234645-21513917172593 `\" ), exited with result 1", 
"unreachable": true}

PLAY RECAP *********************************************************************
instance                   : ok=1    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
... a lot more output ...

为什么没有将remote_tmp 设置为/tmp?

UPDATE:

这是我的新 molecular.yml:

(venv) [red@ap-jumphost fake_role]$ cat molecule/default/molecule.yml
---
dependency:
  name: galaxy
driver:
  name: docker
platforms:
  - name: instance
    image: docker.io/pycontribs/centos:7
    pre_build_image: true
    privileged: true
    volume mounts:
      - "sys/fs/cgroup:/sys/fs/cgroup:rw"
    command: "/usr/sbin/init"
provisioner:
  name: ansible
  config_options:
    defaults:
      remote_tmp: /tmp
verifier:
  name: ansible

但我仍然遇到同样的错误:

(venv) [red@ap-jumphost fake_role]$ molecule test
...
INFO     Running default > prepare
WARNING  Skipping, prepare playbook not configured.
INFO     Running default > converge
[DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the
controller starting with Ansible 2.12. Current version: 3.6.8 (default, Oct 19
2021, 05:14:06) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]. This feature will be
removed from ansible-core in version 2.12. Deprecation warnings can be disabled
 by setting deprecation_warnings=False in ansible.cfg.

PLAY [Converge] ****************************************************************

TASK [Include red.fake_role] *****************************************
/home/red/GIT/venv/lib64/python3.6/site-packages/ansible/parsing/vault/__init__.py:44: CryptographyDeprecationWarning: Python 3.6 is no longer supported by the Python core team. Therefore, support for it is deprecated in cryptography and will be removed in a future release.
  from cryptography.exceptions import InvalidSignature

TASK [red.fake_role : fake_role | debug remote_tmp] ******************
ok: [instance] => {
    "msg": "remote_tmp is not_set"
}

TASK [red.fake_role : fake_role | debug ansible_remote_tmp] **********
ok: [instance] => {
    "msg": "ansible_remote_tmp is not_set"
}

TASK [red.fake_role : who am i] **************************************
fatal: [instance]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo /tmp `\"&& mkdir \"` echo /tmp/ansible-tmp-1668192366.5684752-2515263-14400147623756 `\" && echo ansible-tmp-1668192366.5684752-2515263-14400147623756=\"` echo /tmp/ansible-tmp-1668192366.5684752-2515263-14400147623756 `\" ), exited with result 1", "unreachable": true}

PLAY RECAP *********************************************************************
instance                   : ok=2    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0

WARNING  Retrying execution failure 4 of: ansible-playbook --inventory /home/red/.cache/molecule/fake_role/default/inventory --skip-tags molecule-notest,notest /home/red/GIT/docker-ops/roles/fake_role/molecule/default/converge.yml
CRITICAL Ansible return code was 4, command was: ['ansible-playbook', '--inventory', '/home/red/.cache/molecule/fake_role/default/inventory', '--skip-tags', 'molecule-notest,notest', '/home/red/GIT/docker-ops/roles/fake_role/molecule/default/converge.yml']

更容易阅读错误消息:

fatal: [instance]: UNREACHABLE! =>
  {"changed": false,
   "msg": "Failed to create temporary directory.In some cases, you may have been able to
           authenticate and did not have permissions on the target directory. Consider
           changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\",
           for more error information use -vvv.
           Failed command was: ( umask 77 && mkdir -p \"` echo /tmp `\"&& mkdir \"` echo /tmp/ansible-tmp-1668192366.5684752-2515263-14400147623756 `\" && echo ansible-tmp-1668192366.5684752-2515263-14400147623756=\"` echo /tmp/ansible-tmp-1668192366.5684752-2515263-14400147623756 `\" ), exited with result 1", "unreachable": true}

我确实注意到 ~/.cache/molecule/fake_role/default/ansible.cfg 文件确实设置了remote_tmp。

[defaults]
ansible_managed = Ansible managed: Do NOT edit this file manually!
display_failed_stderr = True
forks = 50
retry_files_enabled = False
host_key_checking = False
nocows = 1
interpreter_python = auto_silent
remote_tmp = /tmp
[ssh_connection]
scp_if_ssh = True
control_path = %(directory)s/%%h-%%p-%%r

分子自己产生ansible.cfg供其自己的测试使用,不会考虑任何全局或本地现有配置文件。

根据您的版本/配置,此文件是在以下位置创建的:

  • molecule/<scenario>/.molecule/ansible.cfg
  • /home/<user>/.cache/molecule/<role>/<scenario>/ansible.cfg.

查看该文件在您自己的平台上生成和使用的位置的最简单方法是在中运行 molecular--debug模式并检查输出ANSIBLE_CONFIG当前使用的变量。

现在不要尝试修改该文件,因为无论如何它都会在某个时候被覆盖。相反,您必须修改您的配置者环境molecule.yml.

下面是改编自的示例documentation针对您的具体情况。

provisioner:
  name: ansible
  config_options:
    defaults:
      remote_tmp: /tmp

您可以强制重新生成ansible.cfg通过运行为您的场景缓存文件(和其他分子缓存/临时资源)molecule reset

请注意文档链接中警告您某些内容的注释ansible.cfg配置变量被列入黑名单以保证分子功能并且不会被考虑在内

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

分子测试似乎忽略了ansible.cfg的remote_tmp设置 的相关文章

随机推荐

  • 按字符串的组成部分对字符串列表进行排序

    一个长列表包含一些要排序的元素 实际上每个元素有4个内容 名称 进 出 区域和日期 时间 以 连接 可以更改 我想将列表重新组织为排序顺序 a list Chris Check in Zoom A 11 13 2013 05 20 Chri
  • 禁用热链接或直接下载我的视频,并且仅在视频从我的网站页面显示时流式传输

    我想禁用盗链FLV and MP4托管在我的服务器上的视频 除非视频是从其 URL 所在的页面显示的以 开始 http www mywebsite com index php main page videos page 我必须添加到 hta
  • 强制洗牌 NSMutableArray

    我有一个名为 putNumberUsed 的 NSMutableArray 它包含以下对象 blah1 blah2 blah3 blah4 我想随机洗牌这些对象 例如 如果我选择 putNumberUsed objectAtIndex 0
  • 音频播放无法开始

    NSError err Initialize audio player audioPlayer AVAudioPlayer alloc initWithContentsOfURL url error err audioPlayer dele
  • 在Go中,删除指针映射的条目会导致内存泄漏吗?

    第一次来到这里 首先NOTE in 切片技巧表明在剪切或删除指针切片中的元素时存在潜在的内存泄漏问题 地图也是如此吗 例如 https play golang org p 67cN0JggWY 在从地图中删除之前我们应该清零该条目吗 就像这
  • android.app.Application 无法转换为 android.app.Activity

    我正在尝试改变一个LinearLayout来自另一个类 但是当我运行此代码时 public class IRC extends PircBot ArrayList
  • 如何响应演员调用的结果?

    我们正在考虑使用 Akka HTTP Java API 使用路由 DSL 不清楚如何使用路由功能来响应 HttpRequest 使用无类型 Akka Actor 例如 在匹配 Route 路径后 我们如何将请求传递给 处理程序 ActorR
  • 实体框架-使其只读? [复制]

    这个问题在这里已经有答案了 可能的重复 如何使实体框架数据上下文只读 是否有配置设置或简单的方法使实体 只读 我有一个数据访问层 该层与作为 CRM 解决方案后端的数据库相对应 我们不想 无意或故意 写入 CRM UI 之外的数据库 但我们
  • 如何将 int[] 类型转换为 int?[]

    我正在使用 linq 查询来输出 int 数组 但我需要将其传递给仅接受 int 的方法 因此 在搜索了将 int 转换为 int 的方法之后 我发现了一些似乎可行的方法here 以下代码是一个简化的示例 显示了哪些内容有效 哪些无效 us
  • 如何以编程方式在 Windows 8 开始屏幕上放置磁贴?

    我正在构建一个 Windows 商店应用程序 我希望该应用程序的磁贴位于我的开始屏幕的特定位置 是否有任何 API 可以对我的图块在开始屏幕上的位置进行编码 提前致谢 不 您无法控制图块的移动位置 这由用户决定 Windows 8 环境设计
  • 如何将heroku 上回形针的上传目录更改为/tmp?

    我需要上传文件 然后使用回形针解析它们 目前它上传到 system文件夹中 这在heroku中是不允许的 我不需要持久上传 我解析它然后存储它们 所以我希望能够保存到 tmp 中然后解析 然后让它稍后被吹走 关于如何做到这一点的想法 如果我
  • 如何在R中两个单词之间的文本上进行gsub?

    EDIT 我想放置一个 n在我的文本中特定的未知单词之前 我知道这个未知词第一次出现在我的文本中将会在 树 和 湖 之间 前任 文本 text 1 TreeRULakeSunWater 2 A B C D EDIT 树 和 湖 永远不会改变
  • 地图不适用于加载的 Obj

    这是我之前的问题的延续here 我只是尝试向该对象的每一侧应用不同的纹理 但什么也没有出现 没有控制台错误 我相信我正在按正确的顺序应用事物 这应该很简单 但过去一个小时我一直在努力解决这个问题 下面是一个代码示例 function onL
  • Google Apps - 使用昵称发送电子邮件

    我在 google apps u 中有一个电子邮件帐户 电子邮件受保护 它有一个昵称 电子邮件受保护 我可以从 发送电子邮件吗 电子邮件受保护 多谢 确实 Google Apps 支持从您拥有的任何电子邮件地址 包括昵称 发送邮件 登录您的
  • 了解多重索引

    所以我在 csv 中有一个这样的示例数据集 name team date score John A 3 9 12 100 John B 3 9 12 99 Jane B 4 9 12 102 Peter A 9 9 12 103 Josie
  • 如何使用 Ember Data 查找模型?

    相当于什么 App Person find age 30 in the 新的 Ember 数据 IE 如何根据属性获取记录数组 ember data 1 0 0 beta2 中的等效方法现在是 this store find person
  • Java 中的 Context 到底是什么? [复制]

    这个问题在这里已经有答案了 我用 Google 搜索了这个并阅读了 Java 文档 但我有点困惑 有人可以解释一下什么是Context是简单的英语吗 用编程术语来说 它是较大的周围部分 可以具有any对当前工作单元的行为的影响 例如 使用的
  • 不处理条件渲染组件中的表单提交

    我有一个带有表单的自定义标记文件
  • 如何解码gzip数据?

    我有一个变量data 变量的类型为 TIdBytes 变量包含一些用 gzip 编码的数据 如何解码这些数据 如果您想手动解码数据 请查看DecompressGZipStream 的方法TIdCompressorZLib组件 或TDecom
  • 分子测试似乎忽略了ansible.cfg的remote_tmp设置

    我正在尝试使用molecule测试一个非常基本的角色 venv red jumphost docker ops cat roles fake role tasks main yml tasks file for fake role name