Ansible - Inventar zur Laufzeit definieren

Ich bin ein wenig neu für Ansible, nehmen Sie mich also mit, wenn meine Fragen ein bisschen grundlegend sind.

Szenario:

Ich habe einige Remote-Hosts wie [EPCs] [Clients] und [Tester]. Ich kann sie so konfigurieren, wie ich sie haben möchte.

Problem:

Ich muss ein Playbook schreiben, das den Benutzer zur Laufzeit nach dem Inventar fragt, wenn es ausgeführt wird. Wenn beispielsweise ein Playbook ausgeführt wird, sollte der Benutzer folgendermaßen aufgefordert werden: "Geben Sie die Anzahl der zu konfigurierenden EPCs ein" "Geben Sie die Anzahl der zu konfigurierenden Clients ein" "Geben Sie die Anzahl der zu konfigurierenden Tester ein "

Was soll passieren:

Nun gibt der Benutzer beispielsweise 2,5 bzw. 8 ein. Jetzt sollte das Playbook nur die ersten 2 Knoten in der Gruppe [EPCs], die ersten 5 Knoten in der Gruppe [Clients] und die ersten 7 Knoten in der Gruppe [Tester] ansprechen. Ich möchte keine große Anzahl von Untergruppen erstellen. Wenn ich beispielsweise 20 EPCs habe, dann möchte ich keine 20 Gruppen für meine EPCs definieren. Ich möchte eine Art dynamisches Inventar, das die automatisch konfigurieren soll Maschinen nach der Benutzereingabe zur Laufzeit mit dervars_prompt Option oder so ähnlich

Lassen Sie mich einen Teil meines Playbooks veröffentlichen, um besser zu verstehen, was passieren soll:

---
- hosts: epcs # Now this is the part where I need a lot of flexibility

  vars_prompt:
    name: "what is your name?"
    quest: "what is your quest?"

  gather_facts: no

  tasks:

  - name: Check if path exists
    stat: path=/home/khan/Desktop/tobefetched/file1.txt
    register: st

  - name: It exists
    debug: msg='Path existence verified!'
    when: st.stat.exists

   - name: It doesn't exist
     debug: msg="Path does not exist"
     when: st.stat.exists == false

   - name: Copy file2 if it exists
     fetch: src=/home/khan/Desktop/tobefetched/file2.txt dest=/home/khan/Desktop/fetched/   flat=yes
     when: st.stat.exists

   - name: Run remotescript.sh and save the output of script to output.txt on the Desktop
     shell: cd /home/imran/Desktop; ./remotescript.sh > output.txt

   - name: Find and replace a word in a file placed on the remote node using variables
     shell: cd /home/imran/Desktop/tobefetched; sed -i 's/{{name}}/{{quest}}/g' file1.txt

    tags:
       - replace

@gli Ich habe Ihre Lösung ausprobiert. In meinem Inventar befindet sich eine Gruppe namens test mit zwei Knoten. Wenn ich eintrete0..1 Ich bekomme:

TASK: [echo sequence] ********************************************************* 
changed: [vm2] => (item=some_prefix0)
changed: [vm1] => (item=some_prefix0)
changed: [vm1] => (item=some_prefix1)
changed: [vm2] => (item=some_prefix1)

Ebenso, wenn ich eintrete1..2 Ich bekomme:

TASK: [echo sequence] ********************************************************* 
changed: [vm2] => (item=some_prefix1)
changed: [vm1] => (item=some_prefix1)
changed: [vm2] => (item=some_prefix2)
changed: [vm1] => (item=some_prefix2)

Ebenso, wenn ich eintrete4..5 (Knoten, die nicht einmal im Inventar vorhanden sind, erhalte ich:

TASK: [echo sequence] ********************************************************* 
changed: [vm1] => (item=some_prefix4)
changed: [vm2] => (item=some_prefix4)
changed: [vm1] => (item=some_prefix5)
changed: [vm2] => (item=some_prefix5)

Jede Hilfe wäre sehr dankbar. Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage