Class: Promote::Versioner

Inherits:
Object
  • Object
show all
Defined in:
lib/promote/versioner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = Config.new) ⇒ Versioner

Returns a new instance of Versioner.



5
6
7
# File 'lib/promote/versioner.rb', line 5

def initialize(config = Config.new)
  @config = config
end

Instance Attribute Details

#configObject

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_cookbooksObject



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_environmentsObject



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_rolesObject



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