Ansible:定义命令何时不必运行(从源代码构建ruby)

前端之家收集整理的这篇文章主要介绍了Ansible:定义命令何时不必运行(从源代码构建ruby)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是我的剧本中负责从源代码下载和构建 ruby的部分:
  1. vars:
  2. ruby_version: '2.0.0-p247'
  3. ruby_url: 'ftp://ftp.ruby-lang.org//pub/ruby/2.0/ruby-{{ ruby_version }}.tar.gz'
  4.  
  5. tasks:
  6.  
  7. - name: Ensure ruby dependencies are installed
  8. apt: pkg=$item state=installed update-cache=yes
  9. sudo: yes
  10. with_items:
  11. - build-essential
  12. - git-core
  13. - libreadline6-dev
  14. - libyaml-dev
  15. - libsqlite3-dev
  16. - sqlite3
  17. - libgdbm-dev
  18. - libncurses5-dev
  19. - libtool
  20. - bison
  21. - libffi-dev
  22. - libdigest-hmac-perl
  23. - unzip
  24. - zlib1g
  25. - zlib1g-dev
  26.  
  27. - name: Ensure the ruby source is downloaded
  28. get_url: url=$ruby_url dest=/home/vagrant/ruby-{{ ruby_version }}.tar
  29.  
  30. - name: Ensure the ruby source is extracted
  31. command: tar -zxf /home/vagrant/ruby-$ruby_version.tar creates=/home/vagrant/ruby-{{ ruby_version }}
  32.  
  33. - name: Ensure ruby is installed
  34. command: $item chdir=/home/vagrant/ruby-$ruby_version
  35. with_items:
  36. - ./configure
  37. - make
  38. - sudo make install

最后一项任务(configure make和make install)在每次配置时运行.

我可以检查ruby是否已经使用ruby -v安装了正确的版本.如何在我的剧本中定义这是运行此步骤的条件?

另外,有没有办法让这个条件成为整个任务列表,而不仅仅是最后一个?

解决方法

您可以使用register task参数将ruby -v的结果保存到变量中,然后使用when task参数有条件地执行任务.

你的例子看起来像这样:

  1. vars:
  2. ruby_version: '2.0.0-p247'
  3. ruby_url: 'ftp://ftp.ruby-lang.org//pub/ruby/2.0/ruby-{{ ruby_version }}.tar.gz'
  4.  
  5. tasks:
  6.  
  7. - name: get currently installed ruby version
  8. command: ruby -v
  9. register: result
  10. ignore_errors: True
  11.  
  12. - name: Ensure ruby dependencies are installed
  13. apt: pkg={{ item }} state=installed update-cache=yes
  14. sudo: yes
  15. with_items:
  16. - build-essential
  17. - git-core
  18. - libreadline6-dev
  19. - libyaml-dev
  20. - libsqlite3-dev
  21. - sqlite3
  22. - libgdbm-dev
  23. - libncurses5-dev
  24. - libtool
  25. - bison
  26. - libffi-dev
  27. - libdigest-hmac-perl
  28. - unzip
  29. - zlib1g
  30. - zlib1g-dev
  31. when: result.rc !=0 or result.stdout.split()[1] != ruby_version
  32.  
  33. - name: Ensure the ruby source is downloaded
  34. get_url: url={{ ruby_url }} dest=/home/vagrant/ruby-{{ ruby_version }}.tar
  35. when: result.rc !=0 or result.stdout.split()[1] != ruby_version
  36.  
  37. - name: Ensure the ruby source is extracted
  38. command: tar -zxf /home/vagrant/ruby-{{ ruby_version }}.tar creates=/home/vagrant/ruby-{{ ruby_version }}
  39. when: result.rc !=0 or result.stdout.split()[1] != ruby_version
  40.  
  41. - name: Ensure ruby is installed
  42. command: $item chdir=/home/vagrant/ruby-{{ ruby_version }}
  43. with_items:
  44. - ./configure
  45. - make
  46. - sudo make install
  47. when: result.rc !=0 or result.stdout.split()[1] != ruby_version

您还可以将任务移动到单独的文件(例如,install_ruby_from_source.yaml),然后有条件地包含该文件

  1. vars:
  2. ruby_version: '2.0.0-p247'
  3. ruby_url: 'ftp://ftp.ruby-lang.org//pub/ruby/2.0/ruby-{{ ruby_version }}.tar.gz'
  4.  
  5. tasks:
  6.  
  7. - name: get currently installed ruby version
  8. command: ruby -v
  9. register: result
  10. ignore_errors: True
  11.  
  12. - include: /path/to/install_ruby_from_source.yaml
  13. when: result.rc !=0 or result.stdout.split()[1] != ruby_version

猜你在找的Ruby相关文章