我有一个游戏手册而不是运行角色,并使用具有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
参数设置在错误的位置?或者我做错了什么?
先感谢您
您可以指定成为:是几个地方。通常它在任务级别使用,有时它用作命令行参数(--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
对于您的示例,使用它来安装软件我会将其设置为任务级别。我认为在你的情况下导入是问题所在。您应该在要导入的文件中进行设置。
我最终指定Ansible成为一些失败的任务的根(我的例子不是唯一一个失败的,它运作良好。我环境中的调整是我不能以root身份登录,但我可以一旦以其他人身份登录,“成为”root。
以下是我的任务现在的样子:
- name: Install Memcached
yum:
name: memcached.x86_64
state: present
become_user: root
使用shell模块而不是yum。
- name: Install Memcached
shell: sudo yum install -y {{ your_package_here }}
不像使用模块那么酷,但它可以完成工作。
你的become_user还可以。如果你不使用它,你将最终尝试通过使用用于建立ssh连接的用户(ansible_user或remote_user或用于执行playbook的用户)来运行playbook中的命令。