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

问题描述 投票:0回答:3

我有一个游戏手册而不是运行角色,并使用具有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参数设置在错误的位置?或者我做错了什么?

先感谢您

ansible sudo
3个回答
0
投票

您可以指定成为:是几个地方。通常它在任务级别使用,有时它用作命令行参数(--become,-b run operations with become)。它也可以设置在游戏级别:

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

您也可以在group_vars中启用它:

group_vars / exmaple.yml

ansible_become: yes

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


0
投票

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

以下是我的任务现在的样子:

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

-1
投票

使用shell模块而不是yum。

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

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

你的become_user还可以。如果你不使用它,你将最终尝试通过使用用于建立ssh连接的用户(ansible_user或remote_user或用于执行playbook的用户)来运行playbook中的命令。

© www.soinside.com 2019 - 2024. All rights reserved.