Estou tentando escrever um manual do Ansible para inicializar meus servidores. Por padrão, no Linode, eu posso logar apenas como root com uma senha, para que o meu playbook efetue login como root, crie um usuário não root com uma chave SSH e desabilite o SSH de root e senha.
Este é um problema, porque agora não consigo executar esse manual novamente, pois o login root está desativado! Eu gostaria que o manual fosse idempotente e não tivesse que adicionar e remover hosts depois de inicializá-los.
Respostas:
Eu gosto de fazer assim:
Tento me conectar ao host remoto com meu usuário ansible. Se isso for impossível (na primeira execução), eu me conecto como root e crio o usuário ansible junto com seu
authorized_keys
arquivo esudo
direitos.Nas execuções subseqüentes, a conexão como usuário ansible funciona, para que o bloco de tarefas possa ser ignorado.
Depois que o host remoto é inicializado, posso continuar com o usuário ansible e
become
:fonte
remote_user
seu manual após a primeira execução? Isso não é idempotente. Espero estar perdendo alguma coisa.bootstrap.yml
esite.yml
, ondesite.yml
incluibootstrap.yml
antes de mais nada). Se a primeira tarefa debootstrap.yml
falhar, todas as outras tarefas desta peça serão ignoradas esite.yml
assumidas."skip_reason": "Conditional result was False"
. Executando o jogo com-vvv
mostra a chamada ssh retornos"msg": "non-zero return code", "rc": 255,
when
condição:when: not "OK" in check_ansible_user.stdout
Eu faria o seguinte:
sshd_config
(eu recomendaria que você gerencie o arquivo inteiro, usando atemplate
, mas isso depende de você) e desative os logins raizPara o primeiro papel (o básico), costumo usar algo como:
Para a configuração SSH, eu usaria:
As dependências de função da Ansible estão documentadas aqui .
Você também pode usar pedidos no seu manual para fazer isso.
Eu tenho algumas coisas ansible no github (do qual o acima foi tirado), se você quiser vê-lo no contexto
fonte
Se você criar seus servidores Linode com o módulo linode você poderia registrar o
return value
dalinode
tarefa e incluir as tarefas de bootstrap com uma condição de verificação da outout da tarefa linode. Isso deve ser idempotente. Tente algo como isto:bootstrap.yml
conteria todas as tarefas necessárias para desativar o login root ssh e assim por diante.fonte
Talvez você possa modificar
ansible_ssh_user
o inventário depois de inicializar o host?fonte