Class: ChefDK::PolicyfileServices::ExportRepo
Constant Summary
collapse
- POLICY_GROUP =
Policy groups provide namespaces for policies so that a Chef Infra Server can have multiple active iterations of a policy at once, but we don’t need this when serving a single exported policy via Chef Zero, so hardcode it to a “well known” value:
"local".freeze
Instance Attribute Summary collapse
Instance Method Summary
collapse
#cache_path, #policyfile_expanded_path, #policyfile_filename, #policyfile_lock_expanded_path, #relative_paths_root
Constructor Details
#initialize(policyfile: nil, export_dir: nil, root_dir: nil, archive: false, force: false) ⇒ ExportRepo
Returns a new instance of ExportRepo.
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 48
def initialize(policyfile: nil, export_dir: nil, root_dir: nil, archive: false, force: false)
@root_dir = root_dir
@export_dir = File.expand_path(export_dir)
@archive = archive
@force_export = force
@policy_data = nil
@policyfile_lock = nil
policyfile_rel_path = policyfile || "Policyfile.rb"
policyfile_full_path = File.expand_path(policyfile_rel_path, root_dir)
@storage_config = Policyfile::StorageConfig.new.use_policyfile(policyfile_full_path)
@staging_dir = nil
end
|
Instance Attribute Details
#export_dir ⇒ Object
Returns the value of attribute export_dir.
46
47
48
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 46
def export_dir
@export_dir
end
|
#root_dir ⇒ Object
Returns the value of attribute root_dir.
45
46
47
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 45
def root_dir
@root_dir
end
|
#storage_config ⇒ Object
Returns the value of attribute storage_config.
44
45
46
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 44
def storage_config
@storage_config
end
|
Instance Method Details
#archive? ⇒ Boolean
64
65
66
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 64
def archive?
@archive
end
|
#archive_file_location ⇒ Object
91
92
93
94
95
96
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 91
def archive_file_location
return nil unless archive?
filename = "#{policyfile_lock.name}-#{policyfile_lock.revision_id}.tgz"
File.join(export_dir, filename)
end
|
#export ⇒ Object
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 98
def export
with_staging_dir do
create_repo_structure
copy_cookbooks
create_policyfile_repo_item
create_policy_group_repo_item
copy_policyfile_lock
create_client_rb
create_readme_md
if archive?
create_archive
else
mv_staged_repo
end
end
rescue => error
msg = "Failed to export policy (in #{policyfile_filename}) to #{export_dir}"
raise PolicyfileExportRepoError.new(msg, error)
end
|
#policy_data ⇒ Object
81
82
83
84
85
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 81
def policy_data
@policy_data ||= FFI_Yajl::Parser.parse(IO.read(policyfile_lock_expanded_path))
rescue => error
raise PolicyfileExportRepoError.new("Error reading lockfile #{policyfile_lock_expanded_path}", error)
end
|
#policy_name ⇒ Object
68
69
70
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 68
def policy_name
policyfile_lock.name
end
|
#policyfile_lock ⇒ Object
87
88
89
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 87
def policyfile_lock
@policyfile_lock || validate_lockfile
end
|
#run ⇒ Object
72
73
74
75
76
77
78
79
|
# File 'lib/chef-dk/policyfile_services/export_repo.rb', line 72
def run
assert_lockfile_exists!
assert_export_dir_clean!
validate_lockfile
write_updated_lockfile
export
end
|