Class: Cheffish::ActorProviderBase
Instance Method Summary
collapse
#apply_modifiers, #apply_run_list_modifiers, #augment_current_json, #current_json, #current_resource_exists?, #json_differences, #json_differences_internal, #json_to_resource, #new_json, #normalize, #normalize_for_post, #normalize_for_put, #not_found_resource, #resource_to_json, #rest, #same_run_list_item
Instance Method Details
#augment_new_json(json) ⇒ Object
96
97
98
99
100
101
|
# File 'lib/cheffish/actor_provider_base.rb', line 96
def augment_new_json(json)
if new_public_key
json['public_key'] = new_public_key.to_pem
end
json
end
|
#create_actor ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/cheffish/actor_provider_base.rb', line 6
def create_actor
if new_resource.before
new_resource.before.call(new_resource)
end
current_public_key = new_json['public_key']
differences = json_differences(current_json, new_json)
if current_resource_exists?
if differences.size > 0
description = [ "update #{actor_type} #{new_resource.name} at #{rest.url}" ] + differences
converge_by description do
result = rest.put("#{actor_type}s/#{new_resource.name}", normalize_for_put(new_json))
current_public_key, current_public_key_format = Cheffish::KeyFormatter.decode(result['public_key']) if result['public_key']
end
end
else
if !new_public_key
raise "You must specify a public key to create a #{actor_type}! Use the private_key resource to create a key, and pass it in with source_key_path."
end
description = [ "create #{actor_type} #{new_resource.name} at #{rest.url}" ] + differences
converge_by description do
result = rest.post("#{actor_type}s", normalize_for_post(new_json))
current_public_key, current_public_key_format = Cheffish::KeyFormatter.decode(result['public_key']) if result['public_key']
end
end
if new_resource.output_key_path
key_content = Cheffish::KeyFormatter.encode(current_public_key, { :format => new_resource.output_key_format })
if !current_resource.output_key_path
action = 'create'
elsif key_content != IO.read(current_resource.output_key_path)
action = 'overwrite'
else
action = nil
end
if action
converge_by "#{action} public key #{new_resource.output_key_path}" do
IO.write(new_resource.output_key_path, key_content)
end
end
end
if new_resource.after
new_resource.after.call(self, new_json, server_private_key, server_public_key)
end
end
|
#delete_actor ⇒ Object
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/cheffish/actor_provider_base.rb', line 59
def delete_actor
if current_resource_exists?
converge_by "delete #{actor_type} #{new_resource.name} at #{rest.url}" do
rest.delete("#{actor_type}s/#{new_resource.name}")
Chef::Log.info("#{new_resource} deleted #{actor_type} #{new_resource.name} at #{rest.url}")
end
end
if current_resource.output_key_path
converge_by "delete public key #{current_resource.output_key_path}" do
::File.unlink(current_resource.output_key_path)
end
end
end
|
#load_current_resource ⇒ Object
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/cheffish/actor_provider_base.rb', line 103
def load_current_resource
begin
json = rest.get("#{actor_type}s/#{new_resource.name}")
@current_resource = json_to_resource(json)
rescue Net::HTTPServerException => e
if e.response.code == "404"
@current_resource = not_found_resource
else
raise
end
end
if new_resource.output_key_path && ::File.exist?(new_resource.output_key_path)
current_resource.output_key_path = new_resource.output_key_path
end
end
|
#new_public_key ⇒ Object
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/cheffish/actor_provider_base.rb', line 73
def new_public_key
@new_public_key ||= begin
if new_resource.source_key
if new_resource.source_key.is_a?(String)
Cheffish::KeyFormatter.decode(new_resource.source_key)
elsif new_resource.source_key.private?
new_resource.source_key.public_key
else
new_resource.source_key
end
elsif new_resource.source_key_path
source_key, source_key_format = Cheffish::KeyFormatter.decode(IO.read(new_resource.source_key_path), new_resource.source_key_pass_phrase, new_resource.source_key_path)
if source_key.private?
source_key.public_key
else
source_key
end
else
nil
end
end
end
|