Установка становления условно - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь завершить работу баз данных в al oop, подвох состоит в том, что некоторые базы данных запускаются от имени другого пользователя, а другие - от oracle. Я вхожу как oracle пользователь и запускаю playbook, и если база данных запускается как oracle пользователь, она проходит нормально. Если он работает от имени другого пользователя, я бы хотел стать этим пользователем (oracle пользователь имеет полномочия на это).

Вот моя основная пьеса:

[oracle@ansctrlsrv.localdomain epd3] $ cat test.yml

---
- hosts: testdrive
  tasks:
    - set_fact:
        db_list: "{{ lookup('file', 'vars/' ~ inventory_hostname ~ '.dblist')|from_yaml }}"
    - name: Shutdown running databases
      include_tasks: shutdowndb.yml
      loop: "{{ db_list }}"

Список БД выглядит следующим образом:

[oracle@ansctrlsrv.localdomain epd3] $ cat vars / dbsrv.localdomain. dblist

- ebs1
- ebs2
- ndb1

[oracle@ansctrlsrv.localdomain epd3] $ cat shutdowndb.yml

---
- debug: msg='Shutting down {{ item }}'
- name: Execute shutdown
  shell: id "{{ item }}"
  register: shutdown_output
  become: "{{ item is search('ebs') | ternary('yes','no') }}"
  become_user: "{{ item }}"
- debug: msg="{{ shutdown_output.stdout }}"

[oracle@ansctrlsrv.localdomain epd3] $ cat инвентарь

[testdrive]
dbsrv.localdomain

[oracle@ansctrlsrv.localdomain epd3] $ ansible -playbook -i инвентарь test.yml

ЗАДАЧА [Выполнить отключение ] *** Смертельно: [dbsrv1.localdomain]: Ошибка! => {"updated": false, "module_stderr": "Совместное подключение к dbsrv1.localdomain закрыто. \ r \ n", "module_stdout": "", "msg": "СБОЙ МОДУЛЯ \ nСмотрите стр. stdout / stderr для точного ошибка "," r c ": 1} ... игнорирование

Я пробовал этот вопрос в другом потоке, но закрылся, поэтому пробовал другую руку после того, как сам понял несколько проблем, таких как неспособность запускать блоки кода с помощью al oop, et c. Ценю любую помощь.

Установите стать условно

1 Ответ

0 голосов
/ 03 февраля 2020

Исправить строку

shell: id "{{ item }}"

правильный синтаксис (используйте shell только при необходимости)

command: "id {{ item }}"


Playbook ниже
- hosts: testdrive
  tasks:
    - set_fact:
        db_list: "{{ lookup('file', 'vars/' ~ inventory_hostname ~ '.dblist')|from_yaml }}"
    - name: Shutdown running databases
      include_tasks: shutdowndb.yml
      loop: "{{ db_list }}"

с включенными задачами

$ cat shutdowndb.yml
  - debug:
      msg:
        - "shell: {{ 'shutdown.sh ' ~ item }}"
        - "become: {{ item is search('ebs')|ternary('yes', 'no') }}"
        - "become_user: {{ item }}"

дают

    "msg": [
        "shell: shutdown.sh ebs1", 
        "become: yes", 
        "become_user: ebs1"
    ]

    "msg": [
        "shell: shutdown.sh ebs2", 
        "become: yes", 
        "become_user: ebs2"
    ]

    "msg": [
        "shell: shutdown.sh ndb1", 
        "become: no", 
        "become_user: ndb1"
    ]

Q: " Почему команда whoami все еще дает oracle вместо ebs1?"

A: Краткий ответ: поскольку become не установлен в значение True.

Отладка

1) Является ли это можно стать всеми пользователями в db_list? Да.

- hosts: test_01
  become: no
  remote_user: admin

  vars:
    db_list: ['ebs1', 'ebs2', 'ndb1']

  tasks:

    - command: whoami
      become_user: "{{ item }}"
      become: true
      register: result
      loop: "{{ db_list }}"
    - debug:
        msg: "{{ result.results|json_query('[].stdout') }}"

дай

    "msg": [
        "ebs1", 
        "ebs2", 
        "ndb1"
    ]

2) Правильно ли работают search и ternary? Да.

   - debug:
        msg: "{{ item is search('ebs')|ternary(true, false) }}"
      loop: "{{ db_list }}"

дает

    "msg": true
    "msg": true
    "msg": false

3) Правильно ли работают become и become_user ?. Да.

    - command: whoami
      become_user: "{{ item }}"
      become: "{{ item is search('ebs')|ternary(true, false) }}"
      register: result
      loop: "{{ db_list }}"
    - debug:
        msg: "{{ result.results|json_query('[].stdout') }}"

Да

    "msg": [
        "ebs1", 
        "ebs2", 
        "admin"
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...