class Opc::OpcUserCreate

Public Instance Methods

prompt_for_password() click to toggle source
# File lib/chef/knife/opc_user_create.rb, line 97
def prompt_for_password
  ui.ask("Please enter the user's password: ") { |q| q.echo = false }
end
run() click to toggle source
# File lib/chef/knife/opc_user_create.rb, line 42
def run
  case @name_args.count
  when 6
    username, first_name, middle_name, last_name, email, password = @name_args
  when 5
    username, first_name, last_name, email, password = @name_args
  when 4
    username, first_name, last_name, email = @name_args
  else
    ui.fatal "Wrong number of arguments"
    show_usage
    exit 1
  end
  password = prompt_for_password if config[:passwordprompt]
  unless password
    ui.fatal "You must either provide a password or use the --prompt-for-password (-p) option"
    exit 1
  end
  middle_name ||= ""

  user_hash = {
    username: username,
    first_name: first_name,
    middle_name: middle_name,
    last_name: last_name,
    display_name: "#{first_name} #{last_name}",
    email: email,
    password: password,
  }

  # Check the file before creating the user so the api is more transactional.
  if config[:filename]
    file = config[:filename]
    unless File.exist?(file) ? File.writable?(file) : File.writable?(File.dirname(file))
      ui.fatal "File #{config[:filename]} is not writable.  Check permissions."
      exit 1
    end
  end

  result = root_rest.post("users/", user_hash)
  if config[:filename]
    File.open(config[:filename], "w") do |f|
      f.print(result["private_key"])
    end
  else
    ui.msg result["private_key"]
  end
  if config[:orgname]
    request_body = { user: username }
    response = root_rest.post("organizations/#{config[:orgname]}/association_requests", request_body)
    association_id = response["uri"].split("/").last
    root_rest.put("users/#{username}/association_requests/#{association_id}", { response: "accept" })
  end
end