我有一个剧本,而不是角色,并使用具有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
参数设置在错误的位置吗?还是我做错了什么?
提前谢谢
答案 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或用于执行该剧本的用户)来尝试在剧本中运行命令。