我尝试使用 machinectl 命令在 systemd-nspawn 容器内通过 ansible 实现一些工作的自动化。
我发现了一个似乎适合的 become machinectl ansible 插件,但是我做错了一些事情,因为它不起作用(或者至少没有按照我期望的方式起作用)。
我正在运行一个剧本:
ansible-playbook playbooks/machinectl_test.yml -i inventory/imagecreators --user ansibleuser
库存文件只有一台机器:
[Fedora]
fedoraimagecreator
剧本machinectl_test.yml:
- name: create machinectl user
hosts: "*"
become: yes
tasks:
- name: create machinectl user
ansible.builtin.user:
name: test
become: yes
become_method: machinectl
become_flags: "--machine fedora36custom"
用户 ansibleuser 位于 sudoers 中,具有所有权限:
ansibleuser ALL=(ALL) NOPASSWD:ALL
还有车轮组内部:
root@fedoraimagecreator:~ # groups ansibleuser
ansibleuser : ansibleuser wheel
我添加了 polkit 规则集,它是 ansible 文档的一部分(这就是为什么 ansible 用户是 wheel 的一部分,否则我认为不需要):
# A polkit rule needed to use the module with a non-root user.
# See the Notes section for details.
60-machinectl-fast-user-auth.rules: |
polkit.addRule(function(action, subject) {
if(action.id == "org.freedesktop.machine1.host-shell" && subject.isInGroup("wheel")) {
return polkit.Result.AUTH_SELF_KEEP;
}
});
有了这些。当我启动剧本时,结果如下:
root@ansible:~/ansible # ansible-playbook playbooks/machinectl_test.yml -i inventory/imagecreators --user ansibleuser
PLAY [create machinectl user] ******************************************************************************************
TASK [Gathering Facts] *************************************************************************************************
ok: [fedoraimagecreator]
TASK [create machinectl user] ******************************************************************************************
fatal: [fedoraimagecreator]: FAILED! => {"changed": false, "module_stderr": "Shared connection to fedoraimagecreator closed.\r\n", "module_stdout": "\u001b[0;1;31mFailed to connect to bus: El `host' no está operativo\u001b[0m\r\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
PLAY RECAP *************************************************************************************************************
fedoraimagecreator : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
有人知道我做错什么了吗?
问候。