--- # tasks file for owner - name: "Validate owner role arguments" ansible.builtin.assert: that: - owner_name is string and owner_name | length > 0 - owner_uid | int > 0 - owner_gid | int > 0 fail_msg: >- Роль owner требует непустой owner_name и положительные owner_uid/owner_gid (owner_name={{ owner_name }}, owner_uid={{ owner_uid }}, owner_gid={{ owner_gid }}) quiet: true - name: "Create group {{ owner_group }}" ansible.builtin.group: name: "{{ owner_group }}" gid: "{{ owner_gid }}" state: present - name: "Create user {{ owner_name }}" ansible.builtin.user: name: "{{ owner_name }}" group: "{{ owner_group }}" groups: "{{ owner_extra_groups }}" uid: "{{ owner_uid }}" shell: /bin/bash register: owner_create_result - name: "Set up ssh keys for user {{ owner_name }}" ansible.posix.authorized_key: user: "{{ owner_name }}" key: "{{ item }}" state: present loop: "{{ owner_ssh_keys }}" # USER_UID/USER_GID кладём в окружение всегда: их подставляют docker-compose # шаблоны приложений, чтобы контейнер работал от того же пользователя. - name: "Prepare env variables" ansible.builtin.set_fact: owner_env_dict: >- {{ owner_env | combine({"USER_UID": owner_create_result.uid, "USER_GID": owner_create_result.group}) }} - name: "Set up environment variables for user {{ owner_name }}" ansible.builtin.template: src: env.template dest: "/home/{{ owner_name }}/.env" owner: "{{ owner_name }}" group: "{{ owner_group }}" mode: "0640" # Раньше переменные писались в .bashrc построчно; теперь источник истины — # ~/.env, поэтому старые строки вычищаем. - name: "Remove from bashrc absent environment variables for user {{ owner_name }}" ansible.builtin.lineinfile: path: "/home/{{ owner_name }}/.bashrc" regexp: "^export {{ item.key }}=" state: absent loop: "{{ owner_env_dict | dict2items }}" loop_control: label: "{{ item.key }}" - name: "Include in bashrc environment variables for user {{ owner_name }}" ansible.builtin.lineinfile: path: "/home/{{ owner_name }}/.bashrc" regexp: "^export \\$\\(grep -v" line: 'export $(grep -v "^#" "$HOME"/.env | xargs)'