VersionVisualizer (VV)

Detta är ett verktyg som frågar aktiva instanser i en miljö efter applikationsinformation såsom version, men där kan även finnas annan intressant information som VM-information, java-version, upptid, etc. Informationen används sedan för att uppdatera en confluence-sida.

VV konfigureras med hjälp av en yaml-fil som innehåller information för confluence (vilken sida och inloggningsuppgifter), loggning samt vilka instanser som skall tillfrågas och hur informationen skall tolkas.

 

Här är ett exempel på en konfiguration som läser två vp-noder i dev-miljön.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 --- confluence_settings: url: https://skl-tp.atlassian.net/wiki/ username: <confluence_username> password: <secret_password_or_api_token> pageid: <numeric_pageid> log_config: version: 1 formatters: simple: format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s' handlers: formatter: simple stream: ext://sys.stdout loggers: VersionVisualizer: level: INFO handlers: [ console ] propagate: no node_settings: # VP Dev 2 noder - cfg: parser: JsonInfoUpdater url_template: "http://ind-{env}-{cluster}{nr}.ind1.sth.basefarm.net:{port}/{status_uri}" status_uri: status cluster: vp port: 8080 env: dtjp nodes: 2 response_map: name: Name version: Version javaVersion: JavaVersion

För att återanvända delar av en konfiguration så kan avancerade yaml-funktioner som referensvariabler användas, se en skarp settings.yaml (ex internal_node_settings.yaml i repot) längst ner i filen för exempel.

Bygge och publicering av release till Nexus

Versionsnumrering

Filen setup.py har en konstant kallad VV_VERSION som håller versionsnumret för VV (I skrivande stund 1.3). Uppdatera värdet om en ny release ska byggas. Värdet används ex när whl-filen skapas, och styr huruvida man ersätter befintliga artefakter i Nexus (om versionsnumret är samma som det gamla) eller skapar nya (om man uppdaterat versionsnumret).

Bygg och publicera

För följande kommandon antas att working dir är VersionVisualizer, och att de körs som Admin på WIndows och sudo eller root på Linux. Dessa skript finns också incheckade med källkoden i repot (https://bitbucket.drift.inera.se/projects/NTJP/repos/versionvisualizer/)

Linux:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # Activate the env VV2ENV/bin/activate # Set up VENV python -m pip install --upgrade pip build pip2pi # First time only # Build whl and bundle deps python -m build python -mpip wheel --wheel-dir wheels dist/*.whl dir2pi wheels # Upload to Nexus cd wheels for whl in \$(find simple -name '*.whl') do curl --fail -u ${CREDENTIALS} --upload-file \$whl https://nexus.drift.inera.se/repository/maven-snapshots/se/inera/ntjp/pypi/\$whl done

Windows:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # Activate the env venv/Scripts/activate.ps1 # Set up VENV python -m pip install --upgrade pip build pip2pi # First time only # Build whl and bundle deps python -m build python -mpip wheel --wheel-dir wheels $('dist/' + (Get-ChildItem dist/*.whl -Name)) dir2pi wheels # Upload to Nexus cd wheels $creds = Get-Credential -Message "Specify username and pwd for the Nexus repo (Basefarm)" foreach ($file in (Get-ChildItem simple/*.whl -Recurse)) { $parameters = @{ Uri = "https://nexus.drift.inera.se/repository/maven-snapshots/se/inera/ntjp/pypi/simple/$($file.Directory.Name)/$($file.Name)" InFile = "$((Get-Location))\$($file.Name)" # Use the actual file, not the symlink. It's located a level up, in the wheels folder Credential = $creds Method = 'Put' ContentType = 'application/zip' } Invoke-WebRequest @parameters }

 

Deployment i produktion

Efter fullgjord publicering på Nexus enligt ovan, logga in på ind-ptjp-misc1.ind1.basefarm.net och gör ev uppdatering av yaml-filer under /opt/VersionVisualizer2/settings.d. Därefter körs /opt/VersionVisualizer2/run.sh som då laddar ner senaste versionen av VV, synkar yaml-filer och startar VersionVisualizer för varje hittad yaml-fil.

Första installation

VV är skrivet för python 3.6 (och senare) och distribueras i form av en whl som kan installeras med pip. Det kan vara bra att installera VV tillsamman med dess beroenden i en virtuel python-miljö, en sk venv. Följande steg används då:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 # skapa venv sudo python3 -mvenv /path/to/installdir # ändra ägandeskap för miljön till användaren som skall köra vv sudo chown vvuser -r /path/to/installdir # bli användaren i fråga sudo su - vvuser # gå till och aktivera miljön cd /path/to/installdir source ./bin/activate # installera VV python -mpip install --upgrade /path/to/wheels/VersionVisualizer_NTjP-1.0-py3-none-any.whl #kör VV python -mVersionVisualizer --settings /path/to/settings.yaml