Em algumas ocasiões, quando você está usando o Ansible para automatizar várias tarefas, pode ser necessário transformar e manipular dados. No Ansible, você pode usar um conjunto de filtros integrados ou criar filtros personalizados para manipular, processar e converter dados. Ansible usa filtros de modelo jinja2 em segundo plano para permitir que os usuários criem filtros para dados específicos.
É importante observar que a modelagem de filtro é realizada no controlador Ansible, e não nos hosts remotos especificados. Isso ajuda a reduzir a quantidade de dados transferidos para o host remoto após o processamento local. Se você não está familiarizado com modelos jinja, Jinja é uma linguagem de modelos simples, intuitiva, rápida e segura para a linguagem de programação Python desenvolvida após o popular framework Python, modelos Django.
Não entraremos em detalhes sobre como funciona a modelagem jinja, embora possa ser uma vantagem adicional para entender como funciona com modelos.
Confira o recurso fornecido abaixo para saber mais sobre Jinja.
https: // linkfy.para / jinjaDocs
Como funcionam os filtros Ansible
Conforme mencionado, o mecanismo de filtragem Ansible se baseia no modelo de modelagem Jinja. Isso permite que os usuários usem esses modelos para inserir dados, processá-los e fornecer uma saída com base nos filtros definidos.
Depois que os dados são transformados e filtrados usando o modelo definido, você pode usá-lo para realizar outras tarefas no Ansible. Você pode aprender mais sobre filtros no Ansible no seguinte site:
https: // linkfy.para / AnsibleFilters
O Ansible tem muitos filtros que são muito úteis e aplicáveis a muitos cenários diferentes. Assim que tiver a saída do filtro, você pode usá-la para realizar outras tarefas, como depurar.
A sintaxe geral para filtrar dados é a seguinte:
|Usando Filtros Ansible
Agora veremos exemplos de filtros Ansible que podemos usar para realizar várias tarefas.
NOTA: Como mencionado anteriormente, o Ansible tem muitos filtros, portanto, não podemos cobrir todos eles neste artigo. Em vez disso, este tutorial visa fornecer a você os fundamentos do uso de vários filtros Ansible.
Exemplo 1: Filtros de dados de formato Ansible
Os filtros de dados de formato Ansible pegam uma estrutura de dados de saída em um modelo e usam o filtro especificado para renderizá-lo no formato chamado no filtro.
Abaixo está um exemplo de filtro para converter para JSON e YAML:
variável | to_jsonvariável | to_yaml
Por exemplo, considere o seguinte manual:
- hosts: todas as tarefas:- shell: cat / tmp / all.json
registrar: resultado
- depurar:
msg: "resultado.stdout | to_nice_yaml "
Executar o manual acima produzirá uma saída para os dados JSON convertidos em YAML. O seguinte é um exemplo de saída:
Você também pode especificar outros filtros, como to_nice_yaml, para obter a saída em um formato legível.
variável | to_nice_jsonvariável | to_nice_yaml
Usando os filtros de formatação de dados, você pode transformar dados em vários formatos e usá-los para várias tarefas.
Por exemplo, você pode passar strings YAML de vários documentos de análise, como no manual abaixo:
- hosts: todas as tarefas:- shell: cat / tmp / all.json
registrar: resultado
- depurar:
msg: "resultado.stdout | to_yaml | Lista"
Exemplo 2: Filtro Ansible padrão
O filtro padrão Ansible ajuda a definir valores padrão para variáveis indefinidas. A configuração Ansible padrão falha em variáveis indefinidas. Por exemplo, se você tiver uma variável indefinida, você pode dizer ao Ansible para usar como padrão um valor em vez de gerar um erro.
A sintaxe geral do filtro padrão é a seguinte:
Por exemplo:
- hosts: todosvars:
tarefas:
set_fact:
undef_var: "0_var | padrão (5)"
O manual acima irá definir o valor da variável '0_var' para 5 se não for definido explicitamente, em vez de lançar um erro.
Para definir uma variável, você pode usar o filtro obrigatório. Tudo que você precisa fazer é consultar o exemplo acima e substituir o padrão pelo obrigatório:
0_var | obrigatórioExemplo 3: Filtros Ansible de depuração
Ao depurar, você pode usar o filtro type_debug para obter informações sobre o tipo de variável. O tipo de variável será em Python, já que o motor é baseado em Python. A sintaxe geral do filtro é a seguinte:
variável | type_debugExemplo 4: Filtros Matemáticos
Os filtros matemáticos Ansible permitem que você execute consultas matemáticas. Esses filtros incluem o seguinte:
- Filtro de logaritmo - variável | log - especifica a base do logaritmo entre parênteses como variável | log (2)
- Filtro de energia - variável | pow (3) - retorna a variável elevada à potência especificada
- Filtro absoluto - variável | abs - retorna o valor absoluto para a variável passada
- Filtro raiz - variável | root - retorna a raiz quadrada da variável. Para especificar explicitamente a raiz, passe o valor entre parênteses; por exemplo, raiz cúbica variável | raiz (3)
Esses filtros matemáticos podem ser bastante úteis, especialmente ao lidar com grandes quantidades de dados e operações matemáticas instantâneas.
Exemplo 5: Filtros Hash
Os filtros de hash Ansible permitem que você obtenha o hash de uma string ou dados passados. Na maioria dos casos, você não precisará desses filtros, mas eles estão disponíveis para uso se houver necessidade. Esses filtros incluem o seguinte:
- Sha1 - var | hash (“sha1”)
- Sha256 / sha512 - var | password_hash (“sha256 / 512”)
- Md5 - var | hash (“md5”)
- Soma de verificação da string - var | checksum
Outros filtros úteis
Como você deve ter notado, o Ansible tem muitos filtros. Alguns filtros Ansible que você pode achar úteis incluem o seguinte:
- Filtro de divisão de URL - “[Email protegido]: // linuxhint.com: 8080 / index.html?query = linux ”| urlspilt (“hostname”), - retorna “linuxhint.com ”
- Lista de adesão - lista | join - usado para adicionar uma lista em uma string var
- Caminho de diretório - path | dirname
- Expanda um til - path | expanduser
Conclusão
Filtros Ansible são úteis quando você está realizando tarefas de depuração ou precisa de informações específicas sem digitar muito. Como o Ansible oferece suporte a filtros personalizados, esses filtros podem ser especialmente úteis em casos de uso específicos.