Přidat proměnné z Ansible inventář souboru do dynamické zásob

0

Otázka

mám soupis soubor obsahující 200 serverů a jejich příslušné proměnné, jak je znázorněno v ukázce níže:

[myhost1.mrsh.com]
myhost1.mrsh.com ORACLE_HOME=/u/orahome12/middleware/12c_db1 ansible_user=wladmin

[myhost2.mrsh.com]
myhost2.mrsh.com ORACLE_HOME=/u/orahome12/middleware/12c_db1 ansible_user=wladmin

..........
........

ptám se uživateli zadat libovolný název hostitele, který je předán hostnames proměnné, jak je uvedeno níže:

ansible-playbook /web/playbooks/automation/applycpupatch/applycpupatch.yml -i /web/playbooks/automation/applycpupatch/applycpupatch.hosts -f 5 -e action=status -e hostnames='myhost1
myhost2' -e patch_file='p33286132_122130_Generic.zip'

pokud myhost1 je přítomen v applycpupatch.hosts soubor jsem pak chcete vytvořit dynamické zásob pomocí add_host mají pouze myhost1 a jeho proměnných, jako je ORACLE_HOME

Níže je můj kód:

- name: "Play 1 - Set Destination details"
  hosts: all
  tasks:
    - add_host:
        name: "{{ item | upper }}"
        groups: dest_nodes
        ansible_user: "{{ hostvars[item + '*'].ansible_user }}"
        ORACLE_HOME: "{{ hostvars[item + '*'].ORACLE_HOME }}"
      when: inventory_hostname | regex_search(item)"
      with_items: "{{ hostnames.split() }}"

Bohužel, dostanu chybu, jak je uvedeno níže:

TASK [add_host] ****************************************************************
Saturday 20 November 2021  19:05:38 -0600 (0:00:00.059)       0:00:23.532 ***** 
[0;31mfatal: [myhost222.mrsh.com]: FAILED! => {"msg": "The conditional check 'inventory_hostname | regex_search(item)\"' failed. The error was: template error while templating string: unexpected char '\"' at 45. String: {% if inventory_hostname | regex_search(item)\" %} True {% else %} False {% endif %}\n\nThe error appears to be in '/web/playbooks/automation/applycpupatch/applycpupatch.yml': line 36, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n    - add_host:\n      ^ here\n"}[0m

Zkoušel jsem i níže, ale to selže s chybou.

ORACLE_HOME: "{{ hostvars['all'][item + '*'].ORACLE_HOME }}"

Tak můj dynamických zásob konstruovány runtime dest_nodes v tomto příkladu by měl mít POUZE níže.

myhost1.mrsh.com ORACLE_HOME=/u/orahome12/middleware/12c_db1 ansible_user=wladmin
myhost2.mrsh.com ORACLE_HOME=/u/orahome12/middleware/12c_db1 ansible_user=wladmin
ansible ansible-inventory dynamic
2021-11-21 01:22:13
1

Nejlepší odpověď

0

i dont pochopit, velmi dobře, co chceš, ale máš spoustu chyb opravit v učebnici:

1 - spustit svůj playbook s -e hostname='myhost1,myhost2'

2 - opravit váš playbook: budete muset vyzkoušet výsledek vaší regex_search, použijte variabilní inventory_hostname a použít split(','):

vzorek

- name: "Play 1 - Set Destination details"
  hosts: all
  tasks:
    - debug:
        msg: "{{ item }}   -  {{ hostvars[inventory_hostname].ORACLE_HOME }}"
      when: (inventory_hostname | regex_search(item)) != ''        
      with_items: "{{ hostnames.split(',') }}"
2021-11-21 09:29:20

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................