Ansible权限问题

bre*_*dan 8 linux bash shell rvm ansible

我正在尝试将当前用户添加到系统中的组,然后执行需要该组权限的命令.我的剧本是这样的:

- name: Add this user to RVM group
  sudo: true
  user: state=present name=vagrant append=yes groups=rvm group=rvm
- name: Install Ruby 1.9.3
  command: rvm install ruby-1.9.3-p448 creates=/usr/local/rvm/bin/ruby-1.9.3-p448
Run Code Online (Sandbox Code Playgroud)

问题是所有这一切都发生在同一个shell中.vagrant的shell尚未使用新组进行更新.是否有一种干净的方式来刷新用户在Ansible中的当前组?我想我需要让它重新连接或打开一个新的shell.

但是我尝试打开一个新的shell,它只是挂起:

- name: Open a new shell for the new groups
  shell: bash
Run Code Online (Sandbox Code Playgroud)

当然它挂了:这个过程永远不会退出!

与newgrp相同

- name: Refresh the groups
  shell: newgrp
Run Code Online (Sandbox Code Playgroud)

因为它基本上做同样的事情.

有任何想法吗?

bre*_*dan 4

阅读手册。

这里的解决方案是对“命令”或“shell”模块使用“可执行”参数。

所以我尝试使用命令模块,如下所示:

- name: install ruby 1.9.3
  command: rvm install ruby-1.9.3-p448 executable=/bin/bash creates=/usr/local/rvm/bin/ruby-1.9.3-p448
  ignore_error: true
Run Code Online (Sandbox Code Playgroud)

但剧本却无限期地搁置了。手册指出

如果您想通过 shell 运行命令(假设您正在使用 <、>、| 等),您实际上需要 shell 模块。命令模块更加安全,因为它不受用户环境的影响。

所以我尝试使用 shell 模块:

- name: install ruby 1.9.3
  shell: rvm install ruby-1.9.3-p448 executable=/bin/bash creates=/usr/local/rvm/bin/ruby-1.9.3-p448
  ignore_error: true
Run Code Online (Sandbox Code Playgroud)

它有效!