gpt4 book ai didi

linux - Ansible 和有条件的软件安装

转载 作者:太空宇宙 更新时间:2023-11-04 09:41:11 25 4
gpt4 key购买 nike

Ansible 非常适合推出(在我们的例子中是 JBoss)。剧本的一部分是:

- name: copy jboss-eap-6.2.0.tar.gz to server
action: copy src=jboss-eap-6.2.0.tar.gz
dest=/tmp/jboss-eap-6.2.0.tar.gz
owner=root
group=root

- name: Extracting jboss-eap-6.2.0.tar.gz
command: /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt

这就像一个魅力,除了它每次都有效,我希望 Ansible 在已经安装 JBoss 时停止剧本(在我们的例子中,测试是 /opt/jboss-eap-6.2. 0 确实存在。执行此操作的最巧妙方法是什么?您能否在 when 子句中测试目标服务器上是否存在某些内容?

最佳答案

如果您只想跳过命令执行,则创建 命令 的参数 module会解决你的问题。如果目标文件/目录已经存在,它指示模块跳过命令的执行。

这是一个例子:

- name: Extracting jboss-eap-6.2.0.tar.gz
command: creates=/opt/jboss_dir /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt

您的具体情况有点棘手。首先,您的存档可能无法在重启后继续存在,因为您正在复制到 /tmp,因此每次执行 playbook 时它都可能被复制。其次,可能需要引入一个额外的任务来检查 jboss 目录是否存在。

以下任务将:

  • 创建/opt/jboss_dir目录,如果它还不存在,这个任务的结果将存储在jbossDirectory变量
  • 如果 jbossDirectorychanged 状态,存档将被复制到 /tmp
  • 同样的changed状态也会导致提取存档

示例剧本:

- name: create jboss directory
file: state=directory dest=/opt/jboss_dir owner=root user=root
register: jbossDirectory

- name: copy jboss-eap-6.2.0.tar.gz to server
copy: src=jboss-eap-6.2.0.tar.gz dest=/tmp/jboss-eap-6.2.0.tar.gz owner=root group=root
when: jbossDirectory|changed

- name: extracti jboss-eap-6.2.0.tar.gz
command: /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt
when: jbossDirectory|changed

关于linux - Ansible 和有条件的软件安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21253338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com