diff options
author | Vasu1105 <vasundhara.jagdale@msystechnologies.com> | 2019-10-22 19:04:02 +0530 |
---|---|---|
committer | Vasu1105 <vasundhara.jagdale@msystechnologies.com> | 2019-12-16 12:33:57 +0530 |
commit | 485cd1b68c7b912c936175688e14741db587b664 (patch) | |
tree | 7802df153f37b6c2e43bd03db9ce347abbb36280 | |
parent | cd444f5dfd39e4494e0a8495b20b39259dab923a (diff) | |
download | chef-485cd1b68c7b912c936175688e14741db587b664.tar.gz |
Genrates metadata.json from metadata.rb if json file does not exist.
Signed-off-by: Vasu1105 <vasundhara.jagdale@msystechnologies.com>
-rw-r--r-- | lib/chef/cookbook_uploader.rb | 13 | ||||
-rw-r--r-- | spec/data/cookbooks/apache2/metadata.json | 33 | ||||
-rw-r--r-- | spec/data/cookbooks/java/metadata.json | 33 | ||||
-rw-r--r-- | spec/integration/knife/chef_fs_data_store_spec.rb | 4 | ||||
-rw-r--r-- | spec/integration/knife/upload_spec.rb | 41 |
5 files changed, 119 insertions, 5 deletions
diff --git a/lib/chef/cookbook_uploader.rb b/lib/chef/cookbook_uploader.rb index ffc4040194..bf2d94b2ba 100644 --- a/lib/chef/cookbook_uploader.rb +++ b/lib/chef/cookbook_uploader.rb @@ -46,6 +46,12 @@ class Chef end def upload_cookbooks + cookbooks.each do |cookbook| + next if cookbook.all_files.include?("#{cookbook.root_paths[0]}/metadata.json") + + generate_metadata_json(cookbook.name.to_s,cookbook) + end + # Syntax Check validate_cookbooks # generate checksums of cookbook files and create a sandbox @@ -114,6 +120,13 @@ class Chef Chef::Log.info("Upload complete!") end + def generate_metadata_json(cookbook_name,cookbook) + metadata = Chef::Knife::CookbookMetadata.new + metadata.generate_metadata_from_file(cookbook_name, "#{cookbook.root_paths[0]}/metadata.rb") + cookbook.all_files << "#{cookbook.root_paths[0]}/metadata.json" + cookbook.cookbook_manifest.send(:generate_manifest) + end + def uploader_function_for(file, checksum, url, checksums_to_upload) lambda do # Checksum is the hexadecimal representation of the md5, diff --git a/spec/data/cookbooks/apache2/metadata.json b/spec/data/cookbooks/apache2/metadata.json new file mode 100644 index 0000000000..18f5e50bb3 --- /dev/null +++ b/spec/data/cookbooks/apache2/metadata.json @@ -0,0 +1,33 @@ +{ + "name": "apache2", + "description": "", + "long_description": "", + "maintainer": "", + "maintainer_email": "", + "license": "All rights reserved", + "platforms": { + + }, + "dependencies": { + + }, + "providing": { + + }, + "recipes": { + + }, + "version": "0.0.1", + "source_url": "", + "issues_url": "", + "privacy": false, + "chef_versions": [ + + ], + "ohai_versions": [ + + ], + "gems": [ + + ] +} diff --git a/spec/data/cookbooks/java/metadata.json b/spec/data/cookbooks/java/metadata.json new file mode 100644 index 0000000000..9d46842f3c --- /dev/null +++ b/spec/data/cookbooks/java/metadata.json @@ -0,0 +1,33 @@ +{ + "name": "java", + "description": "", + "long_description": "", + "maintainer": "", + "maintainer_email": "", + "license": "All rights reserved", + "platforms": { + + }, + "dependencies": { + + }, + "providing": { + + }, + "recipes": { + + }, + "version": "0.0.1", + "source_url": "", + "issues_url": "", + "privacy": false, + "chef_versions": [ + + ], + "ohai_versions": [ + + ], + "gems": [ + + ] +} diff --git a/spec/integration/knife/chef_fs_data_store_spec.rb b/spec/integration/knife/chef_fs_data_store_spec.rb index 58ca5121c5..95fee18257 100644 --- a/spec/integration/knife/chef_fs_data_store_spec.rb +++ b/spec/integration/knife/chef_fs_data_store_spec.rb @@ -194,7 +194,7 @@ describe "ChefFSDataStore tests", :workstation do Uploading x [1.0.0] Uploaded 1 cookbook. EOM - knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/x/\n/cookbooks/x/metadata.rb\n" + knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/x/\n/cookbooks/x/metadata.json\n/cookbooks/x/metadata.rb\n" end it "knife raw -z -i empty.json -m PUT /data/x/y" do @@ -251,7 +251,7 @@ describe "ChefFSDataStore tests", :workstation do Uploading z [1.0.0] Uploaded 1 cookbook. EOM - knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/z/\n/cookbooks/z/metadata.rb\n" + knife("list --local -Rfp /cookbooks").should_succeed "/cookbooks/z/\n/cookbooks/z/metadata.json\n/cookbooks/z/metadata.rb\n" end it "knife raw -z -i empty.json -m POST /data" do diff --git a/spec/integration/knife/upload_spec.rb b/spec/integration/knife/upload_spec.rb index 1a6ddceb17..78ed97f02a 100644 --- a/spec/integration/knife/upload_spec.rb +++ b/spec/integration/knife/upload_spec.rb @@ -289,8 +289,8 @@ describe "knife upload", :workstation do Created /data_bags/x Created /data_bags/x/y.json EOM - knife("diff --name-status /data_bags").should_succeed <<EOM -EOM + knife("diff --name-status /data_bags").should_succeed <<~EOM + EOM expect(Chef::JSONCompat.parse(knife("raw /data/x/y").stdout, create_additions: false).keys.sort).to eq(%w{foo id}) end @@ -548,6 +548,7 @@ EOM when_the_repository "has a cookbook" do before do file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0") + file "cookbooks/x/metadata.json", { name: "x", version: "1.0.0" } file "cookbooks/x/onlyin1.0.0.rb", "old_text" end @@ -561,6 +562,38 @@ EOM knife("diff --name-status /cookbooks").should_succeed <<~EOM M\t/cookbooks/x/metadata.rb D\t/cookbooks/x/onlyin1.0.1.rb + A\t/cookbooks/x/metadata.json + A\t/cookbooks/x/onlyin1.0.0.rb + EOM + knife("upload --purge /cookbooks/x").should_succeed <<~EOM + Updated /cookbooks/x + EOM + knife("diff --name-status /cookbooks").should_succeed <<~EOM + M\t/cookbooks/x/metadata.rb + D\t/cookbooks/x/onlyin1.0.1.rb + A\t/cookbooks/x/metadata.json + A\t/cookbooks/x/onlyin1.0.0.rb + EOM + end + end + end + + when_the_repository "has a cookbook" do + before do + file "cookbooks/x/metadata.rb", cb_metadata("x", "1.0.0") + file "cookbooks/x/onlyin1.0.0.rb", "old_text" + end + + when_the_chef_server "has a later version for the cookbook" do + before do + cookbook "x", "1.0.0", { "onlyin1.0.0.rb" => "" } + cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" } + end + + it "knife upload /cookbooks/x uploads the local version and generates metadata.json from metadata.rb and uploads it." do + knife("diff --name-status /cookbooks").should_succeed <<~EOM + M\t/cookbooks/x/metadata.rb + D\t/cookbooks/x/onlyin1.0.1.rb A\t/cookbooks/x/onlyin1.0.0.rb EOM knife("upload --purge /cookbooks/x").should_succeed <<~EOM @@ -569,6 +602,7 @@ EOM knife("diff --name-status /cookbooks").should_succeed <<~EOM M\t/cookbooks/x/metadata.rb D\t/cookbooks/x/onlyin1.0.1.rb + A\t/cookbooks/x/metadata.json A\t/cookbooks/x/onlyin1.0.0.rb EOM end @@ -593,7 +627,7 @@ EOM cookbook "x", "1.0.1", { "onlyin1.0.1.rb" => "hi" } end - it "knife upload /cookbooks/x uploads the local version" do + it "knife upload /cookbooks/x uploads the local version and generates metadata.json before upload and uploads it." do knife("diff --name-status /cookbooks").should_succeed <<~EOM M\t/cookbooks/x/metadata.rb D\t/cookbooks/x/onlyin1.0.1.rb @@ -605,6 +639,7 @@ EOM knife("diff --name-status /cookbooks").should_succeed <<~EOM M\t/cookbooks/x/metadata.rb D\t/cookbooks/x/onlyin1.0.1.rb + A\t/cookbooks/x/metadata.json A\t/cookbooks/x/onlyin1.0.0.rb EOM end |