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?


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.


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 

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'


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.


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?


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.