Linux 软件的可拆卸和有条件安装
Ansible非常适合推广(在我们的案例中是JBoss)。剧本的一部分是: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
- 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