Class: Opc::OpcUserCreate

Inherits:
Chef::Knife
  • Object
show all
Includes:
Chef::Mixin::RootRestv0
Defined in:
lib/chef/knife/opc_user_create.rb

Instance Method Summary collapse

Methods included from Chef::Mixin::RootRestv0

#root_rest

Instance Method Details

#prompt_for_passwordObject



97
98
99
# 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

#runObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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