class Opc::OpcUserDelete

Attributes

username[R]

Public Instance Methods

admin_group_memberships(orgs, username) click to toggle source
# File lib/chef/knife/opc_user_delete.rb, line 90
def admin_group_memberships(orgs, username)
  admin_of = []
  unremovable = []
  orgs.each do |org|
    if org.user_member_of_group?(username, "admins")
      admin_of << org
      if org.actor_delete_would_leave_admins_empty?
        unremovable << org
      end
    end
  end
  [admin_of, unremovable]
end
delete_user(username) click to toggle source
# File lib/chef/knife/opc_user_delete.rb, line 104
def delete_user(username)
  ui.stderr.puts "Deleting user #{username}."
  root_rest.delete("users/#{username}")
end
disassociate_user(orgs, username) click to toggle source
# File lib/chef/knife/opc_user_delete.rb, line 74
def disassociate_user(orgs, username)
  orgs.each  { |org| org.dissociate_user(username) }
end
error_exit_admin_group_member!(username, admin_of) click to toggle source

Error message that says how to removed from org admin groups before deleting Further

# File lib/chef/knife/opc_user_delete.rb, line 112
    def error_exit_admin_group_member!(username, admin_of)
      message = "#{username} is in the 'admins' group of the following organization(s):\n\n"
      admin_of.each { |org| message << "- #{org.name}\n" }
      message << <<~EOM

        Run this command again with the --remove-from-admin-groups option to
        remove the user from these admin group(s) automatically.

      EOM
      ui.fatal message
      exit 1
    end
error_exit_cant_remove_admin_membership!(username, only_admin_of) click to toggle source
# File lib/chef/knife/opc_user_delete.rb, line 125
    def error_exit_cant_remove_admin_membership!(username, only_admin_of)
      message = <<~EOM

        #{username} is the only member of the 'admins' group of the
        following organization(s):

      EOM
      only_admin_of.each { |org| message << "- #{org.name}\n" }
      message << <<~EOM

        Removing the only administrator of an organization can break it.
        Assign additional users or groups to the admin group(s) before
        deleting this user.

      EOM
      ui.fatal message
      exit 1
    end
org_memberships(username) click to toggle source
# File lib/chef/knife/opc_user_delete.rb, line 78
def org_memberships(username)
  org_data = root_rest.get("users/#{username}/organizations")
  org_data.map { |org| Chef::Org.new(org["organization"]["name"]) }
end
remove_from_admin_groups(admin_of, username) click to toggle source
# File lib/chef/knife/opc_user_delete.rb, line 83
def remove_from_admin_groups(admin_of, username)
  admin_of.each do |org|
    ui.stderr.puts "Removing #{username} from admins group of '#{org.name}'"
    org.remove_user_from_group("admins", username)
  end
end
run() click to toggle source
# File lib/chef/knife/opc_user_delete.rb, line 43
def run
  @username = @name_args[0]
  admin_memberships = []
  unremovable_memberships = []

  ui.confirm "Do you want to delete the user #{username}"

  unless config[:no_disassociate_user]
    ui.stderr.puts("Checking organization memberships...")
    orgs = org_memberships(username)
    if orgs.length > 0
      ui.stderr.puts("Checking admin group memberships for #{orgs.length} org(s).")
      admin_memberships, unremovable_memberships = admin_group_memberships(orgs, username)
    end

    unless admin_memberships.empty?
      unless config[:remove_from_admin_groups]
        error_exit_admin_group_member!(username, admin_memberships)
      end

      unless unremovable_memberships.empty?
        error_exit_cant_remove_admin_membership!(username, unremovable_memberships)
      end
      remove_from_admin_groups(admin_memberships, username)
    end
    disassociate_user(orgs, username)
  end

  delete_user(username)
end