加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 04:29:06 所属栏目:百科 来源:网络整理
导读:以下是我的剧本中负责从源代码下载和构建 ruby的部分: vars: ruby_version: '2.0.0-p247' ruby_url: 'ftp://ftp.ruby-lang.org//pub/ruby/2.0/ruby-{{ ruby_version }}.tar.gz' tasks: - name: Ensure ruby dependencies are installed apt: pkg=$item stat
以下是我的剧本中负责从源代码下载和构建 ruby的部分:
vars:
    ruby_version: '2.0.0-p247'
    ruby_url: 'ftp://ftp.ruby-lang.org//pub/ruby/2.0/ruby-{{ ruby_version }}.tar.gz'

  tasks: 

  - name: Ensure ruby dependencies are installed
    apt: pkg=$item state=installed update-cache=yes
    sudo: yes
    with_items:
      - build-essential
      - git-core
      - libreadline6-dev
      - libyaml-dev
      - libsqlite3-dev
      - sqlite3
      - libgdbm-dev
      - libncurses5-dev
      - libtool
      - bison
      - libffi-dev
      - libdigest-hmac-perl
      - unzip
      - zlib1g
      - zlib1g-dev

  - name: Ensure the ruby source is downloaded
    get_url: url=$ruby_url dest=/home/vagrant/ruby-{{ ruby_version }}.tar

  - name: Ensure the ruby source is extracted
    command: tar -zxf /home/vagrant/ruby-$ruby_version.tar creates=/home/vagrant/ruby-{{ ruby_version }}

  - name: Ensure ruby is installed
    command: $item chdir=/home/vagrant/ruby-$ruby_version
    with_items:
      - ./configure
      - make
      - sudo make install

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

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

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

解决方法

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

你的例子看起来像这样:

vars:
    ruby_version: '2.0.0-p247'
    ruby_url: 'ftp://ftp.ruby-lang.org//pub/ruby/2.0/ruby-{{ ruby_version }}.tar.gz'

  tasks:

  - name: get currently installed ruby version
    command: ruby -v
    register: result
    ignore_errors: True

  - name: Ensure ruby dependencies are installed
    apt: pkg={{ item }} state=installed update-cache=yes
    sudo: yes
    with_items:
      - build-essential
      - git-core
      - libreadline6-dev
      - libyaml-dev
      - libsqlite3-dev
      - sqlite3
      - libgdbm-dev
      - libncurses5-dev
      - libtool
      - bison
      - libffi-dev
      - libdigest-hmac-perl
      - unzip
      - zlib1g
      - zlib1g-dev
    when: result.rc !=0 or result.stdout.split()[1] != ruby_version

  - name: Ensure the ruby source is downloaded
    get_url: url={{ ruby_url }} dest=/home/vagrant/ruby-{{ ruby_version }}.tar
    when: result.rc !=0 or result.stdout.split()[1] != ruby_version

  - name: Ensure the ruby source is extracted
    command: tar -zxf /home/vagrant/ruby-{{ ruby_version }}.tar creates=/home/vagrant/ruby-{{ ruby_version }}
    when: result.rc !=0 or result.stdout.split()[1] != ruby_version

  - name: Ensure ruby is installed
    command: $item chdir=/home/vagrant/ruby-{{ ruby_version }}
    with_items:
      - ./configure
      - make
      - sudo make install
    when: result.rc !=0 or result.stdout.split()[1] != ruby_version

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

vars:
    ruby_version: '2.0.0-p247'
    ruby_url: 'ftp://ftp.ruby-lang.org//pub/ruby/2.0/ruby-{{ ruby_version }}.tar.gz'

  tasks:

  - name: get currently installed ruby version
    command: ruby -v
    register: result
    ignore_errors: True

  - include: /path/to/install_ruby_from_source.yaml
    when: result.rc !=0 or result.stdout.split()[1] != ruby_version

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读