如何在ansible playbook中重新执行特定任务?

时间:2017-12-06 06:20:47

标签: apache ansible devops

我正在编写一个剧本来从源代码编译Apache-2.4。我想让剧本流程如下:

  1. 在/ usr / src中下载源包
  2. 将其解压缩到同一文件夹中。
  3. 现在,开始编译它。运行configure,make和make install。
  4. 如果最后一个进程由于依赖性问题而失败 - 比如apr或apr-util。调用处理程序并下载它们,将它们保存在/ usr / src / http-source / srclib / apr和/ usr / src / http-source / srclib / apr-util中。
  5. 第3步后,我想重试或重新执行第3步。如何在不重新开始新步骤的情况下实现这一目标?任何想法??

    这就是我的尝试: -

    [root@system1 myansible]# cat apache_compile_simple.yml.
    ---
    - hosts: system2*
      tasks:
       - name: Download the Apache source file
         get_url:
             url: http://www-us.apache.org/dist//httpd/httpd-2.4.29.tar.gz 
             dest: /usr/src/
         tags: download_source
       - name: Extract the source file 
         unarchive:
             src: /usr/src/httpd-2.4.29.tar.gz 
             dest: /usr/src/
             remote_src: yes
         tags: extract_source
       - name: Change the working directory
         command: chdir=/usr/src/httpd-2.4.29/ ./configure --prefix=/usr/local --with-included-apr
         register: proc_status
         ignore_errors: true
         changed_when: false
         tags: configure
       - name: check for depencies
         debug: msg=""
         notify:  
           - apr
           - apr-util
         changed_when: "proc_status.rc != 0"
         tags: check_dep
    
      handlers:  
       - name: Install_dependencies
         get_url: url={{ item }} dest=/usr/src/
         with_items:
          - http://www-eu.apache.org/dist//apr/apr-1.6.3.tar.gz  
          - http://www-eu.apache.org/dist//apr/apr-util-1.6.1.tar.gz
         listen: "apr" 
       - name: ex_apr_dir_exist
         file:
          path: /usr/src/httpd-2.4.29/srclib/apr
          mode: 755
          state: directory 
          listen: "apr"
       - name: Unarchive the apr build   
         unarchive:
            src: /usr/src/apr-1.6.3.tar.gz
            dest: /usr/src/httpd-2.4.29/srclib/apr
            remote_src: yes 
         listen: "apr" 
       - name: Make apr-util directory
         file:
          path: /usr/src/httpd-2.4.29/srclib/apr-util
          mode: 755
          state: directory
         listen: "apr-util"
       - name: Unarchive the apr-utils build
         unarchive:
           src: /usr/src/apr-util-1.6.1.tar.gz
           dest: /usr/src/httpd-2.4.29/srclib/apr-util
           remote_src: yes
         listen: "apr-util"

    我希望在处理程序完成后获得有关如何重新执行“configure apache”任务的想法。

1 个答案:

答案 0 :(得分:0)

看看Ansible's docs on reusable playbooks。要直接回答您的问题,您可以使用“cofigure apache”任务创建一个单独的文件,并使用resolved_at在主要的剧本和处理程序中重复使用相同的任务。

但是,我认为检查依赖项并在安装apache之前先安装它们会更有意义。处理程序用于当系统上的某些内容发生更改并需要后续操作时(即 - 服务x的配置已更改,重新启动服务x)。