Search code examples
linuxansibleansible-2.x

Ansible not able to create symlink


I'm trying to create a symlink and I'm not able to solve this error . Please suggest me a solution on how to solve this error

Code: Creating a symlink for /usr/local/bin/terraform-env/bin/* in folder /usr/local/bin I tried with /usr/local/bin/ (with and without slash)

- name: Move tfenv
  file:
    src: "/usr/local/bin/terraform-env/bin/{{ item.src }}"
    dest: "/usr/local/bin/"
    state: link
    owner: root
    group: root
    mode: 755
    force: yes   
  with_items:
    - src: terraform
    - src: tfenv
TASK [terraform : Move tfenv] **************************************************
task path: /opt/ansible/roles/terraform/tasks/main.yml:16
failed: [127.0.0.1] (item={'src': 'terraform'}) => {"changed": false, "gid": 0, "group": "root", "item": {"src": "terraform"}, "mode": "0755", "msg": "the directory /usr/local/bin/ is not empty, refusing to convert it", "owner": "root", "path": "/usr/local/bin/", "size": 4096, "state": "directory", "uid": 0}
failed: [127.0.0.1] (item={'src': 'tfenv'}) => {"changed": false, "gid": 0, "group": "root", "item": {"src": "tfenv"}, "mode": "0755", "msg": "the directory /usr/local/bin/ is not empty, refusing to convert it", "owner": "root", "path": "/usr/local/bin/", "size": 4096, "state": "directory", "uid": 0}

Using ansible 2.8.3


Solution

  • the directory /usr/local/bin/ is not empty, refusing to convert it

    You are trying to create the symlink directly on the existing directory rather than creating an entry inside that dir to support the symlink. The following corrected task should get you going:

    - name: Move tfenv
      file:
        src: "/usr/local/bin/terraform-env/bin/{{ item.src }}"
        dest: "/usr/local/bin/{{ item.src }}"
        state: link
        owner: root
        group: root
        mode: 755
        force: yes   
      with_items:
        - src: terraform
        - src: tfenv