diff --git a/templates/full-pipeline.yml b/templates/full-pipeline.yml
index 477e3c576c66d99648edaac626f7b0fa70881036..65a219545b307a5ec4f7a20470a2d9c3824713ab 100644
--- a/templates/full-pipeline.yml
+++ b/templates/full-pipeline.yml
@@ -155,6 +155,10 @@ spec:
         - when: manual
       type: array
       description: 'Defines the `rules` of the `delete-state` job.'
+    warning_on_none_empty_plan:
+      default: false
+      type: boolean
+      description: 'Whether to mark the job with a warning if the plan contains a diff.'
 
 ---
 
@@ -220,6 +224,7 @@ include:
       artifacts_access: $[[ inputs.plan_artifacts_access ]]
       var_file: $[[ inputs.var_file ]]
       rules: $[[ inputs.plan_rules ]]
+      warning_on_none_empty_plan: $[[ inputs.warning_on_none_empty_plan ]]
   - local: '/templates/apply.yml'
     inputs:
       as: '$[[ inputs.job_name_prefix ]]apply'
@@ -262,5 +267,5 @@ include:
 # job template, but the issue is that we cannot default it to something
 # meaningful other than `null` - but `null` is also not yet supported, see
 # https://gitlab.com/gitlab-org/gitlab/-/issues/440468
-$[[ inputs.job_name_prefix ]]delete-state:
+'$[[ inputs.job_name_prefix ]]delete-state':
   needs: ['$[[ inputs.job_name_prefix ]]destroy']
diff --git a/templates/job-templates.yml b/templates/job-templates.yml
index f4602c9d91bfa54eed7123e70acaff56369583e7..69120b5eb4cb187456ffb418710180662c966af3 100644
--- a/templates/job-templates.yml
+++ b/templates/job-templates.yml
@@ -101,6 +101,10 @@ spec:
       default: ''
       type: string
       description: 'Path to a variables files relative to root_dir.'
+    warning_on_none_empty_plan:
+      default: false
+      type: boolean
+      description: 'Whether to mark the job with a warning if the plan contains a diff.'
 
 ---
 
@@ -167,6 +171,7 @@ include:
       state_name: $[[ inputs.state_name ]]
       plan_name: $[[ inputs.plan_name ]]
       var_file: $[[ inputs.var_file ]]
+      warning_on_none_empty_plan: $[[ inputs.warning_on_none_empty_plan ]]
   - local: '/templates/apply.yml'
     inputs:
       as: '$[[ inputs.job_name_prefix ]]apply'
diff --git a/templates/validate-plan-apply.yml b/templates/validate-plan-apply.yml
index 8fd8a925e37d8644d3b1cae5ff05b0dbedaa00fe..9b9a81adc38b7d17a7e3b053c8702a2ee26a5ca0 100644
--- a/templates/validate-plan-apply.yml
+++ b/templates/validate-plan-apply.yml
@@ -125,6 +125,10 @@ spec:
           when: manual
       type: array
       description: 'Defines the `rules` of the `apply` job.'
+    warning_on_none_empty_plan:
+      default: false
+      type: boolean
+      description: 'Whether to mark the job with a warning if the plan contains a diff.'
 
 ---
 
@@ -172,6 +176,7 @@ include:
       artifacts_access: $[[ inputs.plan_artifacts_access ]]
       var_file: $[[ inputs.var_file ]]
       rules: $[[ inputs.plan_rules ]]
+      warning_on_none_empty_plan: $[[ inputs.warning_on_none_empty_plan ]]
   - local: '/templates/apply.yml'
     inputs:
       as: '$[[ inputs.job_name_prefix ]]apply'
diff --git a/templates/validate-plan-destroy.yml b/templates/validate-plan-destroy.yml
index 7e81b35661dbcd1f7fcc61f983c7e29a4c44ba26..cc5ceb4939d851ee003d3322871b0ee4093d8022 100644
--- a/templates/validate-plan-destroy.yml
+++ b/templates/validate-plan-destroy.yml
@@ -130,6 +130,10 @@ spec:
         - when: manual
       type: array
       description: 'Defines the `rules` of the `delete-state` job.'
+    warning_on_none_empty_plan:
+      default: false
+      type: boolean
+      description: 'Whether to mark the job with a warning if the plan contains a diff.'
 
 ---
 
@@ -178,6 +182,7 @@ include:
       destroy: true
       var_file: $[[ inputs.var_file ]]
       rules: $[[ inputs.plan_rules ]]
+      warning_on_none_empty_plan: $[[ inputs.warning_on_none_empty_plan ]]
   - local: '/templates/destroy.yml'
     inputs:
       as: '$[[ inputs.job_name_prefix ]]destroy'
@@ -206,5 +211,5 @@ include:
 # job template, but the issue is that we cannot default it to something
 # meaningful other than `null` - but `null` is also not yet supported, see
 # https://gitlab.com/gitlab-org/gitlab/-/issues/440468
-$[[ inputs.job_name_prefix ]]delete-state:
+'$[[ inputs.job_name_prefix ]]delete-state':
   needs: ['$[[ inputs.job_name_prefix ]]destroy']
diff --git a/templates/validate-plan.yml b/templates/validate-plan.yml
index a491411b66c87b3838e4da14f41fea20cdc9881f..feeba5a1e229efefab8f939810c01de537080cb4 100644
--- a/templates/validate-plan.yml
+++ b/templates/validate-plan.yml
@@ -111,6 +111,10 @@ spec:
         - if: $CI_COMMIT_BRANCH        # If there's no open merge request, add it to a *branch* pipeline instead.
       type: array
       description: 'Defines the `rules` of the `plan` job.'
+    warning_on_none_empty_plan:
+      default: false
+      type: boolean
+      description: 'Whether to mark the job with a warning if the plan contains a diff.'
 
 ---
 
@@ -158,3 +162,4 @@ include:
       artifacts_access: $[[ inputs.artifacts_access ]]
       var_file: $[[ inputs.var_file ]]
       rules: $[[ inputs.plan_rules ]]
+      warning_on_none_empty_plan: $[[ inputs.warning_on_none_empty_plan ]]