Class: Sambot::Chef::Roles

Inherits:
Object
  • Object
show all
Defined in:
lib/sambot/chef/roles.rb

Constant Summary collapse

ROLE_COOKBOOK_ORGANIZATION =
'ads-role-cookbooks'
COOKBOOK_CONFIG =
'.config.yml'

Class Method Summary collapse

Class Method Details

.list_rolesObject



26
27
28
# File 'lib/sambot/chef/roles.rb', line 26

def list_roles
  SourceControl.list_organization_repositories(ROLE_COOKBOOK_ORGANIZATION)
end

.pin_cookbook_version(dependency_name, version = nil, role_name = nil) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/sambot/chef/roles.rb', line 12

def pin_cookbook_version(dependency_name, version = nil, role_name = nil)
  raise 'No dependency name provided' unless dependency_name
  roles = role_name ? [role_name] : list_roles
  roles.each do |role|
    update_dependency_version(repository, dependency_name, version)
  end
end

.update_config(file, dependency, version) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/sambot/chef/roles.rb', line 30

def update_config(file, dependency, version)
  body = Base64.decode64(file.content)
  new_contents = body.lines.map do |line|
    line.match(/^\s*- #{dependency}/) ? update_line(line, dependency, version) : line
  end.join
  new_contents == body.lines.join ? nil : new_contents
end

.update_dependency_version(repository, dependency_name, version) ⇒ Object



20
21
22
23
24
# File 'lib/sambot/chef/roles.rb', line 20

def update_dependency_version(repository, dependency_name, version)
  file = SourceControl.get_file(ROLE_COOKBOOK_ORGANIZATION, repository, COOKBOOK_CONFIG)
  config = update_config(file, dependency_name, version)
  config ? apply_changes(config, repository, file) : false
end