【问题标题】:ansible-galaxy role fails with "do not have permission to modify /etc/ansible/roles/"ansible-galaxy 角色因“无权修改 /etc/ansible/roles/”而失败
【发布时间】:2018-05-18 05:42:50
【问题描述】:

tl;dr = OS X 用户建议如何解决此权限错误?

我在 OS X 10.10.1 上,我最近安装了运行以下内容的 Ansible:

sudo pip install ansible --quiet
sudo pip install ansible --upgrade

我想从一个星系角色开始安装自制软件,然后运行这个,但出现以下错误:

$ ansible-galaxy install geerlingguy.homebrew
- downloading role 'homebrew', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-homebrew/archive/1.0.1.tar.gz
- extracting geerlingguy.homebrew to /etc/ansible/roles/geerlingguy.homebrew
- error: you do not have permission to modify files in /etc/ansible/roles/geerlingguy.homebrew
- geerlingguy.homebrew was NOT installed successfully.
- you can use --ignore-errors to skip failed roles.

虽然我看到 /etc 归 root 所有,但我在文档中没有看到任何说明我应该 chmod 任何东西。

供参考:

$ ansible --version
ansible 1.8.2
  configured module search path = None

这是预期的还是我的安装有问题?

【问题讨论】:

    标签: ansible osx-yosemite ansible-galaxy


    【解决方案1】:

    角色的默认位置是/etc/ansible/roles(对于版本 ~/.ansible/roles/、an issue has been raised)。使用ansible-galaxy时需要指定--roles-path。 ansible-galaxy install --help 是这样说的:

    -p ROLES_PATH, --roles-path=ROLES_PATH
        The path to the directory containing your roles. The
        default is the roles_path configured in your
        ansible.cfg file (/etc/ansible/roles if not
        configured)
    

    也可以在ansible.cfg中设置roles_path; see the documentation for details.

    【讨论】:

    • 感谢您的回答!我熟悉默认路径并且知道我可以重定向它。我的问题可以更清楚地表述为 OS X 上的人通常如何解决这个错误? 我想在每个星系或剧本调用上定义 --roles-path 会很烦人。必须有更聪明的方法。有什么建议吗?
    • 我的/etc/ansible/ansible.cfg 文件中有一个自定义roles_path,当前设置为我的主文件夹中的某个位置(例如roles_path = ~/dev/ansible/roles。(请参阅上面答案的最后一行)。如果你全局指定roles_path,您不必在命令行上指定它。
    • 您的第二个问题由ansible.cfg回答;按照链接设置正确的路径。
    【解决方案2】:

    或者您可以使用brew 安装ansible。为此,您需要运行:

    brew install ansible
    

    如果您之前有任何安装,您可能会看到如下消息:

    错误:brew link 步骤未成功完成公式 已构建,但未符号链接到 /usr/local 无法符号链接 bin/ansible 目标 /usr/local/bin/ansible 已经存在。你可能想要 删除它: rm '/usr/local/bin/ansible'

    强制链接并覆盖所有冲突文件:brew link --覆盖ansible

    列出所有将被删除的文件:brew link --overwrite --dry-run ansible

    可能的冲突文件是:/usr/local/bin/ansible /usr/local/bin/ansible-console /usr/local/bin/ansible-doc /usr/local/bin/ansible-galaxy /usr/local/bin/ansible-playbook /usr/local/bin/ansible-pull /usr/local/bin/ansible-vault

    所以,运行 brew link --overwrite ansible 来解决这个问题。现在您可以安装任何没有sudo 的角色。

    例子:

    » ansible-galaxy 安装 bennojoy.redis
    - 下载角色“redis”,由 bennojoy 拥有
    - 从https://github.com/bennojoy/redis/archive/master.tar.gz下载角色
    - 提取 bennojoy.redis 到 /usr/local/etc/ansible/roles/bennojoy.redis
    - bennojoy.redis 安装成功

    【讨论】:

      【解决方案3】:

      我看到你使用“sudo”安装 Ansible,我想继续使用“sudo”安装 ansible-galaxy 应该没问题。这就是我刚刚所做的。

      【讨论】:

      • 您还需要有可用于 root 的 ansible,默认情况下不可用。事实上,您的回答应该完全是评论。
      猜你喜欢
      • 1970-01-01
      • 2016-10-25
      • 2016-08-25
      • 1970-01-01
      • 2018-01-08
      • 2018-04-23
      • 2014-10-03
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多