【问题标题】:How to overwrite a default variable in ansible.cfg dynamically?如何动态覆盖 ansible.cfg 中的默认变量?
【发布时间】:2019-03-13 01:44:29
【问题描述】:

我有一个包含以下任务的剧本,必须将 2 Gb 文件从本地服务器复制到远程服务器并提取文件:

- name: Copy archived file to target server and extract 
  unarchive:
    src: /path_to_source_dir/file.tar.gz  
    dest: /path_to_dest_dir

此任务失败,因为 ansible 将文件复制到目标服务器上的 /home 挂载点并且那里没有足够的空间:

sftp> put /path_to_source_dir/file.tar.gz /home/my_user_name/.ansible/tmp/ansible-tmp-1551129648.53-14181330218552/source  
scp: /home/my_user_name/.ansible/tmp/ansible-tmp-1551129648.53-14181330218552/source: No space left on device 

之所以这样,是因为ansible.cfg有一个默认参数:

remote_tmp = ~/.ansible/tmp

如何从剧本中覆盖此参数(如果可能)并使ansible将文件复制到任务中指定的相同目标目录?所以它会是这样的:

remote_tmp = /path_to_dest_dir/.ansible/tmp

对于不同的目标服务器,目标路径每次都会不同!

清洁 /home 不是我的选择。 不幸的是,答案here 对我来说不是很清楚。

【问题讨论】:

  • 您可以在清单文件或 group_vars 目录中使用 ansible_remote_tmp 为特定主机或主机组 (more info) 指定 remote_tmp

标签: ansible ansible-2.x


【解决方案1】:

有几种不同的方法可以实现您想要做的事情。哪一个取决于您的偏好和用例。

您找到了第一种方法,即在运行 playbook 之前设置环境变量。非常适合快速的即时工作。每次运行某个剧本时都要记住这样做确实很烦人。一个轻微的变化是使用environment 关键字来设置该播放的变量。您还可以在角色、块或单个任务中设置环境变量。 https://docs.ansible.com/ansible/devel/reference_appendices/playbooks_keywords.html?highlight=environment%20directive。以下是它的使用示例:https://docs.ansible.com/ansible/devel/reference_appendices/faq.html?highlight=environment

在 play et al 中使用 environment 关键字非常适合特定的自动化应用,但如果您希望 Ansible 始终为特定服务器使用不同的远程 tmp 路径怎么办?像所有变量一样,remote_tmp 可以来自清单主机和组变量,而不仅仅是配置文件或环境变量。如果它被设置在不同的地方,你需要注意你的可变优先级。有了这个,您可以在您的清单中为该主机或一组主机设置remote_tmp。 Ansible 将始终为该组中的一个或多个主机使用该路径,而无需在每个角色或角色中定义它。如果您需要更改该路径,您可以在您的库存中更改它,它会更改所有 playbook 运行的行为,而无需进行任何额外的编辑。这是一个在静态清单中用作主机变量的示例:https://docs.ansible.com/ansible/devel/reference_appendices/faq.html?highlight=remote_tmp#running-on-solaris

因此,虽然在主机上“动态”设置远程 tmp 目录的具体问题本身并不是最佳实践主题,但它确实成为了在 Ansible 中充分利用变量的最佳实践示例。

作为参考,远程临时目录由 shell 插件处理。虽然许多参数是共享的,但还有一些特定于外壳 Ansible 使用的参数。 Ansible 默认使用shhttps://docs.ansible.com/ansible/latest/plugins/shell/sh.html

希望对您有所帮助。快乐的自动化。

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2018-09-17
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多