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

时间:2019-03-21 16:48:11

标签: ansible sudo

我有一个剧本,而不是角色,并使用具有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参数设置在错误的位置吗?还是我做错了什么?

提前谢谢

3 个答案:

答案 0 :(得分:0)

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

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

您也可以在group_vars中启用它:

group_vars / exmaple.yml

ansible_become: yes

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

答案 1 :(得分:0)

我最终指定Ansible成为某些失败任务的根用户(我的例子并不是唯一一个失败的任务,它运行良好。我环境中的一个调整是我不能以root用户身份登录,但是以其他人身份登录后,我可以“成为” root。

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

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

答案 2 :(得分:-1)

使用shell模块代替yum。

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

不像使用模块那样酷,但是它将完成工作。

您的成为用户没问题。如果不使用它,最终将使用用于稳定ssh连接的用户(ansible_user或remote_user或用于执行该剧本的用户)来尝试在剧本中运行命令。