Ansible - Definir inventário em tempo de execução
Eu sou novo em ansible, então tenha paciência comigo se minhas perguntas forem um pouco básicas.
Cenário:
Eu tenho um grupo pequeno de hosts remotos, como [EPCs] [Clients] e [Testers], sou capaz de configurá-los da maneira que quero que sejam.
Problema:
Preciso escrever um manual, que, quando executado, solicita ao usuário o inventário em tempo de execução. Como exemplo, quando um manual é executado, o usuário deve ser solicitado da seguinte maneira: "Digite o número de EPCs que você deseja configurar" "Digite o número de clientes que você deseja configurar" "Digite o número de testadores que deseja configurar "
O que deve acontecer:
Agora, por exemplo, o usuário digita 2,5 e 8, respectivamente. Agora, o manual deve abordar apenas os 2 primeiros nós do grupo [EPCs], os 5 primeiros nós do grupo [Clientes] e os 7 primeiros nós do grupo [Testadores]. Não quero criar um grande número de subgrupos, por exemplo, se tenho 20 EPCs, não quero definir 20 grupos para minhas EPCs, quero um inventário dinâmico, que deve configurar automaticamente o máquinas de acordo com a entrada do usuário em tempo de execução usando ovars_prompt opção ou algo semelhante ao
Deixe-me postar uma parte parcial do meu manual para entender melhor o que está para acontecer:
---
- 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 Tentei sua solução, tenho um grupo no meu inventário chamado teste com dois nós. Quando eu entro0..1 Eu recebo:
TASK: [echo sequence] *********************************************************
changed: [vm2] => (item=some_prefix0)
changed: [vm1] => (item=some_prefix0)
changed: [vm1] => (item=some_prefix1)
changed: [vm2] => (item=some_prefix1)
Da mesma forma, quando entro1..2 Eu recebo:
TASK: [echo sequence] *********************************************************
changed: [vm2] => (item=some_prefix1)
changed: [vm1] => (item=some_prefix1)
changed: [vm2] => (item=some_prefix2)
changed: [vm1] => (item=some_prefix2)
Da mesma forma, quando entro4..5 (nós nem mesmo estão presentes no inventário, recebo:
TASK: [echo sequence] *********************************************************
changed: [vm1] => (item=some_prefix4)
changed: [vm2] => (item=some_prefix4)
changed: [vm1] => (item=some_prefix5)
changed: [vm2] => (item=some_prefix5)
Qualquer ajuda seria muito apreciada. Obrigado!