From 11ee0478ff0f2c577db45e46cdc6d77c1a8b8bab Mon Sep 17 00:00:00 2001
From: Mohammad Torkashvand <mohammad.torkashvand@geant.org>
Date: Thu, 25 Jan 2024 09:32:25 +0100
Subject: [PATCH] add API key for calling GSO endpoint

---
 README.md                             | 3 ++-
 ansible_inventory_generator/app.py    | 4 +++-
 ansible_inventory_generator/config.py | 1 +
 example.env                           | 1 +
 setup.py                              | 2 +-
 tests/test_inventory_generator.py     | 1 +
 6 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 8437d31..75220d7 100644
--- a/README.md
+++ b/README.md
@@ -21,5 +21,6 @@ export api_url=http://127.0.0.1:8080/api/v1/subscriptions/routers
 export host_vars_dir=/path/to/base/hostvars/dir
 export vars_file_name=wfo_vars.yaml
 export hosts_file_dir=/path/to/base/hosts/dir
+export gso_api_key=get_this_token_from_gso_admin_based_on_your_environment
 
-ansible_inventory_generator
\ No newline at end of file
+ansible_inventory_generator
diff --git a/ansible_inventory_generator/app.py b/ansible_inventory_generator/app.py
index 7c4d1fb..7b535c2 100644
--- a/ansible_inventory_generator/app.py
+++ b/ansible_inventory_generator/app.py
@@ -100,7 +100,9 @@ def safe_write(temp_dir: Path, old_vars_dir: Path, old_hosts_file: Path) -> Gene
 def generate_inventory_from_api() -> None:
     settings = load_settings()
     """Generate Ansible inventory from API."""
-    response = requests.get(settings.api_url, timeout=API_TIMEOUT_SEC)
+    response = requests.get(
+        settings.api_url, timeout=API_TIMEOUT_SEC, headers={"Authorization": f"Bearer {settings.gso_api_key}"}
+    )
     response.raise_for_status()
     try:
         router_subscriptions = response.json()
diff --git a/ansible_inventory_generator/config.py b/ansible_inventory_generator/config.py
index b94b8ce..35e125b 100644
--- a/ansible_inventory_generator/config.py
+++ b/ansible_inventory_generator/config.py
@@ -6,6 +6,7 @@ class Settings(BaseSettings):
     host_vars_dir: str
     vars_file_name: str
     hosts_file_dir: str
+    gso_api_key: str
 
     class Config:
         env_file = "../.env"
diff --git a/example.env b/example.env
index 4654690..5900559 100644
--- a/example.env
+++ b/example.env
@@ -2,3 +2,4 @@ api_url=http://127.0.0.1:8080/api/v1/subscriptions/routers
 host_vars_dir=/path/to/base/hostvars/dir
 vars_file_name=wfo_vars.yaml
 hosts_file_dir=/path/to/base/hosts/dir
+gso_api_key=askjdhaskhdaksjhdkajshdkashd
diff --git a/setup.py b/setup.py
index f676b0f..7ffd35e 100644
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,7 @@ setup(
     name="ansible_inventory_generator",
     version="0.1",
     author="GEANT",
-    author_email="swd@geant.org",
+    author_email="gap@geant.org",
     description="Ansible inventory generator for WFO",
     url="https://gitlab.software.geant.org/goat/gap/ansible_inventory_generator",
     packages=find_packages(),
diff --git a/tests/test_inventory_generator.py b/tests/test_inventory_generator.py
index a309c7b..2b5fc13 100644
--- a/tests/test_inventory_generator.py
+++ b/tests/test_inventory_generator.py
@@ -157,6 +157,7 @@ def setup_test(tmp_dir, mocked_subscription_api_data):
             host_vars_dir=str(tmp_dir),
             vars_file_name="wfo_vars.yaml",
             hosts_file_dir=str(tmp_dir),
+            gso_api_key="random_gso_api_key",
         )
 
         mock_get.return_value.json.return_value = mocked_subscription_api_data
-- 
GitLab