knife-mirror 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c1ce443c7aebf8ad72c144e835178828eb39be6
4
- data.tar.gz: 1038e4f000b8c38cb3c1465f104cc2ef3baf383e
3
+ metadata.gz: 6959dcdea79bcf027844a95a0f6c256ed3077ca8
4
+ data.tar.gz: 93c33862179f3ba34e8827edfa79c72ad1513a2f
5
5
  SHA512:
6
- metadata.gz: a7939d1dff7e649e5a533b5b4664799ce888fadc194d6ce7ecb489e989e361309485b104a388e13eb72a988004d33c77f597da003201c65f58eeb4d2357be97c
7
- data.tar.gz: 1c1a7091a71ecada1468d90af6de48a779eb206e55a5b0427aa4e7393e0c12c4d5c0e89119da7bc29b4d4acd7a93d7104b84819109841182f00fda4994533d53
6
+ metadata.gz: ac65600e7f31d661f19f4172835d1e5e7562b0f6aaa125e3216ea4cb40af04da5dc2dd79de51d359d9a125860677233970141234d6ccd448f1605f4bbe188448
7
+ data.tar.gz: fc84b432fd62a404b6d11e8556ef29cb82850efc11c91f763f5774da1a8a554c88bcae5d141ec55208d704ccc01b44a47c1b9ef0b8f6cb0ba807c7fee2c9d98a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # knife-mirror Change log
2
2
 
3
+ ## 0.1.2 (2015-09-28)
4
+
5
+ - process cookbook dependencies, if requested
6
+
3
7
  ## 0.1.1 (2015-09-25)
4
8
 
5
9
  - do not show orphaned cookbook count if count = 0
data/README.md CHANGED
@@ -18,6 +18,7 @@ oh, and, this is my first ever Gem, I don't have a clue what I'm doing...
18
18
  - specify source and target Supermarkets
19
19
  - save failed cookbook versions
20
20
  - configurable delay to ease load on Supermarkets
21
+ - process cookbook direct dependencies as well
21
22
 
22
23
  Most is based on working with diffs between source and target so we do not waste too many resources.
23
24
 
@@ -64,7 +65,7 @@ gem install knife-mirror
64
65
  or obtain this source (git clone or whatever) and
65
66
 
66
67
  ```
67
- gem build knife-mirror.gemspec; gem install knife-mirror-0.1.0.gem
68
+ gem build knife-mirror.gemspec; gem install knife-mirror-0.1.2.gem
68
69
  ```
69
70
 
70
71
  ## Use
@@ -82,6 +83,12 @@ Then things are really simple, while we still work on more advanced stuff:
82
83
  knife mirror apt -t https://supermarket.your.domain.tld
83
84
  ```
84
85
 
86
+ ### Only most recent version for a specific cookbook, plus its dependencies
87
+
88
+ ```
89
+ knife mirror apt -t https://supermarket.your.domain.tld --deps
90
+ ```
91
+
85
92
  ### Specific cookbook version
86
93
 
87
94
  ```
@@ -125,7 +132,6 @@ Wow, still lots to do, lots of wishes :(
125
132
  - proper replication of deprecation flag (not honored as part of the cookbook meta upload)
126
133
  - proper replication of urls (same reason)
127
134
  - replicate (and create) categories?
128
- - process dependencies
129
135
  - process replacement in case we're mirroring a deprecated cookbook
130
136
  - some automated testing
131
137
  - more/better docs?
@@ -26,6 +26,7 @@ class Chef
26
26
 
27
27
  deps do
28
28
  require 'chef/cookbook/metadata'
29
+ require 'chef/version_constraint'
29
30
  require 'chef/cookbook_site_streaming_uploader'
30
31
  end
31
32
 
@@ -56,7 +57,7 @@ class Chef
56
57
 
57
58
  option :deps,
58
59
  long: '--deps',
59
- description: 'Also process cookbook(s) dependencies. (TODO/WIP)'
60
+ description: 'Also process cookbook(s) dependencies.'
60
61
 
61
62
  option :reps,
62
63
  long: '--reps',
@@ -111,6 +112,21 @@ class Chef
111
112
  # Mirror just one single cookbook, latest version
112
113
  ui.info("Mirroring #{@name_args[0]} (latest version).")
113
114
  mirror_cookbook
115
+ if config[:deps]
116
+ ui.info('Mirroring dependencies as well...')
117
+ print "Fetching cookbook index from #{config[:supermarket_site]} (source)... "
118
+ universe = unauthenticated_get_rest("#{config[:supermarket_site]}/universe")
119
+ ui.info('Done!')
120
+ get_cookbook_version_meta['dependencies'].each do |cookbook, version_constraint|
121
+ universe[cookbook].sort_by { |version, _versionmeta| version.split('.').map(&:to_i) }.reverse!.each do |version, _versionmeta|
122
+ next unless Chef::VersionConstraint.new(version_constraint).include?(version)
123
+ ui.info("Most recent version matching constraint (#{version_constraint}) for cookbook #{cookbook}: #{version}")
124
+ mirror_cookbook(cookbook, version)
125
+ sleep(config[:delay].to_i) if config[:delay]
126
+ break
127
+ end
128
+ end
129
+ end
114
130
  end
115
131
  end
116
132
 
@@ -172,6 +188,10 @@ class Chef
172
188
  end
173
189
  end
174
190
 
191
+ def get_cookbook_version_meta(cookbook = @name_args[0], version = 'latest_version', api_url = "#{config[:supermarket_site]}/api/v1/cookbooks")
192
+ version == 'latest_version' ? unauthenticated_get_rest(get_cookbook_meta(cookbook, api_url)[version]) : unauthenticated_get_rest("#{api_url}/#{cookbook}/versions/#{version.gsub('.', '_')}")
193
+ end
194
+
175
195
  def cookbook_deprecated?(cookbookmeta)
176
196
  cookbookmeta['deprecated'] == true
177
197
  end
@@ -1,5 +1,5 @@
1
1
  # KnifeMirror version
2
2
  module KnifeMirror
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  MAJOR, MINOR, TINY = VERSION.split('.')
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife-mirror
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - G.J. Moed
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-25 00:00:00.000000000 Z
11
+ date: 2015-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef