Skip to content
Snippets Groups Projects
Commit 6956470b authored by geant-release-service's avatar geant-release-service
Browse files

Finished release 0.2.

parents 53a97df5 a896b769
No related branches found
No related tags found
No related merge requests found
Pipeline #88835 passed
...@@ -23,4 +23,6 @@ docs/source/lso.rst ...@@ -23,4 +23,6 @@ docs/source/lso.rst
docs/source/lso.*.rst docs/source/lso.*.rst
docs/source/modules.rst docs/source/modules.rst
artifactory/
.env .env
# Changelog # Changelog
## [0.2] - 2024-08-29
- Respect existing dir and files
## [0.1] - 2024-08-26 ## [0.1] - 2024-08-26
- initial skeleton - initial skeleton
- add logic for converting API to an ansible inventory - add logic for converting API to an ansible inventory
import os
import shutil import shutil
import sys import sys
import tempfile import tempfile
...@@ -78,9 +79,11 @@ def generate_host_vars_and_hosts_file(router_subscriptions: list, temp_dir: Path ...@@ -78,9 +79,11 @@ def generate_host_vars_and_hosts_file(router_subscriptions: list, temp_dir: Path
@contextmanager @contextmanager
def safe_write(temp_dir: Path, old_host_vars_dir: Path) -> Generator[Path, None, None]: def safe_write(temp_dir: Path) -> Generator[Path, None, None]:
settings = load_settings()
temp_dir.mkdir(exist_ok=True) temp_dir.mkdir(exist_ok=True)
ansible_inventory_path = Path(settings.aig_ansible_inventory_path)
ansible_inventory_path.mkdir(exist_ok=True)
try: try:
yield temp_dir yield temp_dir
except Exception as e: except Exception as e:
...@@ -88,11 +91,16 @@ def safe_write(temp_dir: Path, old_host_vars_dir: Path) -> Generator[Path, None, ...@@ -88,11 +91,16 @@ def safe_write(temp_dir: Path, old_host_vars_dir: Path) -> Generator[Path, None,
typer.echo(f"Error: {e}") typer.echo(f"Error: {e}")
sys.exit(1) sys.exit(1)
else: else:
if old_host_vars_dir.exists(): host_vars = ansible_inventory_path / "host_vars"
shutil.rmtree(old_host_vars_dir) if host_vars.exists():
shutil.rmtree(host_vars)
shutil.copytree(temp_dir, old_host_vars_dir) # Copy new host_vars dir hosts_file = ansible_inventory_path / "hosts.yaml"
shutil.copy(temp_dir / "hosts.yaml", old_host_vars_dir) # Copy new hosts.yaml file if hosts_file.exists():
os.remove(hosts_file)
shutil.copytree(temp_dir / "host_vars", ansible_inventory_path / "host_vars") # Copy new host_vars dir
shutil.copy(temp_dir / "hosts.yaml", ansible_inventory_path) # Copy new hosts.yaml file
shutil.rmtree(temp_dir) shutil.rmtree(temp_dir)
...@@ -111,9 +119,7 @@ def generate_inventory_from_api() -> None: ...@@ -111,9 +119,7 @@ def generate_inventory_from_api() -> None:
sys.exit(1) sys.exit(1)
temp_dir = Path(tempfile.mkdtemp()) temp_dir = Path(tempfile.mkdtemp())
old_host_vars_dir = Path(settings.aig_ansible_inventory_path) with safe_write(temp_dir) as temp_dir:
with safe_write(temp_dir, old_host_vars_dir) as temp_dir:
generate_host_vars_and_hosts_file(router_subscriptions, temp_dir) generate_host_vars_and_hosts_file(router_subscriptions, temp_dir)
......
...@@ -2,7 +2,7 @@ from setuptools import find_packages, setup ...@@ -2,7 +2,7 @@ from setuptools import find_packages, setup
setup( setup(
name="ansible_inventory_generator", name="ansible_inventory_generator",
version="0.1", version="0.2",
author="GEANT", author="GEANT",
author_email="gap@geant.org", author_email="gap@geant.org",
description="Ansible inventory generator for WFO", description="Ansible inventory generator for WFO",
......
...@@ -248,3 +248,21 @@ def test_inventory_generation_handles_exceptions_and_preserves_file_integrity( ...@@ -248,3 +248,21 @@ def test_inventory_generation_handles_exceptions_and_preserves_file_integrity(
with path.open("r") as f: with path.open("r") as f:
content = f.read() content = f.read()
assert content == file_contents[path_key] assert content == file_contents[path_key]
def test_generate_inventory_from_api_empty_json(setup_test, tmp_dir):
with patch("requests.get") as mock_get:
mock_get.return_value.json.return_value = []
mock_get.return_value.status_code = 200
generate_inventory_from_api()
# Check if hosts.yaml file is created
hosts_file = tmp_dir / "hosts.yaml"
assert hosts_file.exists()
# Check that the hosts.yaml file is empty or contains no hosts
with hosts_file.open() as f:
content = yaml.safe_load(f)
expected_content = {"all": {"children": {"routers": {"children": {}}}}}
assert content == expected_content
...@@ -30,7 +30,7 @@ commands = ...@@ -30,7 +30,7 @@ commands =
coverage run --source ansible_inventory_generator -m pytest {posargs} coverage run --source ansible_inventory_generator -m pytest {posargs}
coverage xml coverage xml
coverage html coverage html
sh -c "if [ $SKIP_ALL_TESTS -eq 1 ]; then echo 'Skipping coverage report'; else coverage report --fail-under 40; fi" sh -c "if [ $SKIP_ALL_TESTS -eq 1 ]; then echo 'Skipping coverage report'; else coverage report --fail-under 30; fi"
allowlist_externals = allowlist_externals =
sh sh
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment