in deployers/servicedeployer.go [141:242]
func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
var manifestReader = NewManifestReader(deployer)
manifestReader.IsUndeploy = false
var err error
manifest, manifestParser, err := manifestReader.ParseManifest()
if err != nil {
return err
}
deployer.ProjectName = utils.Flags.ProjectName
if deployer.ProjectName == "" {
deployer.ProjectName = manifest.GetProject().Name
} else {
warningString := wski18n.T(
wski18n.ID_WARN_PROJECT_NAME_OVERRIDDEN,
map[string]interface{}{
wski18n.KEY_PROJECT: deployer.ProjectName})
wskprint.PrintOpenWhiskWarning(warningString)
}
err = deployer.setProjectInputs(manifest)
if err != nil {
return err
}
// Generate Managed Annotations if its marked as a Managed Deployment
// Managed deployments are the ones when OpenWhisk entities are deployed with command line flag --managed.
// Which results in a hidden annotation in every OpenWhisk entity in manifest file.
if utils.Flags.Managed || utils.Flags.Sync {
// OpenWhisk entities are annotated with Project Name and therefore
// Project Name in manifest/deployment file is mandatory for managed deployments
if deployer.ProjectName == "" {
errmsg := wski18n.T(wski18n.ID_ERR_KEY_MISSING_X_key_X,
map[string]interface{}{wski18n.KEY_KEY: wski18n.NAME_PROJECT})
return wskderrors.NewYAMLFileFormatError(manifest.Filepath, errmsg)
}
// Every OpenWhisk entity in the manifest file will be annotated with:
//managed: '{"__OW__PROJECT__NAME": <name>, "__OW__PROJECT_HASH": <hash>, "__OW__FILE": <path>}'
deployer.ManagedAnnotation, err = utils.GenerateManagedAnnotation(deployer.ProjectName, manifest.Filepath)
if err != nil {
return wskderrors.NewYAMLFileFormatError(manifest.Filepath, err.Error())
}
}
err = manifestReader.InitPackages(manifestParser, manifest, deployer.ManagedAnnotation)
if err != nil {
return err
}
projectName := ""
if len(manifest.GetProject().Packages) != 0 {
projectName = manifest.GetProject().Name
}
// process deployment file
var deploymentReader = NewDeploymentReader(deployer)
if utils.FileExists(deployer.DeploymentPath) {
err = deploymentReader.HandleYaml()
if err != nil {
return err
}
// compare the name of the project
if len(deploymentReader.DeploymentDescriptor.GetProject().Packages) != 0 && len(projectName) != 0 {
projectNameDeploy := deploymentReader.DeploymentDescriptor.GetProject().Name
if projectNameDeploy != projectName {
errorString := wski18n.T(wski18n.ID_ERR_NAME_MISMATCH_X_key_X_dname_X_dpath_X_mname_X_moath_X,
map[string]interface{}{
wski18n.KEY_KEY: parsers.YAML_KEY_PROJECT,
wski18n.KEY_DEPLOYMENT_NAME: projectNameDeploy,
wski18n.KEY_DEPLOYMENT_PATH: deployer.DeploymentPath,
wski18n.KEY_MANIFEST_NAME: projectName,
wski18n.KEY_MANIFEST_PATH: deployer.ManifestPath})
return wskderrors.NewYAMLFileFormatError(manifest.Filepath, errorString)
}
}
}
// overwrite package inputs based on command line parameters
// overwrite package inputs with the values from command line --param and/or --param-file in order
err = deployer.UpdatePackageInputs()
if err != nil {
return err
}
// process manifest file
err = manifestReader.HandleYaml(manifestParser, manifest, deployer.ManagedAnnotation)
if err != nil {
return err
}
// process deployment file
if utils.FileExists(deployer.DeploymentPath) {
if err := deploymentReader.BindAssets(); err != nil {
return err
}
}
return err
}