summary refs log tree commit diff
path: root/src/nm-cloud-setup/nm-cloud-setup-utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-cloud-setup/nm-cloud-setup-utils.h')
-rw-r--r--src/nm-cloud-setup/nm-cloud-setup-utils.h73
1 files changed, 46 insertions, 27 deletions
diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.h b/src/nm-cloud-setup/nm-cloud-setup-utils.h
index fed0f4b6..4ca4634c 100644
--- a/src/nm-cloud-setup/nm-cloud-setup-utils.h
+++ b/src/nm-cloud-setup/nm-cloud-setup-utils.h
@@ -7,9 +7,20 @@
 
 /*****************************************************************************/
 
-/* mark names for  variables that can be used as configuration. Search
- * for NMCS_ENV_VARIABLE() to find all honored environment variables. */
-#define NMCS_ENV_VARIABLE(var) "" var ""
+/* Environment variables for configuring nm-cloud-setup */
+#define NMCS_ENV_NM_CLOUD_SETUP_ALIYUN "NM_CLOUD_SETUP_ALIYUN"
+#define NMCS_ENV_NM_CLOUD_SETUP_AZURE  "NM_CLOUD_SETUP_AZURE"
+#define NMCS_ENV_NM_CLOUD_SETUP_EC2    "NM_CLOUD_SETUP_EC2"
+#define NMCS_ENV_NM_CLOUD_SETUP_GCP    "NM_CLOUD_SETUP_GCP"
+#define NMCS_ENV_NM_CLOUD_SETUP_LOG    "NM_CLOUD_SETUP_LOG"
+
+/* Undocumented/internal environment variables for configuring nm-cloud-setup.
+ * These are mainly for testing/debugging. */
+#define NMCS_ENV_NM_CLOUD_SETUP_ALIYUN_HOST    "NM_CLOUD_SETUP_ALIYUN_HOST"
+#define NMCS_ENV_NM_CLOUD_SETUP_AZURE_HOST     "NM_CLOUD_SETUP_AZURE_HOST"
+#define NMCS_ENV_NM_CLOUD_SETUP_EC2_HOST       "NM_CLOUD_SETUP_EC2_HOST"
+#define NMCS_ENV_NM_CLOUD_SETUP_GCP_HOST       "NM_CLOUD_SETUP_GCP_HOST"
+#define NMCS_ENV_NM_CLOUD_SETUP_MAP_INTERFACES "NM_CLOUD_SETUP_MAP_INTERFACES"
 
 /*****************************************************************************/
 
@@ -40,30 +51,6 @@ gboolean nmcs_wait_for_objects_iterate_until_done(GMainContext *context, int tim
 
 /*****************************************************************************/
 
-typedef void (*NMCSUtilsPollProbeStartFcn)(GCancellable       *cancellable,
-                                           gpointer            probe_user_data,
-                                           GAsyncReadyCallback callback,
-                                           gpointer            user_data);
-
-typedef gboolean (*NMCSUtilsPollProbeFinishFcn)(GObject      *source,
-                                                GAsyncResult *result,
-                                                gpointer      probe_user_data,
-                                                GError      **error);
-
-void nmcs_utils_poll(int                         poll_timeout_ms,
-                     int                         ratelimit_timeout_ms,
-                     int                         sleep_timeout_ms,
-                     NMCSUtilsPollProbeStartFcn  probe_start_fcn,
-                     NMCSUtilsPollProbeFinishFcn probe_finish_fcn,
-                     gpointer                    probe_user_data,
-                     GCancellable               *cancellable,
-                     GAsyncReadyCallback         callback,
-                     gpointer                    user_data);
-
-gboolean nmcs_utils_poll_finish(GAsyncResult *result, gpointer *probe_user_data, GError **error);
-
-/*****************************************************************************/
-
 char *nmcs_utils_hwaddr_normalize(const char *hwaddr, gssize len);
 
 static inline char *
@@ -104,6 +91,38 @@ const char *nmcs_utils_parse_get_full_line(GBytes *mem, const char *needle);
 
 /*****************************************************************************/
 
+#define NMCS_DEFINE_HOST_BASE(base_fcn, nmcs_env_host, default_host)               \
+    static const char *base_fcn(void)                                              \
+    {                                                                              \
+        static const char *base_cached = NULL;                                     \
+        const char        *base;                                                   \
+                                                                                   \
+again:                                                                             \
+        base = g_atomic_pointer_get(&base_cached);                                 \
+        if (G_UNLIKELY(!base)) {                                                   \
+            /* The base URI can be set via environment variable. \
+             * This is mainly for testing, it's not usually supposed to be configured. \
+             * Consider this private API! */                 \
+            base = g_getenv("" nmcs_env_host "");                                  \
+            base = nmcs_utils_uri_complete_interned(base) ?: ("" default_host ""); \
+                                                                                   \
+            if (!g_atomic_pointer_compare_and_exchange(&base_cached, NULL, base))  \
+                goto again;                                                        \
+                                                                                   \
+            if (!nm_streq(base, ("" default_host ""))) {                           \
+                _LOGD("test: mock %s=\"%s\" (default \"%s\")",                     \
+                      "" nmcs_env_host "",                                         \
+                      base,                                                        \
+                      "" default_host "");                                         \
+            }                                                                      \
+        }                                                                          \
+                                                                                   \
+        return base;                                                               \
+    }                                                                              \
+    _NM_DUMMY_STRUCT_FOR_TRAILING_SEMICOLON
+
+/*****************************************************************************/
+
 char *nmcs_utils_uri_build_concat_v(const char *base, const char **components, gsize n_components);
 
 #define nmcs_utils_uri_build_concat(base, ...) \