Sim, você pode executar comandos no host Ansible. Você pode especificar que todas as tarefas em uma reprodução sejam executadas no host Ansible ou pode marcar tarefas individuais para serem executadas no host Ansible.
Se você deseja executar uma reprodução inteira no host Ansible, especifique hosts: 127.0.0.1
e connection:local
na reprodução, por exemplo:
- name: a play that runs entirely on the ansible host
hosts: 127.0.0.1
connection: local
tasks:
- name: check out a git repository
git: repo=git://foosball.example.org/path/to/repo.git dest=/local/path
Consulte Playbooks locais na documentação Ansible para obter mais detalhes.
Se você quiser apenas executar uma única tarefa no host Ansible, poderá local_action
especificar que uma tarefa deve ser executada localmente. Por exemplo:
- name: an example playbook
hosts: webservers
tasks:
- ...
- name: check out a git repository
local_action: git repo=git://foosball.example.org/path/to/repo.git dest=/local/path
Consulte Delegação na documentação Ansible para obter mais detalhes.
Editar: você pode evitar ter que digitar connection: local
seu jogo adicionando isso ao seu inventário:
localhost ansible_connection=local
(Aqui você usaria "localhost" em vez de "127.0.0.1" para se referir à peça).
Editar: nas versões mais recentes do ansible, você não precisa mais adicionar a linha acima ao seu inventário, o ansible supõe que ele já esteja lá.
sudo: no
no cenário de delegação #ansible-playbook -K playbook.yml
onde -K para rootEu encontrei algumas outras maneiras pelas quais você pode escrever estas que são um pouco mais legíveis no IMHO.
OU
fonte
shell
módulo.Eu gostaria de compartilhar que o Ansible pode ser executado no localhost via shell:
ansible all -i "localhost," -c local -m shell -a 'echo hello world'
Isso pode ser útil para tarefas simples ou para um aprendizado prático do Ansible.
O exemplo de código é retirado deste bom artigo:
Executando o manual ansible no localhost
fonte
Você pode usar
delegate_to
para executar comandos no host Ansible (host do administrador), de onde você está executando o jogo Ansible. Por exemplo:Exclua um arquivo se ele já existir no host Ansible:
Crie um novo arquivo no host Ansible:
fonte
become
for verdadeiro para a tarefa, ele se queixará de sudo e tal. Isso pode acontecer diretamente na tarefa ou ser herdado para outro lugar.Expandindo a resposta de @gordon, aqui está um exemplo de sintaxe e argumento legíveis que passam com o módulo shell / comando (eles diferem do módulo git por haver argumentos obrigatórios, mas de forma livre, conforme observado por @ander)
fonte
Da documentação Ansible :
Delegação Na verdade, isso não é específico para atualizações contínuas, mas é frequente nesses casos.
Se você deseja executar uma tarefa em um host com referência a outros hosts, use a palavra-chave 'delegate_to' em uma tarefa. Isso é ideal para colocar nós em um pool de carga equilibrada ou removê-los. Também é muito útil para controlar janelas de interrupção. Esteja ciente de que não faz sentido delegar todas as tarefas, depurar, adicionar_host, incluir etc. sempre ser executado no controlador. Usar isso com a palavra-chave 'serial' para controlar o número de hosts em execução ao mesmo tempo também é uma boa idéia:
Esses comandos serão executados no 127.0.0.1, que é a máquina executando o Ansible. Há também uma sintaxe abreviada que você pode usar por tarefa: 'local_action'. Aqui está o mesmo manual acima, mas usando a sintaxe abreviada para delegar a 127.0.0.1:
Um padrão comum é usar uma ação local para chamar 'rsync' para copiar recursivamente os arquivos nos servidores gerenciados. Aqui está um exemplo:
Observe que você deve ter chaves SSH sem senha ou um agente ssh configurado para que isso funcione; caso contrário, o rsync precisará solicitar uma senha.
fonte
O módulo padrão é o módulo de comando, portanto, a
command
palavra-chave não é necessária.Se você precisar emitir qualquer comando com privilégios elevados, use
-b
no final do mesmo comando.fonte
você pode tentar assim
fonte