code: def _translate_special_values(self, obj_to_translate):
          
          translation_dict = {
              'BUILT_IMAGE_ID': self.workflow.builder.image_id,
              'BUILD_DOCKERFILE_PATH': self.workflow.builder.source.dockerfile_path,
              'BUILD_SOURCE_PATH':  self.workflow.builder.source.path,
          }
  
          if self.workflow.builder.base_image:
              translation_dict['BASE_IMAGE'] = self.workflow.builder.base_image.to_str()
  
          if isinstance(obj_to_translate, dict):
              # Recurse into dicts
              translated_dict = copy.deepcopy(obj_to_translate)
              for key, value in obj_to_translate.items():
                  translated_dict[key] = self._translate_special_values(value)
  
              return translated_dict
          elif isinstance(obj_to_translate, list):
              # Iterate over lists
              return [self._translate_special_values(elem)
                      for elem in obj_to_translate]
          else:
              return translation_dict.get(obj_to_translate, obj_to_translate)
docs: you may want to write plugins for values which are not known before build:
          e.g. id of built image, base image name,... this method will therefore
          translate some reserved values to the runtime values