Ansible和有条件的软件安装

时间:2014-01-21 08:56:19

标签: linux ansible ansible-playbook

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确实存在。最好的是什么这样做的方法?如果if子句中的目标服务器上存在某些东西,你能提供一个测试吗?

1 个答案:

答案 0 :(得分:2)

如果您只想跳过命令执行,则creates modulecommand参数可以解决您的问题。如果目标文件/目录已存在,它指示模块跳过命令的执行。

以下是一个例子:

- 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,因此您的存档可能无法重新启动,因此每次执行该剧本时都可能会复制它。其次,可能需要引入额外的任务来检查jboss目录是否存在。

以下任务将:

  • 创建/opt/jboss_dir目录(如果该目录尚不存在),此任务的结果将存储在jbossDirectory变量
  • 如果jbossDirectory状态为changed,则归档文件将被复制到/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