Skip to content

Commit

Permalink
fix typos.
Browse files Browse the repository at this point in the history
  • Loading branch information
antarcticrainforest committed Mar 18, 2024
1 parent 82e9286 commit 6d0d790
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 41 deletions.
4 changes: 0 additions & 4 deletions assets/share/freva/deployment/playbooks/versions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
ansible.builtin.script:
cmd: "{{ asset_dir }}/scripts/inspect.sh solr"
become: "{{ databrowser_ansible_become_user | default('root') is defined and databrowser_ansible_become_user | default('root') != '' }}"
when: inventory_hostname in groups['databrowser']
- name: Display solr version
debug:
msg: "{{ solr.stdout }}"
Expand All @@ -25,15 +24,13 @@
ansible.builtin.script:
cmd: "{{ asset_dir }}/scripts/inspect.sh ghcr.io/freva-clint/freva-web"
become: "{{ web_ansible_become_user | default('root') is defined and web_ansible_become_user | default('root') != '' }}"
when: inventory_hostname in groups['web']
- hosts: db
tasks:
- name: Get vault version
register: vault
ansible.builtin.script:
cmd: "{{ asset_dir }}/scripts/inspect.sh ghcr.io/freva-clint/freva-deployment/vault"
become: "{{ db_ansible_become_user | default('root') is defined and db_ansible_become_user | default('root') != '' }}"
when: inventory_hostname in groups['vault']
- name: Display vault version
debug:
msg: "{{ vault.stdout }}"
Expand All @@ -44,7 +41,6 @@
tags: core
shell:
cmd: "{{ core_install_dir | expanduser }}/bin/freva -V 2> /dev/null | awk '{print $NF}'"
when: inventory_hostname in groups['core']
- name: Display core version
debug:
msg: "{{ core.stdout }}"
87 changes: 51 additions & 36 deletions src/freva_deployment/deploy.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,19 @@
import random
import string
import sys
import time
from copy import deepcopy
from getpass import getuser
from io import StringIO
from pathlib import Path
from socket import gethostbyname, gethostname
from typing import Any, cast
from urllib.parse import urlparse

import tomlkit
import yaml
from ansible_runner import run
from rich import print
from ansible_runner import run, run_async
from rich import print as pprint
from rich.prompt import Prompt

