Skip to content

Commit bfdb46a

Browse files
Tim Hinderliterdanielsdeleo
authored andcommitted
more mods for cookbook changes (for sandbox)
* 'version' attribute stored only in metadata for Cookbook model * all_latest_version CouchDB view * now loading the cookbook design documents on startup of chef-server
1 parent 84173b0 commit bfdb46a

2 files changed

Lines changed: 57 additions & 6 deletions

File tree

chef-server-api/app/controllers/cookbooks.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ def show
4444
cookbook = Chef::Cookbook.cdb_load(params[:id], params[:version])
4545
rescue ArgumentError => e
4646
raise NotFound, "Cannot find a cookbook named #{params[:id]} with version #{params[:version]}"
47+
rescue Chef::Exceptions::CouchDBNotFound => e
48+
raise NotFound, "Cannot find a cookbook named #{params[:id]} with version #{params[:version]}"
4749
end
4850
cookbook.generate_manifest { |opts| absolute_slice_url(:cookbook_segment, opts) }
4951
display cookbook

chef/lib/chef/cookbook.rb

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class Cookbook
3131

3232
attr_accessor :definition_files, :template_files, :remote_files,
3333
:lib_files, :resource_files, :provider_files, :name, :manifest,
34-
:metadata, :metadata_files, :status, :couchdb_rev, :couchdb, :version
34+
:metadata, :metadata_files, :status, :couchdb_rev, :couchdb
3535
attr_reader :recipe_files, :attribute_files, :couchdb_id
3636

3737
DESIGN_DOCUMENT = {
@@ -55,7 +55,50 @@ class Cookbook
5555
}
5656
}
5757
EOJS
58-
}
58+
},
59+
"all_latest_version" => {
60+
"map" => %q@
61+
function(doc) {
62+
if (doc.chef_type == "cookbook") {
63+
emit(doc.cookbook_name, [doc.cookbook_name, doc.version]);
64+
}
65+
}
66+
@,
67+
"reduce" => %q@
68+
function(keys, values, rereduce) {
69+
var result = null;
70+
71+
for (var idx in values) {
72+
var value = values[idx];
73+
74+
if (idx == 0) {
75+
result = value;
76+
continue;
77+
}
78+
79+
var valueParts = value[1].split('.').map(function(v) { return parseInt(v); });
80+
var resultParts = result[1].split('.').map(function(v) { return parseInt(v); });
81+
82+
if (valueParts[0] != resultParts[0]) {
83+
if (valueParts[0] > resultParts[0]) {
84+
result = value;
85+
}
86+
}
87+
else if (valueParts[1] != resultParts[1]) {
88+
if (valueParts[1] > resultParts[1]) {
89+
result = value;
90+
}
91+
}
92+
else if (valueParts[2] != resultParts[2]) {
93+
if (valueParts[2] > resultParts[2]) {
94+
result = value;
95+
}
96+
}
97+
}
98+
return result;
99+
}
100+
@
101+
},
59102
}
60103
}
61104

@@ -81,9 +124,16 @@ def initialize(name, couchdb=nil)
81124
@couchdb_rev = nil
82125
@status = :ready
83126
@manifest = nil
84-
@version = nil
85127
@metadata = {}
86128
end
129+
130+
def version
131+
@metadata['version']
132+
end
133+
134+
def version=(new_version)
135+
@metadata['version'] = new_version
136+
end
87137

88138
def full_name
89139
"#{name}-#{version}"
@@ -329,8 +379,7 @@ def generate_manifest(&url_generation)
329379
end
330380
response[:cookbook_name] = name.to_s
331381
response[:metadata] = metadata
332-
response[:version] = metadata.version
333-
@version = metadata.version
382+
response[:version] = metadata['version']
334383
response[:name] = full_name
335384
@manifest = response
336385
end
@@ -348,7 +397,7 @@ def self.chef_server_rest
348397

349398
# Save this cookbook via the REST API
350399
def save
351-
chef_server_rest.put_rest("cookbooks/#{@name}/#{@version}", self)
400+
chef_server_rest.put_rest("cookbooks/#{@name}/#{version}", self)
352401
self
353402
end
354403

0 commit comments

Comments
 (0)