Class: Promote::Versioner
- Inherits:
-
Object
- Object
- Promote::Versioner
- Defined in:
- lib/promote/versioner.rb
Instance Attribute Summary collapse
-
#config ⇒ Object
Returns the value of attribute config.
Instance Method Summary collapse
- #constrain_environment(environment_name, cookbook_name) ⇒ Object
-
#initialize(config = Config.new) ⇒ Versioner
constructor
A new instance of Versioner.
- #is_dirty(source_environment, target_environment, cookbook_name, dependency_hash = nil) ⇒ Object
- #version_cookbook(cookbook_name) ⇒ Object
- #version_cookbooks ⇒ Object
- #version_environment(environment_name) ⇒ Object
- #version_environments ⇒ Object
- #version_role(role_name) ⇒ Object
- #version_roles ⇒ Object
Constructor Details
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
101 102 103 |
# File 'lib/promote/versioner.rb', line 101 def config @config end |
Instance Method Details
#constrain_environment(environment_name, cookbook_name) ⇒ Object
80 81 82 83 84 85 |
# File 'lib/promote/versioner.rb', line 80 def constrain_environment(environment_name, cookbook_name) dependencies = Cookbook.new(cookbook_name, config).dependencies env_file = EnvironmentFile.new(environment_name, config) env_file.write_cookbook_versions(dependencies) dependencies end |
#is_dirty(source_environment, target_environment, cookbook_name, dependency_hash = nil) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/promote/versioner.rb', line 87 def is_dirty(source_environment, target_environment, cookbook_name, dependency_hash = nil) target_env_file = EnvironmentFile.new(target_environment, config) return true unless target_env_file.cookbook_versions.has_key?(cookbook_name) source_env_file = EnvironmentFile.new(source_environment, config) target_version_parts = target_env_file.cookbook_versions[cookbook_name].split('.') target_version = target_version_parts[0..2].join('.') target_hash = nil if target_version_parts.count > 3 target_hash = target_version_parts[3] end return source_env_file.cookbook_versions[cookbook_name] != target_version || dependency_hash != target_hash end |
#version_cookbook(cookbook_name) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/promote/versioner.rb', line 9 def version_cookbook(cookbook_name) cookbook = Cookbook.new(cookbook_name, config) repo = GitRepo.new(cookbook.path) version = repo.version_number if cookbook.version.to_s != version cookbook.version = Semverse::Version.new(version) cookbook.stamp_commit(repo.sha1) return { :cookbook => cookbook_name, :version => version, :sha1 => repo.sha1 } end end |
#version_cookbooks ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/promote/versioner.rb', line 24 def version_cookbooks results = [] Dir.glob(File.join(config.cookbook_directory, "*")).each do |file| result = version_cookbook(File.basename(file)) if !result.nil? results << result end end results end |
#version_environment(environment_name) ⇒ Object
35 36 37 38 39 |
# File 'lib/promote/versioner.rb', line 35 def version_environment(environment_name) version_json config.environment_directory, environment_name do | content | content['override_attributes'] end end |
#version_environments ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/promote/versioner.rb', line 41 def version_environments results = [] Dir.glob(File.join(config.environment_directory, "*.json")).each do |file| result = version_environment(File.basename(file ,File.extname(file))) if !result.nil? results << result end end results end |
#version_role(role_name) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/promote/versioner.rb', line 52 def version_role(role_name) # if role doesn't include an override_attributes key, create it file = File.join(config.role_directory, "#{role_name}.json") role = JSON.parse(File.read(file)) if !role.has_key?("override_attributes") overrides_hash = { "override_attributes" => {} } role.merge!(overrides_hash) File.open(file, 'w') do |out| out << JSON.pretty_generate(role) end end version_json config.role_directory, role_name do | content | content['override_attributes'] end end |
#version_roles ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/promote/versioner.rb', line 69 def version_roles results = [] Dir.glob(File.join(config.role_directory, "*.json")).each do |file| result = version_role(File.basename(file ,File.extname(file))) if !result.nil? results << result end end results end |