class Ogre::OrgCreate
Create organization through Chef::REST with the option to create the Chef policy repository
Public Instance Methods
org_create()
click to toggle source
organization create method
# File lib/ogre/org-create.rb, line 22 def org_create org_json = { name: org.to_s, full_name: org_desc.to_s } response = chef_rest.post('/organizations', org_json) puts "'#{org}' org has been created." # use chef repo generate to create a chef policy repo if options[:create_repo] # check for policy repo - order of precedence: cli, config.json, default repo_url = Config.options[:repo_url] ? Config.options[:repo_url] : REPO_URL repo_url = options[:repo_url] ? options[:repo_url] : repo_url # get the repository name -- dependant on short name w/out '.git' skeleton_repo_path = "#{OGRE_HOME}/policy_repo/#{repo_url.split('/').last}" # get policy repo get_chef_policy_repo(repo_url, skeleton_repo_path) # create parent dir for chef policy repo repo_path = options[:repo_path] ? options[:repo_path] : OGRE_HOME Dir.mkdir repo_path unless File.exist?(repo_path) # run cookbook generate generate_cmd = ChefDK::Command::GeneratorCommands::Repo.new(generate_params(repo_path, skeleton_repo_path)) generate_cmd.run # write out pem file File.open("#{repo_path}/#{org}-chef/.chef/#{response['clientname']}.pem", 'w') do |f| f.print(response['private_key']) end else puts response['private_key'] end rescue Net::HTTPServerException => e # already exists -- i will allow it if e.response.code == '409' puts "#{org} org already exists" else raise e end end
Private Instance Methods
generate_params(parent_path, skeleton_repo_path)
click to toggle source
concatenate parameters into a format ChefDK::Command::GeneratorCommands::Repo will accept
# File lib/ogre/org-create.rb, line 81 def generate_params(parent_path, skeleton_repo_path) # chef policy repository parameters generate_str = ["#{parent_path}/#{org}-chef"] # org name generate_str << '-a' generate_str << "org=#{org}" # chef server url generate_str << '-a' generate_str << "chef_server_url=#{options[:server_url] || Config.options[:server_url]}" # generator skeleton generate_str << '-g' generate_str << skeleton_repo_path # optional license if options[:license] generate_str << '-I' generate_str << options[:license].to_s end # optional email if options[:email] generate_str << '-m' generate_str << options[:email].to_s end # optional authors if options[:authors] generate_str << '-C' generate_str << options[:authors].to_s end generate_str end
get_chef_policy_repo(repo_url, skeleton_repo_path)
click to toggle source
clone policy skeleton, if exists, get latest
# File lib/ogre/org-create.rb, line 68 def get_chef_policy_repo(repo_url, skeleton_repo_path) # check for existing if File.exist?(skeleton_repo_path) # update if exists local_repo = Git.open(skeleton_repo_path) local_repo.pull else # get new if doesn't exist Git.clone(repo_url, skeleton_repo_path) end end