0

使用:Mac OS X 10.11.5、ansible 2.0.1.0、Python 2.7.11。Ubuntu Xenial LTS(Vagrant 1.8.1 和 VirtualBox 版本 5.0.16 r105871)作为遥控器。

我正在尝试使用 Ansible 将新的 gemset 设置为默认值,如下所示:

    ---
    # file: roles/ruby-gemset/tasks/main.yml

    - name: RVM | check if the bwv gemset needs to be set default.
      command: rvm list gemsets
      register: gemset_needs_an_update
      environment:
        PATH: "{{ rvm_path }}:{{ ansible_env.PATH }}"
        GEM_HOME: "/usr/local/rvm/gems/ruby-{{ ruby_version }}"
        GEM_PATH: "/usr/local/rvm/gems/ruby-{{ ruby_version }}@bwv:/usr/local/rvm/gems/ruby-{{ ruby_version }}@global"
      changed_when: gemset_needs_an_update.stdout.find('=> ruby-{{ ruby_version }}@bwv') == -1

    - name: RVM | Create and use ruby-{{ ruby_version }}@bwv.
      command: "rvm use ruby-{{ ruby_version }}@bwv --create"
      environment:
        PATH: "{{ rvm_path }}:{{ ansible_env.PATH }}"
        GEM_HOME: "/usr/local/rvm/gems/ruby-{{ ruby_version }}@bwv"
        GEM_PATH: "/usr/local/rvm/gems/ruby-{{ ruby_version }}@bwv:/usr/local/rvm/gems/ruby-{{ ruby_version }}@global"
      when: gemset_needs_an_update.stdout.find('=> ruby-{{ ruby_version }}@bwv') == -1

    - name: RVM | Use ruby-{{ ruby_version }}@bwv gemset as default.
      command: "rvm use ruby-{{ ruby_version }}@bwv --default"
      environment:
        PATH: "{{ rvm_path }}:{{ ansible_env.PATH }}"
        GEM_HOME: "/usr/local/rvm/gems/ruby-{{ ruby_version }}@bwv"
        GEM_PATH: "/usr/local/rvm/gems/ruby-{{ ruby_version }}@bwv:/usr/local/rvm/gems/ruby-{{ ruby_version }}@global"
      when: gemset_needs_an_update.stdout.find('=> ruby-{{ ruby_version }}@bwv') == -1

这个想法是编写一个 Ansible 剧本,将可用的 ruby​​ gemset 安装到远程 Ubuntu 服务器。但由于某种原因,默认值根本没有改变。相反,这种情况一遍又一遍地发生:

    TASK [ruby-gemset : RVM | check if the bwv gemset needs to be set default.] ****
    changed: [xenial64]

    TASK [ruby-gemset : RVM | Create and use ruby-2.3.1@bwv.] **********************
    changed: [xenial64]

    TASK [ruby-gemset : RVM | Use ruby-2.3.1@bwv gemset as default.] ***************
    changed: [xenial64]

可以以某种方式使用 Ansible 到远程服务器来完成吗?我意识到那些环境行只帮助命令通过而不会失败,但现在几乎什么都不做。

4

2 回答 2

0

我发现使用这些[rvm do set][1]命令有助于绕过 Ansible 产生的最小 shell 环境。

- name: Set Default Gem Set
  shell: "/usr/local/rvm/bin/rvm {{ use_ruby_version}} do rvm use {{ rvm_default }} --default"
  args:
    chdir: "/home/{{ user_name }}"
  become: yes
  become_user: "{{ user_name }}"
  tags:
    - default_gemset

Ansible 变量:

  use_ruby_version: ruby-2.2.5
  current_gemset: foo
  rvm_default: "{{ use_ruby_version }}@{{ current_gemset }}"

运行 Ansible 2.1 Centos 7/bash

于 2016-08-03T19:20:25.570 回答
0

至少这似乎有效:

    ---
    # file: roles/ruby-gemset/tasks/main.yml

    - name: RVM | check if the bwv gemset needs to be set default.
      become_user: ubuntu
      command: bash -lc "rvm list gemsets"
      register: gemset_needs_an_update
      changed_when: gemset_needs_an_update.stdout.find('=> ruby-{{ ruby_version }}@bwv') == -1

    - name: RVM | Create and use ruby-{{ ruby_version }}@bwv.
      become_user: ubuntu
      command: bash -lc "rvm use ruby-{{ ruby_version }}@bwv --create"
      when: gemset_needs_an_update.stdout.find('=> ruby-{{ ruby_version }}@bwv') == -1

    - name: RVM | Use ruby-{{ ruby_version }}@bwv gemset as default.
      become_user: ubuntu
      command: bash -lc "rvm use ruby-{{ ruby_version }}@bwv --default"
      when: gemset_needs_an_update.stdout.find('=> ruby-{{ ruby_version }}@bwv') == -1
于 2016-05-24T20:45:33.103 回答