Class: Chef::Provisioning::ChefManagedEntryStore

Inherits:
ManagedEntryStore show all
Defined in:
lib/chef/provisioning/chef_managed_entry_store.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ManagedEntryStore

#delete, #get, #get!, #get_or_new, #new_entry

Constructor Details

#initialize(chef_server = Cheffish.default_chef_server) ⇒ ChefManagedEntryStore



7
8
9
# File 'lib/chef/provisioning/chef_managed_entry_store.rb', line 7

def initialize(chef_server = Cheffish.default_chef_server)
  @chef_server = chef_server
end

Instance Attribute Details

#chef_serverObject (readonly)

Returns the value of attribute chef_server.



11
12
13
# File 'lib/chef/provisioning/chef_managed_entry_store.rb', line 11

def chef_server
  @chef_server
end

Class Method Details

.type_names_for_backcompatObject

A list of the name that we used to use to store a given type before we standardized on “just use the resource name so we don’t create collisions.” Will be used to look up the old data.



123
124
125
# File 'lib/chef/provisioning/chef_managed_entry_store.rb', line 123

def self.type_names_for_backcompat
  @@type_names_for_backcompat ||= {}
end

Instance Method Details

#chef_apiObject



13
14
15
# File 'lib/chef/provisioning/chef_managed_entry_store.rb', line 13

def chef_api
  @chef_api ||= Cheffish.chef_server_api(chef_server)
end

#delete_data(resource_type, name, action_handler) ⇒ Boolean

Delete the given data



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/chef/provisioning/chef_managed_entry_store.rb', line 87

def delete_data(resource_type, name, action_handler)
  _chef_server = self.chef_server
  Chef::Provisioning.inline_resource(action_handler) do
    if resource_type == :machine
      chef_node name do
        chef_server _chef_server
        action :delete
      end
    else
      chef_data_bag_item name do
        chef_server _chef_server
        data_bag resource_type.to_s
        action :delete
      end
    end
  end

  backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
  if backcompat_type && backcompat_type != resource_type
    delete_data(backcompat_type, name, action_handler)
  end
end

#get_data(resource_type, name) ⇒ Hash, Array

Get the given data



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/chef/provisioning/chef_managed_entry_store.rb', line 25

def get_data(resource_type, name)
  begin
    if resource_type == :machine
      chef_api.get("nodes/#{name}")
    else
      chef_api.get("data/#{resource_type}/#{name}")
    end
  rescue Net::HTTPServerException => e
    if e.response.code == '404'
      backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
      if backcompat_type && backcompat_type != resource_type
        get_data(backcompat_type, name)
      else
        nil
      end
    else
      raise
    end
  end
end

#identifier(resource_type, name) ⇒ Object



110
111
112
113
114
115
116
# File 'lib/chef/provisioning/chef_managed_entry_store.rb', line 110

def identifier(resource_type, name)
  if resource_type == :machine
    File.join(chef_server[:chef_server_url], "nodes", name)
  else
    File.join(chef_server[:chef_server_url], "data", resource_type.to_s, name)
  end
end

#save_data(resource_type, name, data, action_handler) ⇒ Object

Save the given data



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
# File 'lib/chef/provisioning/chef_managed_entry_store.rb', line 53

def save_data(resource_type, name, data, action_handler)
  _chef_server = self.chef_server
  Chef::Provisioning.inline_resource(action_handler) do
    if resource_type == :machine
      chef_node name do
        chef_server _chef_server
        raw_json data
      end
    else
      chef_data_bag resource_type.to_s do
        chef_server _chef_server
      end
      chef_data_bag_item name do
        chef_server _chef_server
        data_bag resource_type.to_s
        raw_data data
      end
    end
  end

  backcompat_type = ChefManagedEntryStore.type_names_for_backcompat[resource_type]
  if backcompat_type && backcompat_type != resource_type
    delete_data(backcompat_type, name, action_handler)
  end
end