inetmgr 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +159 -0
- data/RELEASE-NOTES.rdoc +35 -0
- data/doc/Application.html +177 -0
- data/doc/ApplicationPool.html +177 -0
- data/doc/AutoStartProvider.html +177 -0
- data/doc/BindingInformation.html +349 -0
- data/doc/Configuration.html +283 -0
- data/doc/IisConfiguration.html +383 -0
- data/doc/IisObject.html +484 -0
- data/doc/IisObjectCollection.html +534 -0
- data/doc/Inetmgr.html +179 -0
- data/doc/Inetmgr/InetmgrTask.html +338 -0
- data/doc/Object.html +254 -0
- data/doc/PeriodicRestart.html +177 -0
- data/doc/ProcessModel.html +192 -0
- data/doc/README_rdoc.html +114 -0
- data/doc/RSpecExtensions.html +257 -0
- data/doc/Recycling.html +177 -0
- data/doc/Site.html +228 -0
- data/doc/SiteConfiguration.html +269 -0
- data/doc/SiteLimit.html +177 -0
- data/doc/VirtualDirectory.html +177 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +166 -0
- data/doc/js/darkfish.js +116 -0
- data/doc/js/jquery.js +32 -0
- data/doc/js/quicksearch.js +114 -0
- data/doc/js/thickbox-compressed.js +10 -0
- data/doc/rdoc.css +706 -0
- data/inetmgr.gemspec +21 -0
- data/lib/inetmgr.rb +30 -0
- data/lib/inetmgr/configuration.rb +23 -0
- data/lib/inetmgr/iis_configuration.rb +36 -0
- data/lib/inetmgr/iis_object.rb +85 -0
- data/lib/inetmgr/iis_object/application.rb +11 -0
- data/lib/inetmgr/iis_object/application_pool.rb +19 -0
- data/lib/inetmgr/iis_object/auto_start_provider.rb +3 -0
- data/lib/inetmgr/iis_object/binding_information.rb +26 -0
- data/lib/inetmgr/iis_object/periodic_restart.rb +3 -0
- data/lib/inetmgr/iis_object/process_model.rb +18 -0
- data/lib/inetmgr/iis_object/recycling.rb +5 -0
- data/lib/inetmgr/iis_object/site.rb +24 -0
- data/lib/inetmgr/iis_object/site_limit.rb +7 -0
- data/lib/inetmgr/iis_object/virtual_directory.rb +5 -0
- data/lib/inetmgr/iis_object_collection.rb +51 -0
- data/lib/inetmgr/site_configuration.rb +34 -0
- data/lib/rake/inetmgrtask.rb +74 -0
- data/lib/string.rb +5 -0
- data/nbproject/private/config.properties +0 -0
- data/nbproject/private/private.properties +4 -0
- data/nbproject/private/private.xml +4 -0
- data/nbproject/private/rake-d.txt +2 -0
- data/nbproject/project.properties +10 -0
- data/nbproject/project.xml +16 -0
- data/spec/application_pool_spec.rb +120 -0
- data/spec/application_spec.rb +38 -0
- data/spec/auto_start_provider_spec.rb +25 -0
- data/spec/bingin_information_spec.rb +21 -0
- data/spec/iis_configuration_spec.rb +35 -0
- data/spec/site_app_settings_spec.rb +61 -0
- data/spec/site_configuration_spec.rb +24 -0
- data/spec/site_connection_strings_spec.rb +17 -0
- data/spec/site_spec.rb +34 -0
- data/spec/site_validation_settings_spec.rb +18 -0
- data/spec/spec_env.rb +22 -0
- data/spec/string_spec.rb +16 -0
- data/spec/virtual_directory_spec.rb +1 -0
- data/test/create_site.rb +26 -0
- data/test/print_iis_config.rb +56 -0
- data/test/rakefile.rb +27 -0
- metadata +156 -0
data/inetmgr.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
|
4
|
+
spec = Gem::Specification.new do |s|
|
5
|
+
|
6
|
+
s.name = "inetmgr"
|
7
|
+
s.version = "0.4.0"
|
8
|
+
s.summary = "A library for managing IIS configuration settings."
|
9
|
+
s.description = "inetmgr allows you to inspect/configure IIS configuration sections and elements."
|
10
|
+
|
11
|
+
s.required_ruby_version = '>= 1.9.2'
|
12
|
+
s.required_rubygems_version = ">= 1.3.6"
|
13
|
+
|
14
|
+
s.author = "Gino Heyman"
|
15
|
+
s.email = "gino.heyman@gmail.com"
|
16
|
+
s.homepage = "http://typesafe.be/inetmgr/"
|
17
|
+
|
18
|
+
s.files = FileList["**/**/*"].to_a
|
19
|
+
s.require_path = "lib"
|
20
|
+
|
21
|
+
end
|
data/lib/inetmgr.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'win32ole'
|
2
|
+
|
3
|
+
path = File.expand_path(File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require File.join(path, 'string.rb')
|
6
|
+
|
7
|
+
requires =
|
8
|
+
[
|
9
|
+
'inetmgr/iis_object_collection.rb',
|
10
|
+
'inetmgr/iis_object.rb'
|
11
|
+
]
|
12
|
+
|
13
|
+
requires.each do |file|
|
14
|
+
require File.join(path, file)
|
15
|
+
end
|
16
|
+
|
17
|
+
requires =
|
18
|
+
[
|
19
|
+
'inetmgr/configuration.rb',
|
20
|
+
'inetmgr/iis_configuration.rb',
|
21
|
+
'inetmgr/site_configuration.rb'
|
22
|
+
]
|
23
|
+
|
24
|
+
requires.each do |file|
|
25
|
+
require File.join(path, file)
|
26
|
+
end
|
27
|
+
|
28
|
+
Dir.glob(File.join(path, 'inetmgr/iis_object/*.rb')).each do |f|
|
29
|
+
require f unless requires.include?(f)
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
class Configuration
|
3
|
+
|
4
|
+
def initialize(path)
|
5
|
+
@admin_manager = WIN32OLE.new "Microsoft.ApplicationHost.WritableAdminManager"
|
6
|
+
@admin_manager.CommitPath = path;
|
7
|
+
end
|
8
|
+
|
9
|
+
# applies/commits all changes made since the creation of the
|
10
|
+
# IisConfiguration instance or the last time this method was called.
|
11
|
+
def apply_changes
|
12
|
+
@admin_manager.CommitChanges
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def get_admin_section section_name
|
18
|
+
@admin_manager.GetAdminSection(section_name, @admin_manager.CommitPath)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'iis_object/site.rb')
|
2
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'iis_object/application_pool.rb')
|
3
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'iis_object/auto_start_provider.rb')
|
4
|
+
|
5
|
+
# Represents the local IIS configuration settings (meta base).
|
6
|
+
class IisConfiguration < Configuration
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super "MACHINE/WEBROOT/APPHOST"
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.configure
|
13
|
+
cfg = IisConfiguration.new
|
14
|
+
yield cfg
|
15
|
+
cfg.apply_changes
|
16
|
+
end
|
17
|
+
|
18
|
+
# Gets all configured web sites.
|
19
|
+
def get_sites
|
20
|
+
s = get_admin_section "system.applicationHost/sites"
|
21
|
+
IisObjectCollection.new s.Collection, :site, Site, lambda { |site| site.id = s.Collection.Count + 1 }
|
22
|
+
end
|
23
|
+
|
24
|
+
# Gets all configure application pools.
|
25
|
+
def get_application_pools
|
26
|
+
s = get_admin_section "system.applicationHost/applicationPools"
|
27
|
+
IisObjectCollection.new s.Collection, :add, ApplicationPool
|
28
|
+
end
|
29
|
+
|
30
|
+
# Gets all configured service auto start providers.
|
31
|
+
def get_auto_start_providers
|
32
|
+
s = get_admin_section "system.applicationHost/serviceAutoStartProviders"
|
33
|
+
IisObjectCollection.new s.Collection, :add, AutoStartProvider
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# Represents an IIS configuration element. Serves as the base class for all
|
2
|
+
# IIS artifacts like Site, Application and VirtualDirectory.
|
3
|
+
class IisObject
|
4
|
+
|
5
|
+
def initialize element
|
6
|
+
@element = element
|
7
|
+
end
|
8
|
+
|
9
|
+
# Creates a property with the specified name.
|
10
|
+
#
|
11
|
+
# ==== Parameters
|
12
|
+
# * <tt>name</tt> - The name of the property to create
|
13
|
+
# * <tt>actual_name</tt> - Optional, The actual name of the attribute or
|
14
|
+
# element in the IIS configuration schema.
|
15
|
+
# * <tt>setter</tt> - Optional, a lambda or proc to convert the property
|
16
|
+
# value to a value in the IIS configuration schema.
|
17
|
+
# * <tt>reader</tt> - Optional, a lambda or proc to convert the IIS
|
18
|
+
# configuration value to the desired property value.
|
19
|
+
def self.prop name, actual_name, setter = lambda { |v| v }, reader = lambda { |v| v }
|
20
|
+
define_method(name.to_s) do
|
21
|
+
reader.call(@element.Properties.Item(actual_name.to_s).Value)
|
22
|
+
end
|
23
|
+
|
24
|
+
define_method("#{name.to_s}=") do |val|
|
25
|
+
@element.Properties.Item(actual_name.to_s).Value = setter.call(val)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Creates a collection property with the specified name.
|
30
|
+
#
|
31
|
+
# ==== Parameters
|
32
|
+
# * <tt>name</tt> - The name of the property to create
|
33
|
+
# * <tt>type</tt> - The collection's item type.
|
34
|
+
def self.collection name, item_name, type
|
35
|
+
define_method(name.to_s) do
|
36
|
+
IisObjectCollection.new @element.Collection, item_name.to_s, type
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Creates a collection property with the specified name.
|
41
|
+
#
|
42
|
+
# ==== Parameters
|
43
|
+
# * <tt>name</tt> - The name of the property to create
|
44
|
+
# * <tt>item_name</tt> - The name of the element in the configuration schema.
|
45
|
+
# * <tt>type</tt> - The collection's item type.
|
46
|
+
def self.children name, item_name, type
|
47
|
+
define_method(name.to_s) do
|
48
|
+
IisObjectCollection.new @element.ChildElements.Item(name.to_s).Collection, item_name.to_s, type
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.child name, element_name, type
|
53
|
+
define_method(name.to_s) do
|
54
|
+
type.new @element.ChildElements.Item(element_name.to_s)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def invoke_method name
|
59
|
+
method = @element.Methods.Item(name.to_s).CreateInstance()
|
60
|
+
|
61
|
+
# TODO: if block_given? change method_missing to change this:
|
62
|
+
# method.Input.Properties.Item("key").Value = value
|
63
|
+
# in to this:
|
64
|
+
# method.key = value
|
65
|
+
|
66
|
+
yield method if block_given?
|
67
|
+
method.Execute()
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def method_missing(symbol, *args)
|
73
|
+
name = symbol.to_s.to_camel_case
|
74
|
+
if (/=$/.match(name))
|
75
|
+
|
76
|
+
@element.Properties.Item(name.sub(/=$/, '')).Value = args[0]
|
77
|
+
else
|
78
|
+
@element.Properties.Item(name).Value
|
79
|
+
end
|
80
|
+
rescue WIN32OLERuntimeError
|
81
|
+
raise "property '#{symbol}' -> #{$!}"
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'virtual_directory.rb')
|
2
|
+
|
3
|
+
class Application < IisObject
|
4
|
+
|
5
|
+
prop :auto_start, "serviceAutoStartEnabled"
|
6
|
+
prop :auto_start_provider, "serviceAutoStartProvider"
|
7
|
+
prop :application_pool, :applicationPool
|
8
|
+
|
9
|
+
collection :virtual_directories, :virtualDirectory, VirtualDirectory
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'process_model.rb')
|
2
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'recycling.rb')
|
3
|
+
|
4
|
+
class ApplicationPool < IisObject
|
5
|
+
|
6
|
+
# prop :managed_runtime_version, :managedRuntimeVersion
|
7
|
+
# prop :pass_anonymous_token, :passAnonymousToken
|
8
|
+
# prop :queue_length, :queueLength
|
9
|
+
|
10
|
+
prop :auto_start, :autoStart, lambda { |a| a == true ? "true" : "false" }, lambda {|value| value == "true" }
|
11
|
+
prop :classic_pipeline, :managedPipelineMode, lambda { |a| a == true ? 1 : 0 }, lambda {|value| value.to_i == 1 }
|
12
|
+
prop :enable_32bit, :enable32BitAppOnWin64
|
13
|
+
prop :always_running, :startMode, lambda { |a| a == true ? "AlwaysRunning" : "OnDemand" },lambda {|value| value.to_i == 1 }
|
14
|
+
|
15
|
+
child :process_model, :processModel, ProcessModel
|
16
|
+
child :recycling, :recycling, Recycling
|
17
|
+
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
class BindingInformation < IisObject
|
3
|
+
|
4
|
+
prop :protocol, :protocol
|
5
|
+
prop :binding_information, :bindingInformation
|
6
|
+
prop :ds_mapper_enabled?, :isDsMapperEnabled
|
7
|
+
|
8
|
+
def add_ssl_certificate thumprint, store
|
9
|
+
invoke_method("AddSslCertificate") do |method|
|
10
|
+
method.Input.Properties.Item("certificateHash").Value = thumprint
|
11
|
+
method.Input.Properties.Item("certificateStoreName").Value = store
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def remove_ssl_certificate
|
16
|
+
invoke_method("RemoveSslCertificate")
|
17
|
+
end
|
18
|
+
|
19
|
+
def enable_ds_mapper
|
20
|
+
invoke_method("EnableDsMapper")
|
21
|
+
end
|
22
|
+
|
23
|
+
def disable_ds_mapper
|
24
|
+
invoke_method("DisableDsMapper")
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Specifies security, performance, health, and reliability features of application pools.
|
2
|
+
class ProcessModel < IisObject
|
3
|
+
|
4
|
+
Identity_type_map = [:system, :local_service, :network_service, :specific_user, :application_pool_identity]
|
5
|
+
|
6
|
+
##
|
7
|
+
# Specifies the logon type for the process identity.
|
8
|
+
# - :batch indicates that the application pool identity should logon as a batch user.
|
9
|
+
# - :service indicates that the application pool identity should logon as a service.
|
10
|
+
|
11
|
+
prop :logon_type, :logonType, lambda {|value| value == :batch ? 0 : 1 }, lambda { |a| a == 0 ? :batch : :service }
|
12
|
+
|
13
|
+
prop :identity_type, :identityType, lambda {|value| Identity_type_map.index(value)}, lambda { |a| Identity_type_map[a] }
|
14
|
+
prop :user_name, :userName
|
15
|
+
#prop :password
|
16
|
+
prop :load_user_profile, :loadUserProfile
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'site_limit.rb')
|
2
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'binding_information.rb')
|
3
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), 'application.rb')
|
4
|
+
|
5
|
+
class Site < IisObject
|
6
|
+
|
7
|
+
# name
|
8
|
+
# id
|
9
|
+
|
10
|
+
prop :auto_start, :serverAutoStart
|
11
|
+
|
12
|
+
collection :applications, :application, Application
|
13
|
+
|
14
|
+
children :bindings, :binding, BindingInformation
|
15
|
+
|
16
|
+
child :limits, :limits, SiteLimit
|
17
|
+
|
18
|
+
def configure
|
19
|
+
cfg = SiteConfiguration.new name
|
20
|
+
yield cfg
|
21
|
+
cfg.apply_changes
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Represents a collection of IIS configuration objects.
|
2
|
+
class IisObjectCollection
|
3
|
+
|
4
|
+
def initialize element, item_name, type, add_callback = nil
|
5
|
+
@collection_element = element
|
6
|
+
@item_name = item_name
|
7
|
+
@type = type
|
8
|
+
@add_callback = add_callback
|
9
|
+
end
|
10
|
+
|
11
|
+
def size
|
12
|
+
@collection_element.Count
|
13
|
+
end
|
14
|
+
|
15
|
+
def count
|
16
|
+
size
|
17
|
+
end
|
18
|
+
|
19
|
+
def [](index)
|
20
|
+
return @type.new @collection_element.Item index
|
21
|
+
end
|
22
|
+
|
23
|
+
def each
|
24
|
+
size.times { |i| yield self[i] }
|
25
|
+
end
|
26
|
+
|
27
|
+
def add
|
28
|
+
e = @collection_element.CreateNewElement @item_name.to_s
|
29
|
+
added = @type.new e
|
30
|
+
@add_callback.call added unless @add_callback.nil?
|
31
|
+
yield added
|
32
|
+
@collection_element.AddElement e
|
33
|
+
added
|
34
|
+
end
|
35
|
+
|
36
|
+
def find
|
37
|
+
size.times do |i|
|
38
|
+
instance = self[i]
|
39
|
+
return instance if yield(instance)
|
40
|
+
end
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def exists(name)
|
45
|
+
!(find {|s| s.name == name}).nil?
|
46
|
+
end
|
47
|
+
|
48
|
+
def remove(index)
|
49
|
+
@collection_element.DeleteElement index
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
class SiteConfiguration < Configuration
|
3
|
+
|
4
|
+
def initialize(name)
|
5
|
+
super "MACHINE/WEBROOT/APPHOST/#{name}"
|
6
|
+
end
|
7
|
+
|
8
|
+
def get_app_settings
|
9
|
+
get_collection "appSettings"
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_connection_strings
|
13
|
+
get_collection "connectionStrings"
|
14
|
+
end
|
15
|
+
|
16
|
+
def get_validation_settings
|
17
|
+
IisObject.new get_admin_section("system.webServer/validation")
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_static_content_settings
|
21
|
+
IisObject.new get_admin_section("system.webServer/staticContent")
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_service_model_settings
|
25
|
+
IisObject.new get_admin_section("system.serviceModel")
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def get_collection(name)
|
31
|
+
IisObjectCollection.new get_admin_section(name).Collection, :add, IisObject
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'rake/tasklib'
|
2
|
+
|
3
|
+
module Inetmgr
|
4
|
+
|
5
|
+
class InetmgrTask < ::Rake::TaskLib
|
6
|
+
attr_accessor :name
|
7
|
+
|
8
|
+
def initialize(name, *args, &block)
|
9
|
+
@block = block
|
10
|
+
args = args.insert(0, name)
|
11
|
+
define name, args
|
12
|
+
end
|
13
|
+
|
14
|
+
def define(name, args)
|
15
|
+
task *args do |task, task_args|
|
16
|
+
@task_args = task_args
|
17
|
+
execute name.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def call_task_block(obj)
|
22
|
+
if !@block.nil?
|
23
|
+
if @block.arity == 1
|
24
|
+
@block.call(obj)
|
25
|
+
else
|
26
|
+
@block.call(obj, @task_args)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_task(taskname, task_object_proc, &execute_body)
|
34
|
+
taskclass = :"Inetmgr_TaskFor_#{taskname}"
|
35
|
+
taskmethod = taskname.to_s.downcase.to_sym
|
36
|
+
|
37
|
+
Object.class_eval(<<-EOF, __FILE__, __LINE__)
|
38
|
+
def #{taskmethod}(name=:#{taskname}, *args, &block)
|
39
|
+
Inetmgr.const_get("#{taskclass}").new(name, *args, &block)
|
40
|
+
end
|
41
|
+
EOF
|
42
|
+
|
43
|
+
Inetmgr.class_eval do
|
44
|
+
const_set(taskclass, Class.new(Inetmgr::InetmgrTask) do
|
45
|
+
define_method :execute do |name|
|
46
|
+
task_object = task_object_proc.call
|
47
|
+
|
48
|
+
call_task_block(task_object)
|
49
|
+
execute_body.call(task_object) unless execute_body.nil?
|
50
|
+
end
|
51
|
+
end)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
create_task :application_pool, Proc.new { ApplicationPool.new } do |pool|
|
57
|
+
pool.create
|
58
|
+
end
|
59
|
+
|
60
|
+
create_task :application, Proc.new { Application.new } do |pool|
|
61
|
+
pool.create
|
62
|
+
end
|
63
|
+
|
64
|
+
create_task :site, Proc.new { Site.new } do |site|
|
65
|
+
site.create
|
66
|
+
end
|
67
|
+
|
68
|
+
create_task :auto_start_provider, Proc.new { AutoStartProvider.new } do |p|
|
69
|
+
p.create
|
70
|
+
end
|
71
|
+
|
72
|
+
create_task :virtual_directory, Proc.new { VirtualDirectory.new } do |dir|
|
73
|
+
dir.create
|
74
|
+
end
|