当前位置: 首页 > 知识库问答 >
问题:

如何动态覆盖Ansible.cfg中的默认变量?

查飞星
2023-03-14
- name: Copy archived file to target server and extract 
  unarchive:
    src: /path_to_source_dir/file.tar.gz  
    dest: /path_to_dest_dir
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 
remote_tmp = ~/.ansible/tmp
remote_tmp = /path_to_dest_dir/.ansible/tmp

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

清洁/家居对我来说不是一个选择。不幸的是,这里的答案对我来说不是很清楚。

共有1个答案

叶福
2023-03-14

有几种不同的方法来实现你想要做的事情。哪一个是偏好和您的用例的问题。

您找到了第一种方法,在运行Playbook之前设置一个环境变量。非常适合快速工作。每次运行某个剧本时都记得这样做确实很烦人。稍有变化的是使用environment关键字为播放设置该变量。还可以在角色、块或单个任务中设置环境变量。https://docs.ansible.com/ansible/devel/reference_appendices/playbooks_keywordes.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使用的shell的。默认情况下,Ansible使用sh。https://docs.ansible.com/ansible/latest/plugins/shell/sh.html

希望能有所帮助。自动化快乐。

 类似资料:
  • 我有一个RESTAPI,我不想强迫客户端发送请求参数。我有将近400个api方法,我不想将所有参数设置为“required=false” 我想覆盖Spring RequestParam的默认行为。我想将RequestParam接口的“required”属性的默认值设置为“false”。 有什么方法可以覆盖它吗?如果我不能或这不是最佳实践,有什么方法可以解决上述问题。

  • 问题内容: 我已经能够覆盖所有名称以“ android:”为前缀的主题,但是Android themes.xml还定义了似乎无法被覆盖的属性。例如: colorTheground是在Theme.Light xml中定义的,但是在此处添加它可以使我 错误。如何为整个应用程序覆盖该样式? 问题答案: 您可以用修改属性(如)的方式覆盖标准属性,只是不要忘记添加如下前缀:

  • 问题内容: 我想覆盖Java外观。我只想显示不同的按钮。 我想要Windows Look and Feel的所有功能,但仅按钮有所不同。希望你明白我的意思。 还告诉我如何制作圆形的JtabbedPane ??? 问题答案: 自定义GUI类 调用您的自定义GUI类

  • 问题内容: 我有一个模板与此: Django自动将此翻译为Terminarsesión西班牙语。但是,我想将其翻译为Cerrarsesión。 我试图将此文字添加到.po文件中,但是在编译消息时出现错误,指出该文字重复。 有没有一种方法可以更改/覆盖默认的Django翻译? 谢谢。 问题答案: 最简单的方法是收集在django.contrib.admin语言环境文件夹中找到的.po文件,然后重新编

  • 我目前正在做一个项目,在这个项目中,我们有一个jenkins实例与一个单独的网站并排运行,工作流程是这样的,用户需要点击网站中的链接,从而触发jenkins实例中的jenkins作业。 触发的jenkins作业有几十个参数,我们目前正在做的是,该网站将使用javascript构建一个如下URL: https://JENKINS_HOST/作业/JOB_NAME/build with Paramet

  • 我尝试定义一个默认的变量log4j.encodinglog4j2.xml: 我将其用作在运行时解析的变量: 此配置导致以下错误: 但是,当我使用非动态变量(即${sys:log4j.encoding},请注意单个$)时,配置成功,该变量在加载配置文件时计算一次。 默认值对动态变量不起作用是预期行为吗? 详细信息:定义PatternLayout的RollingFile由多个记录器使用。每次加载一个记