clc-promote 0.1.3 → 0.1.4

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: be0a71a3fcad72dd64f5a17a5697ac0f9e2ad9d3
4
- data.tar.gz: 21f7a69d62f5a17ac227d84a780eb926acfa7bcb
3
+ metadata.gz: fe800d49579f78d5f25faf255f23d48415f153c0
4
+ data.tar.gz: bf16f163d2d0e64d93988d66164e4acdaacc9b81
5
5
  SHA512:
6
- metadata.gz: a0223ecfd085ddfc069f88dfb3e8655a386866b0a108b1c122db9c9698e0620027ab6b49b35eb7bee5abf27716153297b4e4480a4145ce148758d56ce64e5300
7
- data.tar.gz: f2b82702ca79dc2f05b34b51520b64991e7f706c12c17b4db1476c9fd118031083f6943437760c30d6983cfc2593f17aba48a5bda40f914224942d8d263aa7a5
6
+ metadata.gz: 95aab19d63d79dddfbe748a8ed13f295a2d13951740b8c28ecfb780c1cd58ff2c04ecf7f25a6ed522545e197cb25dc8d2123cb80bf0b662cefd335578fdf996c
7
+ data.tar.gz: d578a8370523bf53ca4b32bec9c4167b6b44b760434f56d2cfb86440cedf723d05f9677e8a4db90ccc5f59d84b15d33564bd65666d9d28ba63c4d445e800b955
data/lib/promote.rb CHANGED
@@ -1 +1,3 @@
1
- require 'promote/versioner'
1
+ require 'promote/config'
2
+ require 'promote/uploader'
3
+ require 'promote/versioner'
@@ -0,0 +1,23 @@
1
+ module Promote
2
+ class Config
3
+ def initialize(options = {})
4
+ options.each do |k, v|
5
+ self.send("#{k}=", v) if self.respond_to?(k)
6
+ end
7
+ self.repo_root ||= Dir.pwd
8
+ self.cookbook_directory ||= File.join(repo_root, "cookbooks")
9
+ self.environment_directory ||= File.join(repo_root, "environments")
10
+ self.data_bag_directory ||= File.join(repo_root, "data_bags")
11
+ self.temp_directory ||= "/tmp/promote"
12
+ end
13
+
14
+ attr_accessor :repo_root
15
+ attr_accessor :cookbook_directory
16
+ attr_accessor :environment_directory
17
+ attr_accessor :data_bag_directory
18
+ attr_accessor :temp_directory
19
+ attr_accessor :node_name
20
+ attr_accessor :client_key
21
+ attr_accessor :chef_server_url
22
+ end
23
+ end
@@ -5,8 +5,10 @@ module Promote
5
5
 
6
6
  class RakeTasks < ::Rake::TaskLib
7
7
 
8
- def initialize(repo_root)
9
- @versioner = Versioner.new(repo_root)
8
+ def initialize(config)
9
+ config = Config.new(config) if config.is_a?(Hash)
10
+ config = Config.new({ :repo_root => config }) if config.is_a?(String)
11
+ @versioner = Versioner.new(config)
10
12
  yield self if block_given?
11
13
  define_version_cookbook
12
14
  define_version_cookbooks
@@ -79,5 +81,16 @@ module Promote
79
81
  end
80
82
  end
81
83
 
84
+ def define_upload_cookbooks
85
+ namespace "Promote" do
86
+ desc "Upload all cookbooks to chef server"
87
+ task "upload_cookbooks" do
88
+ @uploader.upload_cookbooks.each do |result|
89
+ #puts "Versioned cookbook: #{result[:cookbook]} v#{result[:version]}"
90
+ end
91
+ end
92
+ end
93
+ end
94
+
82
95
  end
83
96
  end
@@ -0,0 +1,47 @@
1
+ require 'chef'
2
+ require 'chef/knife/cookbook_upload'
3
+
4
+ module Promote
5
+ class Uploader
6
+ def initialize(config)
7
+ @config = config
8
+ validate_config
9
+ end
10
+
11
+ def upload_cookbook(cookbook_name)
12
+ berks_name = File.join(config.cookbook_directory, cookbook_name, "Berksfile")
13
+ upload_dir = config.cookbook_directory
14
+ if File.exist?(berks_name)
15
+ FileUtils.rm_rf(config.temp_directory) if Dir.exist?(config.temp_directory)
16
+ berksfile = Berkshelf::Berksfile.from_file(berks_name)
17
+ berksfile.vendor(config.temp_directory)
18
+ upload_dir = config.temp_directory
19
+ end
20
+
21
+ knife = Chef::Knife::CookbookUpload.new()
22
+ Chef::Config.reset
23
+ Chef::Config[:client_key] = config.client_key
24
+ Chef::Config[:chef_server_url] = config.chef_server_url
25
+ Chef::Config[:node_name] = config.node_name
26
+ knife.config[:all] = true
27
+ knife.config[:cookbook_path] = upload_dir
28
+ knife.run
29
+ end
30
+
31
+ attr_accessor :config
32
+
33
+ private
34
+
35
+ def validate_config
36
+ required_keys = [:client_key, :chef_server_url, :node_name]
37
+ missing_keys = []
38
+ required_keys.each do |key|
39
+ missing_keys << key if config.send(key).nil?
40
+ end
41
+
42
+ unless missing_keys.empty?
43
+ raise "missing required config options: #{missing_keys.join(', ')}"
44
+ end
45
+ end
46
+ end
47
+ end
@@ -4,16 +4,16 @@ require 'json'
4
4
 
