summaryrefslogtreecommitdiff
path: root/lib/chef/resource/windows_shortcut.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/resource/windows_shortcut.rb')
-rw-r--r--lib/chef/resource/windows_shortcut.rb61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/chef/resource/windows_shortcut.rb b/lib/chef/resource/windows_shortcut.rb
new file mode 100644
index 0000000000..a547f6558c
--- /dev/null
+++ b/lib/chef/resource/windows_shortcut.rb
@@ -0,0 +1,61 @@
+#
+# Copyright:: 2010-2017, VMware, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require "chef/resource"
+
+class Chef
+ class Resource
+ # @author Doug MacEachern <dougm@vmware.com>
+ # Creates a Windows shortcut file
+ class WindowsShortcut < Chef::Resource
+ resource_name :windows_shortcut
+ provides :windows_shortcut, os: "windows"
+
+ property :target, String
+ property :arguments, String
+ property :description, String
+ property :cwd, String
+ property :iconlocation, String
+
+ load_current_value do |desired|
+ require "win32ole" if RUBY_PLATFORM =~ /mswin|mingw32|windows/
+
+ link = WIN32OLE.new("WScript.Shell").CreateShortcut(desired.name)
+ name desired.name
+ target(link.TargetPath)
+ arguments(link.Arguments)
+ description(link.Description)
+ cwd(link.WorkingDirectory)
+ iconlocation(link.IconLocation)
+ end
+
+ action :create do
+ converge_if_changed do
+ converge_by "creating shortcut #{new_resource.name}" do
+ link = WIN32OLE.new("WScript.Shell").CreateShortcut(new_resource.name)
+ link.TargetPath = new_resource.target unless new_resource.target.nil?
+ link.Arguments = new_resource.arguments unless new_resource.arguments.nil?
+ link.Description = new_resource.description unless new_resource.description.nil?
+ link.WorkingDirectory = new_resource.cwd unless new_resource.cwd.nil?
+ link.IconLocation = new_resource.iconlocation unless new_resource.iconlocation.nil?
+ # ignoring: WindowStyle, Hotkey
+ link.Save
+ end
+ end
+ end
+ end
+ end
+end