Ansible: Как запустить команду с выводом оболочки - PullRequest
0 голосов
/ 11 июля 2019

Самоочевидно.Я хочу связать на основе $ (который {{item}}).

Уже видел функцию регистрации, но так как мне нужно сделать вложенный цикл, я не уверен, как его использовать.

name: Link bins to user path
  command: 'ln -s \$(which {{ item.1 }}) /home/{{ item.0 }}/bin/{{ item.1 }}'
  with_nested: 
     - "{{ jail_users }}"
     - "{{ jail_user_commands }}

Вывод:

 failed: [rousertest] (item=[u'bob', u'date']) => {"changed": true,
 "cmd": ["ln", "-s", "$(which", "date)", "/home/bob/bin/date"], "delta":
 "0:00:00.011825", "end": "2019-07-11 08:17:32.921705", "item": ["bob", "date"], "msg": "non-zero return code", "rc": 1, "start": "2019-07-11
 08:17:32.909880", "stderr": "ln: target ‘/home/bob/bin/date’ is not a 
directory", "stderr_lines": ["ln: target ‘/home/bob/bin/date’ is not a
 directory"], "stdout": "", "stdout_lines": []

Конечно, я ожидал что-то вроде этого:

sudo ansible server -i inventory -m  shell -a 'echo $(which date)'
rousertest | SUCCESS | rc=0 >>
/usr/bin/date

1 Ответ

0 голосов
/ 11 июля 2019

Ниже игра. Избегайте использования командного модуля для ссылки. Используйте файловый модуль с состоянием = ссылка.

- name: Link binary
  hosts: all
  gather_facts: true
  vars:
    files:
      - date
      - ls
    users:
      - user1
      - user2
  tasks:
    - name: Find paths
      command: which {{ item }}
      with_items:
        - "{{ files }}"
      register: result
    - name: Link bins to user path
      file:
        src: "{{ item.1.stdout }}"
        dest: "/home/{{ item.0 }}/bin/{{ item.1.item }}"
        owner: "{{ item.0 }}"
        group: "{{ item.0 }}"
        state: link
      with_nested:
        - "{{ users }}"
        - "{{ result.results }}"
...