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?
Respostas:
É 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:
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.fonte
ec2 server create
plugin 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.Você pode usar o knife ssh para executar o chef-client em todas as caixas que contêm uma determinada função ou receita:
Ou se você estiver no EC2:
fonte
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'
fonte
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.
fonte
É 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?
fonte
Há um novo comando
chef-run
na estação de trabalho do chef:Ele será instalado
chef-client
se não estiver presente e executará o recurso ou livro de receitas que você especificar.Tutorial: https://learn.chef.io/modules/try-chef-infra#/
fonte