如何创建在ansible主机上不存在的用户的文件或模板?



我正在试验无根podman。容器中的用户从主机获得subbuild/subgid空间。从容器环境中的用户创建或更新的文件属于用户id空间。在主机上不存在。

这就是我目前卡住的地方。我可以使用ACL计算子构建并轻松访问容器拥有的文件,但我无法使用ACL编写jinja模板并将其发送给主机上不存在的用户。我也不想通过在主机上创建一个具有匹配UID的虚拟用户来解决这个问题,因为这可能会破坏安全优势/无根概念。

任务:

- name: copy hass main config to storage
become: yes
template:
src: configuration.yaml.j2
dest: "{{ hass_data_dir }}/configuration.yaml"
owner: "{{ stat_container_base_dir }}.uid"
group: "{{ stat_container_base_dir }}.gid"
mode: 0640

和运行任务时的错误信息。

TASK [server/smarthome/homeassistant/podman : copy hass main config to storage] ************************************************************************************************************************
fatal: [odroid]: FAILED! => 
changed: false
checksum: 20c59b4a12d4ebe52a3dd191a80a5091d8e6dc0c
gid: 0
group: root
mode: '0640'
msg: 'chown failed: failed to look up user {''changed'': False, ''stat'': {''exists'':
True, ''path'': ''/home/homeassistant/container'', ''mode'': ''0770'', ''isdir'':
True, ''ischr'': False, ''isblk'': False, ''isreg'': False, ''isfifo'': False,
''islnk'': False, ''issock'': False, ''uid'': 363147, ''gid'': 362143, ''size'':
4096, ''inode'': 4328211, ''dev'': 45826, ''nlink'': 3, ''atime'': 1669416005.068732,

我试图在模块文档中找到帮助:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/template_module.html

我的可行版本是:ansible [core 2.13.1]

在错误消息中可以看到,ansible缺少主机上UID为363147的用户。

如果用户存在于ansible. build .template和类似的模块中,允许用户与owner:group:分配,是否有任何方法可以绕过测试?

我发现的唯一解决方法是使用command,但是由于需要模板,当我不得不在没有可见模板模块的情况下解析jinja模板时,复杂性将增加。

如果我错过了一个现有的选项,或者想为一个选项创建一个拉取请求,我会很感激:

ignore_usercheck: truevalidate_user: false

希望你能帮我解决这个问题:)

毕竟这只是一个误导性的错误信息,而不是Ansible缺少的功能。

我用调试模块进行了测试,发现必须从花括号内访问stat的值。

- name: debug
debug:
msg: "{{ stat_container_base_dir.stat.uid }}"

Ansible得到的是stat的整个字符串内容,而不仅仅是UID。
可以分配主机上不存在的用户ID。

相关内容

  • 没有找到相关文章

最新更新