我正在为配置我们的构建系统创建一个可行的剧本。其中一部分我开始为CentOS编写安装java (open JDK和Oracle JDK)的角色。开放JDK可以通过YUM包管理器获得,因此没有幂等性问题。对于oracle Java,我需要下载,安装,符号链接它和清理。为了创建幂等,我正在寻找更简洁的方法,例如,这是我的代码。基本上,我正在检查一个符号链接,以确定是否安装了java,并注册一个变量,以便以后在WHEN模块中使用它。我不喜欢的是在安装jdk的四个步骤中都使用When语句。我如何将所有四个步骤(下载,安装,符号链接和清理)分组到一个块中,并使它们都基于一个when语句运行?
- name: Check if Java 8 is instaled
stat: path=~/java/oraclejdk8
register: oraclejdk8_sym
- name: Download Java 8
command: "wget --no-cookies -O {{ jdk_download_path }}/{{ oraclejdk8.jdk_rpm_file }} --no-check-certificate --header 'Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie' {{ oraclejdk8.jdk_rpm_url }}"
when: oraclejdk8_sym.stat.islnk is not defined
- name: Install Java 8
yum: name={{ java_archive }} state=present
when: oraclejdk8_sym.stat.islnk is not defined
- name: Symlink to ~/java/oraclejdk8
file: path=~/java/ state=directory mode=0755
command: "ln -s /usr/java/jdk{{ oraclejdk8.jdk_version }} ~/java/oraclejdk8"
when: oraclejdk8_sym.stat.islnk is not defined
- name: Clean up
file: state=absent path={{ jdk_download_path}}/{{ oraclejdk8.jdk_rpm_file }}
when: oraclejdk8_sym.stat.islnk is not defined
X,你可以这样做:
- name: Check if Java 8 is instaled
stat: path=~/java/oraclejdk8
register: oraclejdk8_sym
- block:
- name: Download Java 8
command: "wget --no-cookies -O {{ jdk_download_path }}/{{ oraclejdk8.jdk_rpm_file }} --no-check-certificate --header 'Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie' {{ oraclejdk8.jdk_rpm_url }}"
- name: Install Java 8
yum: name={{ java_archive }} state=present
- name: Symlink to ~/java/oraclejdk8
file: path=~/java/ state=directory mode=0755
- command: "ln -s /usr/java/jdk{{ oraclejdk8.jdk_version }} ~/java/oraclejdk8"
- name: Clean up
file: state=absent path={{ jdk_download_path}}/{{ oraclejdk8.jdk_rpm_file }}
when: oraclejdk8_sym.stat.islnk is not defined
如果你使用的是Ansible 2.0,你可以使用新的"block"特性(参见这里的新特性介绍:http://www.slideshare.net/jimi-c/whats-new-in-v2-ansiblefest-london-2015)。在1。X,您可以将Java的东西打包到一个角色中,并在角色上执行"when"语句。