es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Crear enlace con propietario/grupo específico

Estoy intentando crear enlaces simbólicos con un propietario/grupo específico, pero siempre se crean con propietario=root y grupo=root. ¿Por qué?

Este es mi código:

- name: Obtener los directorios para crear enlaces simbólicos
  find:
    paths: /miRuta/
  register: resultado

- name: Creación de enlaces simbólicos
  file:
    src: "{{ item.path }}"
    dest: /RutaDest/{{ item.path | basename }}
    owner: 'propietario1'
    group: 'grupo1'
    state: link
  with_items: "{{ resultado.files }}"

Nota:
– propietario1 y grupo1 existen.
– No hay errores en el registro de Ansible.

Tags:  

Answer

  1. Avatar for davy.ai

    El problema puede ser causado por la falta de permisos para que el usuario de Ansible cambie la propiedad o el grupo del enlace simbólico. Por defecto, el módulo de archivo establece el propietario y el grupo de un archivo o directorio en la cuenta de usuario que ejecuta Ansible, que suele ser root. Sin embargo, también puede cambiar la propiedad a cualquier otro usuario que el usuario de Ansible tenga permiso para gestionar.

    Para resolver el problema, puedes probar una o más de las siguientes soluciones:

    1. Añade become: yes al play o tarea, para que Ansible aumente los privilegios y se convierta en el usuario root u otro usuario con suficientes permisos para cambiar la propiedad o el grupo. Por ejemplo:
    - name: Creación de enlaces simbólicos
      become: yes
      file:
        src: "{{ item.path }}"
        dest: /Path_Dest/{{ item.path | basename }}
        owner: 'propietario1'
        group: 'grupo1'
        state: link
      with_items: "{{ result.files }}"
    
    1. Usa los módulos chown o chgrp para establecer explícitamente la propiedad o el grupo del enlace simbólico, independientemente de la configuración predeterminada. Por ejemplo:
    - name: Creación de enlaces simbólicos
      file:
        src: "{{ item.path }}"
        dest: /Path_Dest/{{ item.path | basename }}
        state: link
      with_items: "{{ result.files }}"
      register: symlink_result
    
    - name: Cambiar la propiedad de los enlaces simbólicos
      chown:
        path: "{{ item.path }}"
        owner: 'propietario1'
        group: 'grupo1'
      with_items: "{{ symlink_result.links }}"
    
    1. Comprueba los permisos y la propiedad de los directorios de origen y destino para asegurarte de que el usuario de Ansible tiene suficientes derechos para leer/escribir/crear archivos y directorios en esas ubicaciones. Por ejemplo:
    - name: Obtener los directorios para crear enlaces simbólicos
      find:
        paths: /miRuta/
      register: result
    
    - name: Depurar la variable de resultado
      debug:
        var: result
    
    - name: Depurar el usuario de Ansible
      debug:
        var: ansible_user_id
    
    - name: Depurar el permiso del usuario de Ansible en el directorio de destino
      become: yes
      shell: "ls -ld /Path_Dest/"
      register: dest_dir_result
      failed_when: dest_dir_result.stdout.find('drwxr-xr-x') == -1
    
    - name: Creación de enlaces simbólicos
      become: yes
      file:
        src: "{{ item.path }}"
        dest: /Path_Dest/{{ item.path | basename }}
        owner: 'propietario1'
        group: 'grupo1'
        state: link
      with_items: "{{ result.files }}"
    

    Al ejecutar estas tareas, puedes comprobar la salida de los módulos find, debug, shell y file, y ver si aparecen mensajes de error o resultados inesperados. Esto puede ayudarte a identificar la causa raíz del problema y tomar medidas correctivas.

Comments are closed.