Class: Chef::Knife::CookbookSiteInstall
Instance Attribute Summary collapse
Attributes inherited from Chef::Knife
#name_args, #ui
Instance Method Summary
collapse
Methods inherited from Chef::Knife
#api_key, category, common_name, #configure_chef, #create_object, #delete_object, deps, #format_rest_error, guess_category, #highlight_config_error, #humanize_exception, #humanize_http_exception, inherited, #initialize, list_commands, load_commands, load_deps, msg, #noauth_rest, #parse_options, #read_config_file, reset_subcommands!, #rest, run, #run_with_pretty_exceptions, #server_url, #show_usage, snake_case_name, subcommand_category, subcommand_class_from, subcommand_loader, subcommands, subcommands_by_category, ui, unnamed?, #username
#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename
#enforce_path_sanity
Constructor Details
This class inherits a constructor from Chef::Knife
Instance Attribute Details
#cookbook_name ⇒ Object
Returns the value of attribute cookbook_name.
62
63
64
|
# File 'lib/chef/knife/cookbook_site_install.rb', line 62
def cookbook_name
@cookbook_name
end
|
#vendor_path ⇒ Object
Returns the value of attribute vendor_path.
63
64
65
|
# File 'lib/chef/knife/cookbook_site_install.rb', line 63
def vendor_path
@vendor_path
end
|
Instance Method Details
#clear_existing_files(cookbook_path) ⇒ Object
150
151
152
153
|
# File 'lib/chef/knife/cookbook_site_install.rb', line 150
def clear_existing_files(cookbook_path)
ui.info("Removing pre-existing version.")
FileUtils.rmtree(cookbook_path) if File.directory?(cookbook_path)
end
|
#convert_path(upstream_file) ⇒ Object
155
156
157
158
159
160
161
|
# File 'lib/chef/knife/cookbook_site_install.rb', line 155
def convert_path(upstream_file)
if ENV['MSYSTEM'] == 'MINGW32'
return upstream_file.sub(/^([[:alpha:]]):/, '/\1')
else
return Shellwords.escape upstream_file
end
end
|
#download_cookbook_to(download_path) ⇒ Object
137
138
139
140
141
142
143
|
# File 'lib/chef/knife/cookbook_site_install.rb', line 137
def download_cookbook_to(download_path)
downloader = Chef::Knife::CookbookSiteDownload.new
downloader.config[:file] = download_path
downloader.name_args = name_args
downloader.run
downloader
end
|
145
146
147
148
|
# File 'lib/chef/knife/cookbook_site_install.rb', line 145
def (upstream_file, version)
ui.info("Uncompressing #{@cookbook_name} version #{version}.")
shell_out!("tar zxvf #{convert_path upstream_file}", :cwd => @install_path)
end
|
#parse_name_args! ⇒ Object
124
125
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/chef/knife/cookbook_site_install.rb', line 124
def parse_name_args!
if name_args.empty?
ui.error("Please specify a cookbook to download and install.")
exit 1
elsif name_args.size >= 2
unless name_args.last.match(/^(\d+)(\.\d+){1,2}$/) and name_args.size == 2
ui.error("Installing multiple cookbooks at once is not supported.")
exit 1
end
end
name_args.first
end
|
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/chef/knife/cookbook_site_install.rb', line 65
def run
extend Chef::Mixin::ShellOut
if config[:cookbook_path]
Chef::Config[:cookbook_path] = config[:cookbook_path]
else
config[:cookbook_path] = Chef::Config[:cookbook_path]
end
@cookbook_name = parse_name_args!
@install_path = File.expand_path(config[:cookbook_path].first)
ui.info "Installing #@cookbook_name to #{@install_path}"
@repo = CookbookSCMRepo.new(@install_path, ui, config)
upstream_file = File.join(@install_path, "#{@cookbook_name}.tar.gz")
@repo.sanity_check
unless config[:use_current_branch]
@repo.reset_to_default_state
@repo.prepare_to_import(@cookbook_name)
end
downloader = download_cookbook_to(upstream_file)
clear_existing_files(File.join(@install_path, @cookbook_name))
(upstream_file, downloader.version)
ui.info("removing downloaded tarball")
File.unlink(upstream_file)
if @repo.finalize_updates_to(@cookbook_name, downloader.version)
unless config[:use_current_branch]
@repo.reset_to_default_state
end
@repo.merge_updates_from(@cookbook_name, downloader.version)
else
unless config[:use_current_branch]
@repo.reset_to_default_state
end
end
unless config[:no_deps]
md = Chef::Cookbook::Metadata.new
md.from_file(File.join(@install_path, @cookbook_name, "metadata.rb"))
md.dependencies.each do |cookbook, version_list|
nv = self.class.new
nv.config = config
nv.name_args = [ cookbook ]
nv.run
end
end
end
|