Linux 软件的可拆卸和有条件安装

Linux 软件的可拆卸和有条件安装,linux,ansible,ansible-playbook,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 jbos

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子句中提供一个测试,如果目标服务器上存在什么吗?

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

下面是一个例子:

- 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
    变量中
  • 如果
    jbossDirectory
    已更改
    状态,则存档将复制到
    /tmp
  • 相同的
    更改
    状态也将导致提取存档
示例剧本:

- 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