lib/classes/Variables.js/Variables/disableDepedentServices
class Variables:  disableDepedentServices(func) {
    const dependentServices = [
      { name: 'CloudFormation', method: 'getValueFromCf', original: this.getValueFromCf },
      { name: 'S3', method: 'getValueFromS3', original: this.getValueFromS3 },
      { name: 'SSM', method: 'getValueFromSsm', original: this.getValueFromSsm },
    ];
    const dependencyMessage = (configValue, serviceName) =>
      `Variable dependency failure: variable '${configValue}' references service ${
        serviceName} but using that service requires a concrete value to be called.`;
    // replace and then restore the methods for obtaining values from dependent services.  the
    // replacement naturally rejects dependencies on these services that occur during prepopulation.
    // prepopulation is, of course, the process of obtaining the required configuration for using
    // these services.
    dependentServices.forEach((dependentService) => { // knock out
      this[dependentService.method] = (variableString) => BbPromise.reject(
        dependencyMessage(variableString, dependentService.name));
    });
    return func()
      .finally(() => {
        dependentServices.forEach((dependentService) => { // restore
          this[dependentService.method] = dependentService.original;
        });
      });
  }