Por que o Ansible mostra “ERROR! nenhuma ação detectada na tarefa ”erro?

Ansible mostra um erro:

ERRO! nenhuma ação detectada na tarefa. Isso geralmente indica um nome de módulo incorreto ou um caminho de módulo incorreto.

O que está errado?


A transcrição exata é:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path. The error appears to have been in 'playbook.yml': line 10, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: --- - name: My task name ^ here 

Razão # 1

Você está usando uma versão mais antiga do Ansible que não tem o módulo que você tenta executar.

Como verificar isso?

  1. Abra a lista de documentação do módulo de módulos e encontre a página de documentação para o seu módulo.

  2. Leia o header no topo da página – geralmente mostra a versão Ansible em que o módulo foi introduzido. Por exemplo:

    Novo na versão 2.2.

  3. Assegure-se de estar executando a versão especificada do Ansible ou posterior. Corre:

     ansible-playbook --version 

    E verifique a saída. Deve mostrar algo como:

    ansible-playbook 2.4.1.0


Razão # 2

Você tentou escrever um papel e colocar um playbook em my_role/tasks/main.yml .

O arquivo tasks/main.yml deve conter apenas uma lista de tarefas. Se você especificou:

 --- - name: Configure servers hosts: my_hosts tasks: - name: My first task my_module: parameter1: value1 

O Ansible tenta encontrar um módulo de ação chamado hosts e um módulo de ação chamado tasks . Não, então isso gera um erro.

Solução: especifique apenas uma lista de tarefas no arquivo tasks/main.yml :

 --- - name: My first task my_module: parameter1: value1 

Razão # 3

O nome do módulo de ação está incorreto.

Isso é bastante óbvio, mas esquecido. Se você usar o nome do módulo incorreto, por exemplo, users vez de user , o Ansible reportará “nenhuma ação detectada na tarefa”.

Ansible foi projetado como um sistema altamente extensível. Ele não tem um conjunto limitado de módulos que você pode executar e não pode verificar “antecipadamente” a ortografia de cada módulo de ação.

Na verdade, você pode escrever e depois especificar seu próprio módulo chamado qLQn1BHxzirz e Ansible deve respeitar isso. Como é uma linguagem interpretada, “descobre” o erro apenas quando tenta executar a tarefa.


Razão # 4

Você está tentando executar um módulo não distribuído com Ansible.

O nome do módulo de ação está correto, mas não é um módulo padrão distribuído com o Ansible.

Se você estiver usando um módulo fornecido por terceiros – um fornecedor de software / hardware ou outro módulo compartilhado publicamente, primeiro faça o download do módulo e coloque-o no diretório apropriado.

Você pode colocá-lo no subdiretório modules do playbook ou em um caminho comum.

Ansible parece ANSIBLE_LIBRARY ou o argumento da linha de comandos --module-path .

Para verificar quais caminhos são válidos, execute:

 ansible-playbook --version 

e verifique o valor de:

caminho de pesquisa do módulo configurado =

A versão 2.4 e posterior do Ansible deve fornecer uma lista de caminhos.


Razão # 5

Você realmente não tem nenhuma ação dentro da tarefa.

A tarefa deve ter algum módulo de ação definido. O exemplo a seguir não é válido:

 - name: My task become: true