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

22

Esta é a maneira recomendada no tutorial do Chef Fast Start:

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

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

Steve Bennett
fonte
1
De que maneira você acha que isso é "desajeitado"?
womble
9
Bem, coloque desta maneira. Isso não seria desajeitado: "nome de atualização da faca: mynode". Ter que especificar tanto como se conectar ao cliente quanto o nome do comando do cliente chef (além do fato de que ele precisa ser executado com permissões de sudo) é desajeitado. Knife se sai bem em abstrair muitas outras bagunças - por que não isso?
Steve Bennett

Respostas:

11

É basicamente assim que você começa as coisas, mas isso só precisa ser feito uma vez. A execução inicial do chef-client geralmente habilita e inicia o daemon chef-client como um serviço init.d.

Se você realmente quiser fazer isso de maneira mais elegante, poderá abandonar o ssh knife-ssh e executá-lo diretamente:

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

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

Tim Potter
fonte
2
Ok, acho que isso responde à pergunta - não, não há uma maneira melhor. Pena que o "bootstrap de faca" também não possa realmente executar o chef-cliente.
21412 Steve Bennett
Normalmente, executo chef-client no final do meu script de autoinicialização para resolver esse problema específico. No entanto, se você não gosta de knife-ssh, provavelmente pensará que as partes internas da faca são igualmente desajeitadas. Há um exemplo de script no github.
Tim Potter
1
O ec2 server createplugin de faca apenas executa o bootstrap seguido pelo SSH + chef-client. Portanto, se isso faz você se sentir melhor, os autores do Chef não descobriram nada particularmente mais inteligente.
kgilpin
Se o chef-cliente demorar algum tempo para executar, você terá um tempo limite. :( ssh: conectar ao host port xx.xx.xx.xx 22: Conexão expirou
gdanko
No caso em que o chef-client é executado como um daemon após a inicialização, e independentemente do intervalo definido, A MANEIRA MAIS ELEGANTE DE ENVIAR ISSO É: ssh ubuntu @ ipadddress -i mycredentials.pem -f -n "sudo killall -USR1 chef -cliente". Faça um fork do ssh para fazer isso simultaneamente em uma lista de nós.
Andrew S
12

Você pode usar o knife ssh para executar o chef-client em todas as caixas que contêm 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 
user157553
fonte
2

Você pode usar o 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 a seguinte 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 do 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'

Greg Jones
fonte
1
Eu vejo o que você está fazendo aqui ...;)
Spechal
0

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

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

Anil Wavde
fonte
0

É uma pena que, para enviar um comando para o cliente chefe, tenhamos que usar ssh underline.

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

osexp2003
fonte
0

Há um novo comando chef-runna estação de trabalho do chef:

chef-run server_name resource_name

Ele será instalado chef-clientse não estiver presente e executará o recurso ou livro de receitas que você especificar.

Tutorial: https://learn.chef.io/modules/try-chef-infra#/

sekrett
fonte