Class: Chef::ChefFS::FileSystem::ChefServer::OrganizationMembersEntry

Inherits:
RestListEntry show all
Defined in:
lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb

Overview

/organizations/NAME/members.json reads data from:

  • GET /organizations/NAME/users

writes data to:

  • remove from list: DELETE /organizations/NAME/users/name

  • add to list: POST /organizations/NAME/users/name

Instance Attribute Summary

Attributes inherited from BaseFSObject

#name, #parent, #path

Instance Method Summary collapse

Methods inherited from RestListEntry

#_read_json, #api_child_name, #api_error_text, #chef_object, #compare_to, #display_name, #environment, #minimize_value, #normalize_value, #org, #read, #rest

Methods inherited from BaseFSObject

#can_have_child?, #chef_object, #child, #children, #compare_to, #create_child, #dir?, #path_for_printing, #read, #root

Constructor Details

#initialize(name, parent, exists = nil) ⇒ OrganizationMembersEntry

Returns a new instance of OrganizationMembersEntry.



16
17
18
19
# File 'lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb', line 16

def initialize(name, parent, exists = nil)
  super(name, parent)
  @exists = exists
end

Instance Method Details

#api_pathObject

/organizations/foo/members.json -> /organizations/foo/users



26
27
28
# File 'lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb', line 26

def api_path
  File.join(parent.api_path, "users")
end

#data_handlerObject



21
22
23
# File 'lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb', line 21

def data_handler
  Chef::ChefFS::DataHandler::OrganizationMembersDataHandler.new
end

#delete(recurse) ⇒ Object



38
39
40
# File 'lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb', line 38

def delete(recurse)
  raise Chef::ChefFS::FileSystem::OperationNotAllowedError.new(:delete, self)
end

#display_pathObject



30
31
32
# File 'lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb', line 30

def display_path
  "/members.json"
end

#exists?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb', line 34

def exists?
  parent.exists?
end

#write(contents) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb', line 42

def write(contents)
  desired_members = minimize_value(Chef::JSONCompat.parse(contents, create_additions: false))
  members = minimize_value(_read_json)
  (desired_members - members).each do |member|

    rest.post(api_path, "username" => member)
  rescue Net::HTTPClientException => e
    if %w{404 405}.include?(e.response.code)
      raise "Chef server at #{api_path} does not allow you to directly add members.  Please either upgrade your Chef server or move the users you want into invitations.json instead of members.json."
    else
      raise
    end

  end
  (members - desired_members).each do |member|
    rest.delete(File.join(api_path, member))
  end
end