public void callService(
      ProductInstance productInstance,
      VM vm,
      List<Attribute> attributes,
      String action,
      String token)
      throws InstallatorException, NodeExecutionException {

    String process = productInstance.getProductRelease().getProduct().getName();

    String recipe = "";

    if ("install".equals(action)) {
      recipe = recipeNamingGenerator.getInstallRecipe(productInstance);
    } else if ("uninstall".equals(action)) {
      recipe = recipeNamingGenerator.getUninstallRecipe(productInstance);
    } else if ("configure".equals(action)) {
      recipe = recipeNamingGenerator.getConfigureRecipe(productInstance);
    } else if ("deployArtifact".equals(action)) {
      recipe = recipeNamingGenerator.getDeployArtifactRecipe(productInstance);
    } else if ("undeployArtifact".equals(action)) {
      recipe = recipeNamingGenerator.getUnDeployArtifactRecipe(productInstance);
    } else {
      throw new InstallatorException("Missing Action");
    }

    configureNode(vm, attributes, process, recipe, token);
    try {
      log.info("Updating node with recipe " + recipe + " in " + vm.getIp());
      if (isSdcClientInstalled()) {
        executeRecipes(vm);
        // unassignRecipes(vm, recipe);
      } else {
        isRecipeExecuted(vm, process, recipe, token);
        //  unassignRecipes(vm, recipe);
        // eliminate the attribute

      }
    } catch (NodeExecutionException e) {
      // even if execution fails want to unassign the recipe
      throw new NodeExecutionException(e.getMessage());
    }
  }
  @Override
  public void callService(ProductInstance productInstance, String action, String token)
      throws InstallatorException, NodeExecutionException {
    VM vm = productInstance.getVm();
    String recipe = "";
    if ("uninstall".equals(action)) {
      recipe = recipeNamingGenerator.getUninstallRecipe(productInstance);
    } else {

    }

    assignRecipes(vm, recipe, token);
    try {
      executeRecipes(vm);
      // unassignRecipes(vm, recipe);
    } catch (NodeExecutionException e) {
      // unassignRecipes(vm, recipe);
      // even if execution fails want to unassign the recipe
      throw new NodeExecutionException(e.getMessage());
    }
  }