Questão de Redes de Computadores — Ansible — CESPE / CEBRASPE 2025
Redes de Computadores›Ansible
Código
ce418011
Banca
CESPE / CEBRASPE
Órgão
TRT 10
Ano
2025
Cargo
AJ TRT10
Julgue o item seguinte, relativo a virtualização e orquestração de infraestrutura.
Ao ser executado o playbook Ansible a seguir, serão classificados todos os hosts do servidor com base no sistema operacional de cada um, e, se houver um host cujo sistema operacional seja o Ubuntu, ele será automaticamente adicionado ao grupo os_Ubuntu.
- name: Talk to all hosts just so we can learn about them hosts: all tasks: - name: Classify hosts depending on their OS distribution ansible.builtin.group_by: key: os_{{ ansible_facts['distribution'] }}
CCerto
EErrado
Revelar gabarito e comentário▾
GabaritoC — Certo
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Ansible: módulo group_by e classificação dinâmica de hosts
Gabarito: letra C (Certo). O playbook utiliza o módulo ansible.builtin.group_by com a chave os_{{ ansible_facts['distribution'] }}, que cria grupos dinâmicos de hosts com base no valor do fato distribution de cada host. Assim, um host com sistema operacional Ubuntu será adicionado automaticamente ao grupo os_Ubuntu, exatamente como afirma o enunciado.
O Ansible é uma ferramenta de automação de configuração e orquestração de infraestrutura, amplamente utilizada em ambientes DevOps. Ele opera de forma declarativa (você descreve o estado desejado) e agêntica (não requer um agente instalado no host gerenciado, comunicando-se via SSH ou WinRM). Um dos recursos mais poderosos do Ansible é o uso de fatos (facts) — informações coletadas automaticamente sobre os hosts gerenciados, como sistema operacional, endereço IP, arquitetura, memória, entre outros. Esses fatos são armazenados em variáveis e podem ser acessados nos playbooks.
O módulo group_by é um módulo especial que cria grupos dinâmicos de hosts em tempo de execução, com base em uma chave fornecida. Ele não executa nenhuma ação nos hosts; apenas reorganiza o inventário em memória, agrupando os hosts que compartilham o mesmo valor para a chave especificada. A sintaxe é:
- name: Classify hosts depending on their OS distribution
ansible.builtin.group_by:
key: os_{{ ansible_facts['distribution'] }}
Aqui, a chave é os_{{ ansible_facts['distribution'] }}. O Ansible substitui a expressão {{ ansible_facts['distribution'] }} pelo valor do fato distribution de cada host. Por exemplo, se um host roda Ubuntu, o fato distribution retorna Ubuntu, e a chave se torna os_Ubuntu. O módulo group_by então cria (ou atualiza) um grupo chamado os_Ubuntu e adiciona esse host a ele. O mesmo ocorre para outros sistemas operacionais: um host CentOS entra no grupo os_Centos, um host Debian no grupo os_Debian, e assim por diante.
É importante notar que o playbook roda com hosts: all, ou seja, ele é executado contra todos os hosts do inventário. Portanto, todos os hosts serão classificados em grupos dinâmicos com base no sistema operacional de cada um. Se houver um host Ubuntu, ele será adicionado ao grupo os_Ubuntu — exatamente o que o enunciado afirma.
A pegadinha desta questão está em confundir o módulo group_by com outros módulos de agrupamento ou com a criação de grupos estáticos no inventário. O group_by é dinâmico e opera em memória, não alterando o arquivo de inventário. Além disso, a sintaxe os_{{ ansible_facts['distribution'] }} é uma interpolação de variável (template Jinja2), que é avaliada para cada host individualmente. O candidato pode pensar que a chave é literal (os_{{ ansible_facts['distribution'] }}), mas o Ansible a interpreta e substitui pelo valor real do fato.
Outro ponto que pode gerar confusão é a diferença entre ansible_facts['distribution'] e ansible_facts['os_family']. O primeiro retorna o nome da distribuição (ex.: Ubuntu, CentOS, Debian), enquanto o segundo retorna a família do sistema operacional (ex.: Debian, RedHat). Nesta questão, o playbook usa distribution, o que gera grupos como os_Ubuntu, os_Centos, etc. Se usasse os_family, os grupos seriam os_Debian, os_RedHat, etc.
Para fixar o entendimento, veja a comparação:
Fato
Exemplo (host Ubuntu)
Exemplo (host CentOS)
ansible_facts['distribution']
Ubuntu
CentOS
ansible_facts['os_family']
Debian
RedHat
O módulo group_by é frequentemente usado em playbooks para segmentar hosts em grupos lógicos antes de aplicar tarefas específicas. Por exemplo, você pode classificar hosts por sistema operacional e, em seguida, executar tarefas de instalação de pacotes diferentes para cada grupo. Isso torna o playbook mais flexível e adaptável a ambientes heterogêneos.
Na prática, o fluxo de execução seria:
Portanto, a afirmação do enunciado está correta: o playbook classifica todos os hosts com base no sistema operacional e adiciona automaticamente hosts Ubuntu ao grupo os_Ubuntu.
Item — ✅ CERTO
O item está correto. O módulo ansible.builtin.group_by cria grupos dinâmicos com base na chave fornecida. A chave os_{{ ansible_facts['distribution'] }} é avaliada para cada host, e o valor do fato distribution (ex.: Ubuntu) é interpolado na string, resultando em os_Ubuntu. O módulo então adiciona o host ao grupo correspondente. Como o playbook roda com hosts: all, todos os hosts do inventário são classificados, e um host Ubuntu será adicionado ao grupo os_Ubuntu.