如何强制 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
我有一个比 运行 角色更多的剧本,并使用具有 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