Guest User

Untitled

a guest
Mar 3rd, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. #!/usr/bin/ruby
  2. #
  3. # Joshua Sierles, 37signals, 2009
  4.  
  5. require 'rubygems'
  6. require 'thor'
  7. require 'chef'
  8. require 'chef/node'
  9. require 'chef/rest'
  10.  
  11. Chef::Config.from_file("/etc/chef/server.rb")
  12.  
  13. API_USERNAME='someuser'
  14. API_PASSWORD='somepass'
  15.  
  16. class Knife < Thor
  17.  
  18. desc "register", "Register an openid for an API user"
  19. method_options :username => :required, :password => :required
  20. def register
  21. @rest = Chef::REST.new(Chef::Config[:registration_url])
  22. @rest.register(options[:username], options[:password])
  23. end
  24.  
  25.  
  26. desc "add_recipe", "Add a recipe to a node"
  27. method_options :recipe => :required, :after => :optional, :node => :required
  28. def add_recipe
  29. authenticate
  30. node = @rest.get_rest("nodes/#{options[:node]}")
  31. node.recipes << options[:recipe] if !node.recipes.include?(options[:recipe])
  32. @rest.put_rest("nodes/#{options[:node]}", node)
  33. list_recipes
  34. end
  35.  
  36. desc "remove_recipe", "Remove a recipe from a node"
  37. method_options :recipe => :required, :node => :required
  38. def remove_recipe
  39. authenticate
  40. node = @rest.get_rest("nodes/#{options[:node]}")
  41. node.recipes.delete(options[:recipe]) if node.recipes.include?(options[:recipe])
  42. @rest.put_rest("nodes/#{options[:node]}", node)
  43. list_recipes
  44. end
  45.  
  46. desc "list_recipes", "List a node's recipes"
  47. method_options :node => :required
  48. def list_recipes
  49. authenticate
  50. node = @rest.get_rest("nodes/#{options[:node]}")
  51. puts node.recipes.inspect
  52. end
  53.  
  54. def authenticate
  55. @rest = Chef::REST.new(Chef::Config[:registration_url])
  56. @rest.authenticate(API_USERNAME, API_PASSWORD)
  57. end
  58. end
Add Comment
Please, Sign In to add comment