modules/mu/deploy.rb in cloud-mu-3.4.0 vs modules/mu/deploy.rb in cloud-mu-3.5.0
- old
+ new
@@ -267,10 +267,11 @@
# resource groups, etc)
@mommacat.cloudsUsed.each { |cloud|
cloudclass = MU::Cloud.cloudClass(cloud)
cloudclass.initDeploy(@mommacat)
}
+ @mommacat.writeDeploySecret
# Kick off threads to create each of our new servers.
@my_threads << Thread.new {
MU.dupGlobals(parent_thread_id)
Thread.current.thread_variable_set("name", "mu_create_container")
@@ -533,12 +534,13 @@
#########################################################################
# Helper for setThreadDependencies
#########################################################################
def addDependentThread(parent, child)
@dependency_semaphore.synchronize {
- @dependency_threads[child] = Array.new if !@dependency_threads[child]
+ @dependency_threads[child] ||= []
@dependency_threads[child] << parent
+ @dependency_threads[child].uniq!
MU.log "Thread #{child} will wait on #{parent}", MU::DEBUG, details: @dependency_threads[child]
}
end
#########################################################################
@@ -565,43 +567,54 @@
@dependency_threads["#{name}_create"]=["mu_create_container"]
@dependency_threads["#{name}_groom"]=["#{name}_create", "mu_groom_container"]
MU.log "Setting dependencies for #{name}", MU::DEBUG, details: resource["dependencies"]
if !resource["dependencies"].nil? then
+
resource["dependencies"].each { |dependency|
parent_class = MU::Cloud.loadBaseType(dependency['type'])
parent_type = parent_class.cfg_name
# our groom thread will always need to wait on our parent's create
parent = parent_type+"_"+dependency["name"]+"_create"
addDependentThread(parent, "#{name}_groom")
+ # if we've explicitly declared each end of the dependency, roll
+ # with that and don't meddle further
+ if dependency["my_phase"] and dependency["their_phase"]
+ parent = parent_type+"_"+dependency["name"]+"_"+dependency["their_phase"]
+ addDependentThread(parent, name+"_"+dependency["my_phase"])
+ next
+ end
+
# should our creation thread also wait on our parent's create?
- if !dependency["no_create_wait"] and
+ if dependency["my_phase"] == "create" and
(resource["#MU_CLOUDCLASS"].waits_on_parent_completion or
- dependency['phase'] == "create" or
- parent_class.deps_wait_on_my_creation)
+ parent_class.deps_wait_on_my_creation
+ )
addDependentThread(parent, "#{name}_create")
end
# how about our groom thread waiting on our parents' grooms?
- if (dependency['phase'] == "groom" or resource["#MU_CLOUDCLASS"].waits_on_parent_completion) and parent_class.instance_methods(false).include?(:groom)
+ if (dependency['their_phase'] == "groom" or resource["#MU_CLOUDCLASS"].waits_on_parent_completion) and parent_class.instance_methods(false).include?(:groom)
parent = parent_type+"_"+dependency["name"]+"_groom"
addDependentThread(parent, "#{name}_groom")
- if !dependency["no_create_wait"] and (
+ if dependency["my_phase"] == "groom" and
+ (dependency['their_phase'] == "create" or
+ (!dependency['their_phase'] and
parent_class.deps_wait_on_my_creation or
- resource["#MU_CLOUDCLASS"].waits_on_parent_completion or
- dependency['phase'] == "groom"
+ resource["#MU_CLOUDCLASS"].waits_on_parent_completion)
)
addDependentThread(parent, "#{name}_create")
end
end
}
end
- MU.log "Thread dependencies #{res_type}[#{name}]", MU::DEBUG, details: { "create" => @dependency_threads["#{name}_create"], "groom" => @dependency_threads["#{name}_groom"] }
- @dependency_threads["#{name}_groom"]=["#{name}_create", "mu_groom_container"]
+ @dependency_threads["#{name}_groom"].concat(["#{name}_create", "mu_groom_container"])
+ @dependency_threads["#{name}_groom"].uniq!
+ MU.log "Thread dependencies #{res_type}[#{name}]", MU::DEBUG, details: { "create" => @dependency_threads["#{name}_create"], "groom" => @dependency_threads["#{name}_groom"] } if res_type == "role" and resource['name'] == "dynamostream-to-es"
}
end
#########################################################################
# Kick off a thread to create a resource.