from freva_deployment import FREVA_PYTHON_VERSION
Expand Down Expand Up @@ -512,9 +514,9 @@ def _set_additional_config_values(
if dump_file:
config[step]["vars"][f"{step}_dump"] = str(dump_file)

def parse_config(self) -> str:
def parse_config(self, steps: list[str]) -> str:
"""Create config files for anisble and evaluation_system.conf."""
playbook = self.create_playbooks()
playbook = self.create_playbooks(set(steps + self.steps))
logger.info("Parsing configurations")
self._check_config()
config: dict[str, dict[str, dict[str, str | int | bool]]] = {}
Expand Down Expand Up @@ -574,12 +576,12 @@ def steps(self) -> list[str]:
steps.append("vault")
return [s for s in self.step_order if s in steps]

def create_playbooks(self) -> str:
def create_playbooks(self, steps: set[str]) -> str:
"""Create the ansible playbook form all steps."""
logger.info("Creating Ansible playbooks")
playbook = []
[getattr(self, f"_prep_{step}")() for step in self.step_order]
for step in self.steps:
for step in steps:
playbook_file = (
self.playbooks.get(step)
or self.playbook_dir / f"{step}-server-playbook.yml"
Expand Down Expand Up @@ -672,19 +674,19 @@ def play(
ask_pass=ask_pass, verbosity=verbosity, ssh_port=ssh_port
)
except KeyboardInterrupt:
print(
pprint(
" [red][ERROR]: User interrupted execution[/]", file=sys.stderr
)
raise SystemExit(130)

def get_steps_from_versions(
self,
envvars: dict[str, str],
extravars: dict[str, str],
cmdline: dict[str, str],
extravars: dict[str, str | int],
cmdline: str,
passwords: dict[str, str],
verbosity: int,
) -> set[str, str]:
) -> list[str]:
"""Check the versions of the different freva parts."""
config: dict[str, dict[str, dict[str, str | int | bool]]] = {}
cfg = deepcopy(self.cfg)
Expand All @@ -704,18 +706,33 @@ def get_steps_from_versions(
config["core"]["vars"]["core_install_dir"] = cfg["core"]["config"][
"install_dir"
]
extravars["forks"] = 10
event = run(
private_data_dir=str(self._td.parent_dir),
playbook=str(asset_dir / "playbooks" / "versions.yaml"),
inventory=config,
envvars=envvars,
passwords=passwords,
extravars=extravars,
cmdline=cmdline,
verbosity=verbosity,
forks=4,
)
extravars["forks"] = 4
stdout = sys.stdout
buffer = StringIO()
pprint("Getting versions of micro services ...", end="")
try:
sys.stdout = buffer
thread, event = run_async(
private_data_dir=str(self._td.parent_dir),
playbook=str(asset_dir / "playbooks" / "versions.yaml"),
inventory=config,
envvars=envvars,
passwords=passwords,
extravars=extravars,
cmdline=cmdline,
verbosity=verbosity,
forks=4,
quiet=False,
)
while thread.is_alive():
time.sleep(0.5)
finally:
sys.stdout = stdout
if event.status != "successful":
pprint(" [red]fail[/red]")
print(buffer.getvalue())
raise SystemExit(1)
pprint(" [green]ok[/green]")
versions = {}
for res in event.events:
msg = res.get("event_data", {}).get("res", {}).get("msg")
Expand Down Expand Up @@ -743,29 +760,27 @@ def _play(
ssh_port: int, default: 22
Set the ssh port, in 99.9% of cases this should be left at port 22
"""
envvars = {}
envvars: dict[str, str] = {}
envvars["ANSIBLE_STDOUT_CALLBACK"] = "yaml"
extravars = {"ansible_port": ssh_port, "stdout_callback": "yaml"}
extravars: dict[str, str | int] = {
"ansible_port": ssh_port,
"stdout_callback": "yaml",
}
if self.local_debug:
extravars["ansible_connection"] = "local"

cmdline = "--ask-become"
if ask_pass:
cmdline += " --ask-pass"
passwords = self.get_ansible_password(ask_pass)
steps = set(
self.get_steps_from_versions(
envvars.copy(),
extravars.copy(),
cmdline,
passwords.copy(),
verbosity,
)
+ self.steps
steps = self.get_steps_from_versions(
envvars.copy(),
extravars.copy(),
cmdline,
passwords.copy(),
verbosity,
)
print(steps)
return
inventory = self.parse_config()
inventory = self.parse_config(steps)
self.create_eval_config()
logger.debug(inventory)
with self.inventory_file.open("w") as f_obj:
Expand Down
2 changes: 1 addition & 1 deletion src/freva_deployment/versions.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
"databrowser": "2401.0.0",
"solr": "9.5.0",
"web": "2403.0.0",
"freva": "2309.0.2"
"core": "2309.0.2"
}
22 changes: 22 additions & 0 deletions src/freva_deployment/versions.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from pathlib import Path
from typing import Dict, List

from rich.prompt import Prompt


def get_steps_from_versions(detected_versions: Dict[str, str]) -> List[str]:
"""Decide on services the should be deployed, based on thier versions.
Expand All @@ -26,4 +28,24 @@ def get_steps_from_versions(detected_versions: Dict[str, str]) -> List[str]:
version = detected_versions.get(service, "").strip("v") or "0.0.0"
if version < min_version:
steps.append(service)
elif version > min_version:
# We do have a problem: an installed version has a higher version
# the the defined minium version, possibly the deployment
# software is outdated.
answ = (
Prompt.ask(
f"The installed version for {service} is higher"
" than the min. defined version.\nThere might be"
" a chance that the current deployment software"
" is outdated.\nIf you cotinue you will "
f"[b]downgrade[/b] {service} from "
f"{version} to {min_version}. "
"\nDo you want to continue \\[y|N]"
).lower()
or "n"
)
if answ[0] == "y":
steps.append(service)
else:
raise SystemExit(1)
return steps

0 comments on commit 6d0d790

Please sign in to comment.