in deployers/servicedeployer.go [621:665]
func (deployer *ServiceDeployer) RefreshManagedPackages(ma map[string]interface{}) error {
options := whisk.PackageListOptions{}
// Get the list of packages in your namespace
packages, _, err := deployer.Client.Packages.List(&options)
if err != nil {
return err
}
// iterate over each package to find managed annotations
// check if "managed" annotation is attached to a package
// when managed project name matches with the current project name and project
// hash differs, indicates that the package was part of the current project but
// now is deleted from the manifest file and should be undeployed.
for _, pkg := range packages {
if a := pkg.Annotations.GetValue(utils.MANAGED); a != nil {
// decode the JSON blob and retrieve __OW_PROJECT_NAME and __OW_PROJECT_HASH
pa := a.(map[string]interface{})
// perform the similar check on the list of actions from this package
// since package can not be deleted if its not empty (has any action or sequence)
if err := deployer.RefreshManagedActions(pkg.Name, ma); err != nil {
return err
}
// we have found a package which was earlier part of the current project
if pa[utils.OW_PROJECT_NAME] == ma[utils.OW_PROJECT_NAME] && pa[utils.OW_PROJECT_HASH] != ma[utils.OW_PROJECT_HASH] {
output := wski18n.T(wski18n.ID_MSG_MANAGED_FOUND_DELETED_X_key_X_name_X_project_X,
map[string]interface{}{
wski18n.KEY_KEY: parsers.YAML_KEY_PACKAGE,
wski18n.KEY_NAME: pkg.Name,
wski18n.KEY_PROJECT: pa[utils.OW_PROJECT_NAME]})
wskprint.PrintOpenWhiskWarning(output)
var err error
err = retry(DEFAULT_ATTEMPTS, DEFAULT_INTERVAL, func() error {
_, err := deployer.Client.Packages.Delete(pkg.Name)
return err
})
if err != nil {
return err
}
}
}
}
return nil
}