5
5
  module Promote
6
6
  class Versioner
7
- def initialize(repo_root = Dir.pwd)
8
- @repo_root = repo_root
9
- @git = Git.open(git_root(repo_root))
7
+ def initialize(config = Config.new)
8
+ @config = config
9
+ @git = Git.open(git_root(config.repo_root))
10
10
  version_tags = @git.tags.select { |t| t.name[/^[0-9\.]+/] }
11
11
  @current_tag = version_tags[-1]
12
12
  @sha1 = @git.log(10000).between(current_tag.sha).first.sha
13
13
  end
14
14
 
15
15
  def version_cookbook(cookbook_name)
16
- dir = File.join(cookbook_directory, cookbook_name)
16
+ dir = File.join(config.cookbook_directory, cookbook_name)
17
17
  cookbook_name = File.basename(dir)
18
18
  version = version_number(current_tag, dir)
19
19
  metadata_file = File.join(dir, "metadata.rb")
@@ -35,7 +35,7 @@ module Promote
35
35
  end
36
36
 
37
37
  def version_cookbooks
38
- cookbooks = Dir.glob(File.join(cookbook_directory, "*"))
38
+ cookbooks = Dir.glob(File.join(config.cookbook_directory, "*"))
39
39
  results = []
40
40
  cookbooks.each do |file|
41
41
  cookbook = File.basename(file)
@@ -45,7 +45,7 @@ module Promote
45
45
  end
46
46
  end
47
47
  cookbooks.each do |cookbook|
48
- berks_name = File.join(cookbook_directory, File.basename(cookbook), "Berksfile")
48
+ berks_name = File.join(config.cookbook_directory, File.basename(cookbook), "Berksfile")
49
49
  if File.exist?(berks_name)
50
50
  berksfile = Berkshelf::Berksfile.from_file(berks_name)
51
51
  berksfile.install
@@ -54,15 +54,14 @@ module Promote
54
54
  results
55
55
  end
56
56
 
57
- def version_data_bag(data_bag_name)
58
- version_json data_bag_directory, data_bag_name
57
+ def version_data_bag(data_bag_path)
58
+ version_json File.dirname(data_bag_path), File.basename(data_bag_path, File.extname(data_bag_path))
59
59
  end
60
60
 
61
61
  def version_data_bags
62
62
  results = []
63
- Dir.glob(File.join(data_bag_directory, "**", "*.json")).each do |file|
64
- data_bag = File.basename(file, File.extname(file))
65
- result = version_data_bag(data_bag)
63
+ Dir.glob(File.join(config.data_bag_directory, "**", "*.json")).each do |file|
64
+ result = version_data_bag(file)
66
65
  if !result.nil?
67
66
  results << result
68
67
  end
@@ -71,14 +70,14 @@ module Promote
71
70
  end
72
71
 
73
72
  def version_environment(environment_name)
74
- version_json environment_directory, environment_name do | content |
73
+ version_json config.environment_directory, environment_name do | content |
75
74
  content['override_attributes']
76
75
  end
77
76
  end
78
77
 
79
78
  def version_environments
80
79
  results = []
81
- Dir.glob(File.join(environment_directory, "*.json")).each do |file|
80
+ Dir.glob(File.join(config.environment_directory, "*.json")).each do |file|
82
81
  environment = File.basename(file ,File.extname(file))
83
82
  result = version_environment(environment)
84
83
  if !result.nil?
@@ -88,17 +87,7 @@ module Promote
88
87
  results
89
88
  end
90
89
 
91
- def cookbook_directory
92
- File.join(@repo_root, "cookbooks")
93
- end
94
-
95
- def environment_directory
96
- File.join(@repo_root, "environments")
97
- end
98
-
99
- def data_bag_directory
100
- File.join(@repo_root, "data_bags/datacenters")
101
- end
90
+ attr_accessor :config
102
91
 
103
92
  private
104
93
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clc-promote
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - CenturyLink Cloud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-15 00:00:00.000000000 Z
11
+ date: 2014-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: knife-spork
@@ -119,7 +119,9 @@ extra_rdoc_files:
119
119
  files:
120
120
  - README.md
121
121
  - lib/promote.rb
122
+ - lib/promote/config.rb
122
123
  - lib/promote/rake_tasks.rb
124
+ - lib/promote/uploader.rb
123
125
  - lib/promote/versioner.rb
124
126
  homepage: https://github.com/tier3/DevOps/gems/clc-promote
125
127
  licenses: []