簡體   English   中英

如何將一組任務分組到一個可用的劇本塊中?

[英]How to group set of tasks into a block in ansible playbook?

我正在創建一個用於配置構建系統的ansible playbook。 部分原因是我開始為CentOS編寫安裝java(開放JDK和Oracle JDK)的角色。 通過YUM包管理器可以打開JDK,因此在冪等方面沒有問題。 對於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

在Ansible 2.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,則可以使用新的“阻止”功能(請參閱此處的新功能演示文稿: http ://www.slideshare.net/jimi-c/whats-new-in-v2-ansiblefest-london -2015 )。 在1.x上,您可以將Java內容打包成一個角色,並對該角色執行“when”語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM