MINOR: vars: add a VF_CREATEONLY flag for creation

Passing this flag to var_set() will result in the variable to only be
created if it did not exist, otherwise nothing is done (it's not even
updated). This will be used for pre-registering names.
diff --git a/include/haproxy/vars-t.h b/include/haproxy/vars-t.h
index 0e35ade..06f2712 100644
--- a/include/haproxy/vars-t.h
+++ b/include/haproxy/vars-t.h
@@ -27,6 +27,7 @@
 
 /* flags used when setting/clearing variables */
 #define VF_UPDATEONLY 0x00000001   // SCOPE_PROC variables are only updated
+#define VF_CREATEONLY 0x00000002   // do nothing if the variable already exists
 
 enum vars_scope {
 	SCOPE_SESS = 0,
diff --git a/src/vars.c b/src/vars.c
index df26ac1..80a6a45 100644
--- a/src/vars.c
+++ b/src/vars.c
@@ -356,6 +356,7 @@
  * Flags is a bitfield that may contain one of the following flags:
  *   - VF_UPDATEONLY: if the scope is SCOPE_PROC, the variable may only be
  *     updated but not created.
+ *   - VF_CREATEONLY: do nothing if the variable already exists (success).
  *
  * It returns 0 on failure, non-zero on success.
  */
@@ -375,6 +376,11 @@
 	var = var_get(vars, name);
 
 	if (var) {
+		if (flags & VF_CREATEONLY) {
+			ret = 1;
+			goto unlock;
+		}
+
 		/* free its used memory. */
 		if (var->data.type == SMP_T_STR ||
 		    var->data.type == SMP_T_BIN) {