Running chef-client programatically

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

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
A problemática de hoje em dia - Bráulio Bhavamitra

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: GitHub - theforeman/chef-handler-foreman: This handler allow Chef to send reports to 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: Customizing Chef [Book]

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
Blog - Bráulio Bhavamitra
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 A problemática de hoje em dia - Bráulio Bhavamitra