如何强制 Ansible 使用 sudo 来安装包?

How to force Ansible to use sudo to install packages?

我有一个比 运行 角色更多的剧本,并使用具有 sudo 权限的用户登录服务器。问题是,当切换到这个用户时,我仍然需要使用 sudo 来安装软件包。

即:

sudo yum install httpd

然而,Ansible 似乎忽略了这一点,并会尝试在没有 sudo 的情况下安装软件包,这将导致失败。

Ansible 将 运行 以下内容:

yum install httpd

这是我使用的角色:

tasks:
  - name: Import du role 'memcacheExtension' 
    import_role:
      name: memcacheExtension
    become: yes
    become_method: sudo
    become_user: "{{become_user}}"
    become_flags: '-i'
    tags:
      - never
      - memcached

这是在我的上下文中失败的任务:

- name: Install Memcached
  yum:
    name: memcached.x86_64
    state: present

我是不是在错误的地方设置了sudo参数?还是我做错了什么?

提前致谢

使用 shell 模块代替 yum。

- name: Install Memcached shell: sudo yum install -y {{ your_package_here }}

不像使用模块那么酷,但它可以完成工作。

你的 become_user 没问题。如果你不使用它,你最终会尝试 运行 剧本中的命令,通过使用用于建立 ssh 连接的用户(ansible_user 或 remote_user 或用于执行剧本的用户)。

你可以指定成为:是的几个地方。它通常在任务级别使用,有时用作命令行参数(--become,-b 运行 与 become 的操作)。播放级别也可以设置:

- hosts: servers
  become: yes
  become_method: enable
  tasks:
    - name: Hello
  ...

您也可以在group_vars中启用它:

group_vars/exmaple.yml

ansible_become: yes

对于您的示例,使用它来安装软件我会将其设置在任务级别。我认为在您的情况下,导入是问题所在。您应该在导入的文件中设置它。

我最终指定 Ansible 成为一些失败任务的根(我的例子不是唯一失败的例子,它运行良好。我的环境中的调整是我无法登录root,但我可以 "become" root 一旦以其他人身份登录。

这是我的任务现在的样子:

- name: Install Memcached
  yum:
    name: memcached.x86_64
    state: present
  become_user: root