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
Use message bus (zeromq)
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
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
- 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 the pushy_job_writers and pushy_job_readers on the organization of the Chef server and add your workstation user to that group.
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>