Existe uma maneira mais elegante de executar remotamente o cliente-chefe?

21

Este é o caminho recomendado no tutorial do Chef Fast Start:

knife ssh name:mynode -a ipaddress  -x ubuntu -i mycredentials.pem "sudo chef-client"

Isso é muito desajeitado. Não há realmente uma maneira melhor, ou a ideia é que, em um ambiente de produção real, você terá os nós de atualização automática de qualquer maneira?

    
por Steve Bennett 23.07.2012 / 08:57

5 respostas

11

Isso é basicamente o começo das coisas, mas isso só precisa ser feito uma vez. A execução inicial do cliente-chefe normalmente ativa e inicia o daemon chef-client como um serviço init.d.

Se você realmente quisesse fazer isso com mais elegância, você poderia abandonar o ssh-knife e rodar o ssh diretamente:

ssh ubuntu@ipadddress -i mycredentials.pem sudo chef-client

que provavelmente será mais rápido, já que o knife-ssh faz uma pesquisa no servidor Chef para buscar nós que correspondam ao termo de pesquisa (neste caso name:dynode ), que você não precisa fazer estritamente se já conhece o Endereço IP.

    
por 23.07.2012 / 10:59
11

Você pode usar o knife ssh para executar o chef-client em todas as caixas que contenham uma determinada função ou receita:

knife ssh "role:web" "sudo chef-client" -x ubuntu --sudo 

Ou se você estiver no EC2:

knife ssh "role:web" "sudo chef-client" -x ubuntu -a ec2.public_hostname 
    
por 04.02.2013 / 23:09
2

Você pode usar ansible para implantar e executar o chef-client.

$ ansible -i hosts all -a 'chef-client'

ansible é facilmente instalado com pip:

pip install ansible

Seu arquivo de inventário (no exemplo, chamado "hosts") pode ter esta aparência:

[all] host1.example.com ansible_user=root host2.example.com ansible_user=root host3.example.com ansibel_user=root

(observe "all" é o nome do agrupamento no arquivo de configuração para nosso exemplo - isso é arbitrário e pode ser qualquer coisa. Seu arquivo de inventário também pode incluir outros agrupamentos, por exemplo, [web_wervers], [database_servers], [chef_servers], etc.)

Então, novamente, juntando tudo:

> ansible -i hosts all -a 'chef-client'

ou talvez:

> ansible -i hosts all -a 'systemctl status'

    
por 22.05.2017 / 07:36
0

Eu uso o Jenkins CI para gerenciar as execuções. O servidor Linux é configurado como uma estação de trabalho e tem o Jenkins instalado nele. Então eu posso inicializar os nós com run_list modificado. O processo de bootstrapping, de qualquer maneira, executa chef-client no final.

Para a execução ad hoc, o trabalho do Jenkins executa comandos do tipo faca para modificar o run_list de um nó e usar o plug-in do SSH para executar o chef-client no nó desejado.

    
por 19.05.2016 / 16:52
0

É uma pena que, para despachar um comando para o cliente chef, tenhamos que usar o sublinhado ssh.

Parece que, embora cada cliente do chef tenha configurado uma conexão segura com o servidor do chef, mas o servidor do chef não fornece um multiplexador de comando sobre essa conexão segura, por quê?

    
por 07.03.2018 / 07:16