in deployers/projectreader.go [370:423]
func (deployer *ServiceDeployer) SetProjectDependencies(projectName string) ([]*DeploymentProject, error) {
projectDependencies := make([]*DeploymentProject, 0)
// iterate over each package in a given project
for _, pkg := range deployer.Deployment.Packages {
// get the "whisk-managed" annotation
if a := pkg.Package.Annotations.GetValue(utils.MANAGED); a != nil {
// read the list of dependencies from "projectDeps"
d := a.(map[string]interface{})[utils.OW_PROJECT_DEPS]
listOfDeps := d.([]interface{})
// iterate over a list of dependencies
for _, dep := range listOfDeps {
// dependent package name is in form of "/<namespace>/<package-name>
// filter it to derive the package name
name := deployer.filterPackageName(dep.(map[string]interface{})[wski18n.KEY_KEY].(string))
// undeploy dependent package if its not used by any other package
if !deployer.isPackageUsedByOtherPackages(projectName, name) {
// get the *whisk.Package object for the given dependent package
p, err := deployer.getPackage(name)
if err != nil {
return projectDependencies, err
}
// construct a new DeploymentProject for each dependency
depProject := NewDeploymentProject()
depProject.Packages[p.Package.Name] = p
// Now, get the project name of dependent package so that
// we can get other entities from that project
pa := p.Package.Annotations.GetValue(utils.MANAGED)
depProjectName := (pa.(map[string]interface{})[utils.OW_PROJECT_NAME]).(string)
// get a list of actions and sequences of a dependent package
actions, sequences, err := deployer.getPackageActionsAndSequences(p.Package.Name, depProjectName)
if err != nil {
return projectDependencies, err
}
depProject.Packages[p.Package.Name].Actions = actions
depProject.Packages[p.Package.Name].Sequences = sequences
// get a list of triggers of a dependent project
t, err := deployer.getProjectTriggers(depProjectName)
if err != nil {
return projectDependencies, err
}
depProject.Triggers = t
// get a list of rules of a dependent project
r, err := deployer.getProjectRules(depProjectName)
if err != nil {
return projectDependencies, err
}
depProject.Rules = r
projectDependencies = append(projectDependencies, depProject)
}
}
}
}
return projectDependencies, nil
}