Running chef-client programatically


#1

Hello all,

I building an app to control shared hosting deploys using chef and for it
to work I would like to run chef-client inside this ruby app to be able to
know and log exactly what chef-client is doing and what feedback it is
giving. Is there a way to do so? Are there docs?

Cheers
Braulio


“Lute pela sua ideologia. Seja um com sua ideologia. Viva pela sua
ideologia. Morra por sua ideologia” P.R. Sarkar

EITA - Educação, Informação e Tecnologias para Autogestão
http://cirandas.net/brauliobo
http://eita.org.br

"Paramapurusha é meu pai e Parama Prakriti é minha mãe. O universo é meu
lar e todos nós somos cidadãos deste cosmo. Este universo é a imaginação da
Mente Macrocósmica, e todas as entidades estão sendo criadas, preservadas e
destruídas nas fases de extroversão e introversão do fluxo imaginativo
cósmico. No âmbito pessoal, quando uma pessoa imagina algo em sua mente,
naquele momento, essa pessoa é a única proprietária daquilo que ela
imagina, e ninguém mais. Quando um ser humano criado mentalmente caminha
por um milharal também imaginado, a pessoa imaginada não é a propriedade
desse milharal, pois ele pertence ao indivíduo que o está imaginando. Este
universo foi criado na imaginação de Brahma, a Entidade Suprema, por isso
a propriedade deste universo é de Brahma, e não dos microcosmos que também
foram criados pela imaginação de Brahma. Nenhuma propriedade deste mundo,
mutável ou imutável, pertence a um indivíduo em particular; tudo é o
patrimônio comum de todos."
Restante do texto em


#2

yeah, you can do that, take a look at the client code[1]. Do you want a
client-sever like chef run or solo runs? There are three basic things you
have to do
a) Configure chef, either via Chef::Config.from_file, or directly set
Chef::Config[:key], where key is node_name, client_key and chef_server_url
b) build the node & run_context , this involves generating the ohai data,
pass it to a node, use that node to build a run_context
c) assign run_list and do a converge

you can see similar codes here[2], [3]

note, this means you have to run your chef-client as root (not a strict
requirement, but if you are manipulating users, packages, services etc,
you’ll need this).

regards
ranjib

[1]https://github.com/opscode/chef/blob/master/lib/chef/client.rb#L348
[2]
https://github.com/ranjib/chef-lxc/blob/master/lib/chef/application/lxc.rb#L86
[3]
https://github.com/ranjib/chef-stage/blob/master/libraries/staged_chef_client.rb#L34

2014-10-19 3:56 GMT-07:00 Bráulio Bhavamitra brauliobo@gmail.com:

Hello all,

I building an app to control shared hosting deploys using chef and for it
to work I would like to run chef-client inside this ruby app to be able to
know and log exactly what chef-client is doing and what feedback it is
giving. Is there a way to do so? Are there docs?

Cheers
Braulio


“Lute pela sua ideologia. Seja um com sua ideologia. Viva pela sua
ideologia. Morra por sua ideologia” P.R. Sarkar

EITA - Educação, Informação e Tecnologias para Autogestão
http://cirandas.net/brauliobo
http://eita.org.br

"Paramapurusha é meu pai e Parama Prakriti é minha mãe. O universo é meu
lar e todos nós somos cidadãos deste cosmo. Este universo é a imaginação da
Mente Macrocósmica, e todas as entidades estão sendo criadas, preservadas e
destruídas nas fases de extroversão e introversão do fluxo imaginativo
cósmico. No âmbito pessoal, quando uma pessoa imagina algo em sua mente,
naquele momento, essa pessoa é a única proprietária daquilo que ela
imagina, e ninguém mais. Quando um ser humano criado mentalmente caminha
por um milharal também imaginado, a pessoa imaginada não é a propriedade
desse milharal, pois ele pertence ao indivíduo que o está imaginando. Este
universo foi criado na imaginação de Brahma, a Entidade Suprema, por isso
a propriedade deste universo é de Brahma, e não dos microcosmos que também
foram criados pela imaginação de Brahma. Nenhuma propriedade deste mundo,
mutável ou imutável, pertence a um indivíduo em particular; tudo é o
patrimônio comum de todos."
Restante do texto em
http://cirandas.net/brauliobo/blog/a-problematica-de-hoje-em-dia


