diff options
-rw-r--r-- | lib/chef/provider/zypper_repository.rb | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/lib/chef/provider/zypper_repository.rb b/lib/chef/provider/zypper_repository.rb index b0b6e3aefd..83d3f9982e 100644 --- a/lib/chef/provider/zypper_repository.rb +++ b/lib/chef/provider/zypper_repository.rb @@ -20,6 +20,7 @@ require "chef/resource" require "chef/dsl/declare_resource" require "chef/mixin/which" require "chef/provider/noop" +require "shellwords" class Chef class Provider @@ -35,7 +36,7 @@ class Chef end action :create do - declare_resource(:template, "/etc/zypp/repos.d/#{new_resource.repo_name}.repo") do + declare_resource(:template, "/etc/zypp/repos.d/#{escaped_repo_name}.repo") do if template_available?(new_resource.source) source new_resource.source else @@ -45,29 +46,30 @@ class Chef sensitive new_resource.sensitive variables(config: new_resource) mode new_resource.mode - notifies :run, "execute[zypper --non-interactive refresh #{new_resource.repo_name}]", :immediately if new_resource.refresh_cache - end - - declare_resource(:execute, "zypper --non-interactive refresh #{new_resource.repo_name}") do - action :nothing + notifies :refresh, new_resource, :immediately if new_resource.refresh_cache end end action :delete do - declare_resource(:execute, "zypper removerepo #{new_resource.repo_name}") do - only_if "zypper lr #{new_resource.repo_name}" + declare_resource(:execute, "zypper removerepo #{escaped_repo_name}") do + only_if "zypper lr #{escaped_repo_name}" end end action :refresh do - declare_resource(:execute, "zypper refresh #{new_resource.repo_name}") do - only_if "zypper lr #{new_resource.repo_name}" + declare_resource(:execute, "zypper refresh #{escaped_repo_name}") do + only_if "zypper lr #{escaped_repo_name}" end end alias_method :action_add, :action_create alias_method :action_remove, :action_delete + # zypper repos are allowed to have spaces in the names + def escaped_repo_name + Shellwords.escape(new_resource.repo_name) + end + def template_available?(path) !path.nil? && run_context.has_template_in_cookbook?(new_resource.cookbook_name, path) end |