ансайбл регистр с петлями - PullRequest
0 голосов
/ 08 июля 2019

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

Я думал, что это проблема с отступом, но не повезло.

Моя книга воспроизведения

---
- hosts: localhost
  tasks:
    - name: Clearing Local file 
      local_action: shell echo "Zone,docode,doname,testuser Output" > user.csv



- hosts: app
  tasks:

    - name: Creating user Testuser
      become: yes 
      user: 
        name: "{{ item }}" 
        state: present 
        shell: "/bin/bash"
        password: "$6$mysecretsalt$qyctTVhRMS1ZSnCuzQNAM8Y7V/yqSEnyRbal0IYXSqSEVKkXF8ZmXBZoRIaN/PvzE/msq8iOJO830OOCG89va/"  
        update_password: always 
        groups: santosh 

      shell: id "{{item}}"   
      ragister: userout  

      loop: 
        - newuser1
        - newuser2
        - newuser3

    - debug: 
        var=userout

, которая выдает следующую ошибку при выполнении

ERROR! conflicting action statements: shell, user

The error appears to have been in '/home/santosh/ans-home/playbooks/Create_User_and_Gather_output.yml': line 12, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


    - name: Creating user Testuser
      ^ here

1 Ответ

1 голос
/ 08 июля 2019

Вы не можете вызывать несколько модулей в одной задаче, вам нужно разделить каждый вызов в своей задаче, как сообщается в сообщении об ошибке.

Я понимаю, почему вы пытались это сделать: использовать одну и ту же петлю для нескольких задач. К сожалению, это невозможно. Вы можете переместить ваш набор задач в отдельный файл и включить его в цикл, если вам действительно нужно выполнить цикл по значительному количеству задач. Это на самом деле не требуется в вашей ситуации, потому что:

  • у вас есть только две задачи
  • вы можете сжать цикл, используя объявленную переменную для повторного использования
  • и, самое главное, потому что вам не нужно ваше второе задание

Фактически, пользовательский модуль возвращает uid пользователя, которого он создал или который существует в его результате. Вам просто нужно зарегистрировать результат вызова модуля user.

Просто попробуйте следующее для вашей второй игры:

- name: Resgister application users
  hosts: app

  vars:
    user_list:
      - newuser1
      - newuser2
      - newuser3

  tasks:
    - name: Create the users if they don't exist
      user:
        name: "{{ item }}" 
        state: present 
        shell: "/bin/bash"
        password: "$6$mysecretsalt$qyctTVhRMS1ZSnCuzQNAM8Y7V/yqSEnyRbal0IYXSqSEVKkXF8ZmXBZoRIaN/PvzE/msq8iOJO830OOCG89va/"  
        update_password: always 
        groups: santosh
      register: create_users
      loop: "{{ user_list }}"

    - name: Show ids of users
      debug:
        msg: "The uid of user {{ item.name }} is: {{ item.uid }}"
      loop: "{{ create_users.results }}"

И как примечание: для первой игры сделайте себе одолжение и прекратите использовать старый синтаксис local_action в пользу delegate_to: localhost для задачи. Это даже не требуется в вашем случае, так как вы уже настраиваете свою игру только на localhost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...