#3

To get information from chef (client or solo) about what it’s doing, you can use the event dispatch system (via a plugin you’ll need to write). The dispatcher code showing all the events is here: https://github.com/opscode/chef/blob/9b3e925188a41bbea954429ac81ffdf65e936eda/lib/chef/event_dispatch/base.rb and one example of using it is the ResourceReporter class that is used by Chef’s analytics product, here: https://github.com/opscode/chef/blob/master/lib/chef/resource_reporter.rb You can see an external example of this here: https://github.com/theforeman/chef-handler-foreman

Jon Cowie covers this a little bit in his ChefConf 2104 talk, which you can see here: https://www.youtube.com/watch?v=vVVPWMHJdvg&list=PL11cZfNdwNyMmx0msapJfuGsLV43C7XsA&index=65 It’s also covered in his book: http://shop.oreilly.com/product/0636920032984.do

If you create a custom reporter that uses IPC, then you don’t need to worry about controlling the chef run from code, which would make some parts of your task simpler.


Daniel DeLeo

On Sunday, October 19, 2014 at 9:40 AM, Ranjib Dey wrote:

yeah, you can do that, take a look at the client code[1]. Do you want a client-sever like chef run or solo runs? There are three basic things you have to do
a) Configure chef, either via Chef::Config.from_file, or directly set Chef::Config[:key], where key is node_name, client_key and chef_server_url
b) build the node & run_context , this involves generating the ohai data, pass it to a node, use that node to build a run_context
c) assign run_list and do a converge

you can see similar codes here[2], [3]

note, this means you have to run your chef-client as root (not a strict requirement, but if you are manipulating users, packages, services etc, you’ll need this).

regards
ranjib

[1]https://github.com/opscode/chef/blob/master/lib/chef/client.rb#L348
[2]https://github.com/ranjib/chef-lxc/blob/master/lib/chef/application/lxc.rb#L86
[3]https://github.com/ranjib/chef-stage/blob/master/libraries/staged_chef_client.rb#L34

2014-10-19 3:56 GMT-07:00 Bráulio Bhavamitra <brauliobo@gmail.com (mailto:brauliobo@gmail.com)>:

Hello all,

I building an app to control shared hosting deploys using chef and for it to work I would like to run chef-client inside this ruby app to be able to know and log exactly what chef-client is doing and what feedback it is giving. Is there a way to do so? Are there docs?

Cheers
Braulio


“Lute pela sua ideologia. Seja um com sua ideologia. Viva pela sua ideologia. Morra por sua ideologia” P.R. Sarkar

EITA - Educação, Informação e Tecnologias para Autogestão
http://cirandas.net/brauliobo
http://eita.org.br (http://eita.org.br/)

"Paramapurusha é meu pai e Parama Prakriti é minha mãe. O universo é meu lar e todos nós somos cidadãos deste cosmo. Este universo é a imaginação da Mente Macrocósmica, e todas as entidades estão sendo criadas, preservadas e destruídas nas fases de extroversão e introversão do fluxo imaginativo cósmico. No âmbito pessoal, quando uma pessoa imagina algo em sua mente, naquele momento, essa pessoa é a única proprietária daquilo que ela imagina, e ninguém mais. Quando um ser humano criado mentalmente caminha por um milharal também imaginado, a pessoa imaginada não é a propriedade desse milharal, pois ele pertence ao indivíduo que o está imaginando. Este universo foi criado na imaginação de Brahma, a Entidade Suprema, por isso a propriedade deste universo é de Brahma, e não dos microcosmos que também foram criados pela imaginação de Brahma. Nenhuma propriedade deste mundo, mutável ou imutável, pertence a um indivíduo em particular; tudo é o patrimônio comum de todos."
Restante do texto em http://cirandas.net/brauliobo/blog/a-problematica-de-hoje-em-dia