install::xml::action::mount (public)
install::xml::action::mount node
Defined in packages/acs-tcl/tcl/install-procs.tcl
Mounts a package on a specified node.
<mount package="package-key instance-name="name" mount-point="url" />
- Parameters:
- node (required)
- Partial Call Graph (max 5 caller/called nodes):
- Testcases:
- No testcase defined.
Source code: set package_key [apm_required_attribute_value $node package] set instance_name [apm_required_attribute_value $node instance-name] set id [apm_attribute_value -default "" $node id] set mount_point [apm_attribute_value -default "" $node mount-point] set context_id [apm_attribute_value -default "" $node context-id] set security_inherit_p [apm_attribute_value -default "t" $node security-inherit-p] set out [list] # Remove double slashes regsub -all -- {//} $mount_point "/" mount_point set mount_point [string trim $mount_point " /"] if {[string is space $mount_point] || $mount_point eq "/"} { array set site_node [site_node::get -url "/"] if {$site_node(object_id) ne ""} { ns_log Error "A package is already mounted at '$mount_point', ignoring mount command" lappend out "A package is already mounted at '$mount_point', ignoring mount command" set node_id "" } if {$context_id eq ""} { set context_id default_context } set context_id [install::xml::util::get_id $context_id] } else { set leaf_url $mount_point set parent_url "" regexp {(.*)/([^/]*)$} $mount_point match parent_url leaf_url set parent_id [site_node::get_node_id -url "/$parent_url"] # technically this isn't safe - between us checking that the node exists # and using it, the node may have been deleted. # We could "select for update" but since it's in a memory cache anyway, # it won't help us very much! # Instead we just press on and if there's an error handle it at the top level. # create the node and reget iff it doesn't exist if { [catch { array set site_node [site_node::get_from_url -exact -url "/$mount_point"] } error] } { set node_id [site_node::new -name $leaf_url -parent_id $parent_id] array set site_node [site_node::get_from_url -exact -url "/$mount_point"] } # There now definitely a node with that path if {$site_node(object_id) eq ""} { # no package mounted - good! set node_id $site_node(node_id) } else { ns_log Error "A package is already mounted at '$mount_point', ignoring mount command" lappend out "A package is already mounted at '$mount_point', ignoring mount command" set node_id "" } if {$context_id eq ""} { set context_id [install::xml::util::get_id $context_id] } } if {$node_id ne ""} { lappend out "Mounting new instance of package $package_key at /$mount_point" set package_id [site_node::instantiate_and_mount -node_id $node_id -context_id $context_id -node_name $mount_point -package_name $instance_name -package_key $package_key] if {![string is true -strict $security_inherit_p]} { permission::set_not_inherit -object_id $package_id } if {$id ne ""} { set ::install::xml::ids($id) $package_id } } return $outXQL Not present: Generic, PostgreSQL, Oracle