What are Push Jobs?
Push Jobs work like knife-ssh. Almost. Almost because, in knife-ssh the changes are pushed from your workstation using the SSH protocol. In push jobs, the changes are pushed to the node by the Chef Server.
Chef is based on the “pull” and has a reason for that – to keep the server “thin”. But the changing challenges demand that there is a need for a push model. So chef has introduced push jobs by keeping the server is thin!
“Chef push jobs is an extension of the Chef server that allows jobs to be run against nodes independently of a chef-client run” – that’s how push jobs are defined. A job, in this context, is a set of commands that need to be run on the target node.
Difference between Push Jobs and knife-ssh
Push Jobs | knife-ssh |
---|---|
Use message bus (zeromq) |
Parallel ssh |
Claims to attack the scalability issue |
SSH Protocol is slow and CPU hungry at scale |
Deployment status is relayed back |
Feedback on deployment status is not as easy |
Newly introduced |
Been in the market for long |
Complex at the moment, ready with just the basic foundation |
Easy to use |
Configuring Chef Push Jobs Server
You need either Enterprise Chef or Chef Server 12. It relies on the ACL system that was open sourced with Chef Sever 12. Also, the install command was introduced with Chef Server 12.
Push Jobs does not work with Open Source Chef Server 11.
Can be setup as standalone or as HA
Run the following commands on Chef Server:
chef-server-ctl install opscode-push-jobs-server
opscode-push-jobs-server-ctl reconfigure
chef-server-ctl reconfigure
Setup Workstation
- Install knife push plugin
Gem install knife-jobs - Download push-jobs cookbook
Push jobs cookbook would be used. So download it from the site or git clone the cookbook. You would have to fetch its dependency cookbooks as well.
knife cookbook site download push-jobs - Extract and save the cookbook to your cookbook path
- Edit the attributes file (push-jobs/attributes/default.rb)
Update the attributes to add the push jobs package URL and checksum as mentioned.
default[‘push_jobs’][‘package_url’] = ‘https://opscode-private-chef.s3.amazonaws.com/ubuntu/12.04/x86_64/opscode-push-jobs-client_1.1.5-1_amd64.deb’default[‘push_jobs’][‘package_checksum’] = ‘d659c06c72397ed2bc6cd88488349857f1958538‘
-
Upload the push-jobs cookbook to your ChefServer
Create Groups
Create the pushy_job_writers and pushy_job_readers on the organization of the Chef server and add your workstation user to that group.
Setup Node
Simply run the chef client with the recipe:
sudo chef-client –r “recipe[push-jobs]”
Run the knife node status commands to check the node status. It will just show the status “available” at this stage which confirms that the node is prepared for push events.
knife node status
knife node status <node-name>
Run Push Jobs
Run chef-client as:
knife job start ‘chef-client –r recipe[git]’ <node-name>
Run your commands/script as:
knife job start ‘my_script.sh’ <my_node>
Good post. really helpful.. Cheers.
i am installing using below command and got error
-> chef-server-ctl install opscode-push-jobs-server
FATAL: Chef::Exceptions::Package: yum_package[opscode-push-jobs-server] (private-chef::add_ons_remote line 16) had an error: Chef::Exceptions::Package: No candidate version available for opscode-push-jobs-serverFATAL: Chef::Exceptions::Package: yum_package[opscode-push-jobs-server] (private-chef::add_ons_remote line 16) had an error: Chef::Exceptions::Package: No candidate version available for opscode-push-jobs-server
Hi! Same error:
Chef::Exceptions::Package: yum_package[opscode-push-jobs-server] (private-chef::add_ons_remote line 16) had an error: Chef::Exceptions::Package: No candidate version available for opscode-push-jobs-server
Chef version: 12.4.0
OS: Centos x64 7.2
Supported OS: RHEL 5, 6 and Ubuntu 10, 12, 14
As per the documentation from Opscode chef push jobs works from Chef version 12.6
Supported OS: RHEL 5, 6 and Ubuntu 10, 12, 14
Supported OS: RHEL 5, 6 and Ubuntu 10, 12, 14