wip - load ansible settings from VARS and not from ansible.cfg

This commit is contained in:
Stephan Lüscher 2024-05-09 12:10:19 +00:00
parent 50395caec7
commit aa5377e6d7
No known key found for this signature in database
GPG key ID: 445779060FF3D3CF
9 changed files with 43 additions and 30 deletions

5
.gitignore vendored
View file

@ -1,3 +1,8 @@
## Ansible
**/collections
!**/collections/requirements.yml
## Python
# Byte-compiled / optimized / DLL files # Byte-compiled / optimized / DLL files
__pycache__/ __pycache__/
*.py[cod] *.py[cod]

View file

@ -2,19 +2,31 @@
FROM docker.io/library/python:3.11-alpine3.19 FROM docker.io/library/python:3.11-alpine3.19
# Environment vars # Environment vars
ENV PROJECT_DIR="/anvil"
ENV ANSIBLE_DIR="${PROJECT_DIR}/ansible"
ENV NICEGUI_DIR="${PROJECT_DIR}/nicegui"
ENV PIPX_BIN_DIR="/usr/local/py-utils" ENV PIPX_BIN_DIR="/usr/local/py-utils"
ENV PIPX_HOME="/usr/local/pipx" ENV PIPX_HOME="/usr/local/pipx"
ENV POETRY_VERSION="1.8.2" ENV POETRY_VERSION="1.8.2"
ENV POETRY_VIRTUALENVS_CREATE="true" ENV POETRY_VIRTUALENVS_CREATE="true"
ENV POETRY_VIRTUALENVS_IN_PROJECT="true" ENV POETRY_VIRTUALENVS_IN_PROJECT="true"
ENV PATH="${PATH}:${PIPX_BIN_DIR}:${PIPX_HOME}/venvs/poetry/bin:/anvil/.venv/bin" ENV PATH="${PATH}:${PIPX_BIN_DIR}:${PIPX_HOME}/venvs/poetry/bin:/${PROJECT_DIR}/.venv/bin"
## Ansible settings
ENV ANSIBLE_INVENTORY="${ANSIBLE_DIR}/inventory.yml"
ENV ANSIBLE_ROLES_PATH="${ANSIBLE_DIR}/roles"
ENV ANSIBLE_COLLECTIONS_PATH="${ANSIBLE_DIR}/collections"
ENV ANSIBLE_PRIVATE_KEY_FILE="/certs/ssh/ublue-os_forge-id_ed25519"
ENV ANSIBLE_DISPLAY_SKIPPED_HOSTS="False"
ENV ANSIBLE_STDOUT_CALLBACK="yaml"
ENV ANSIBLE_CALLBACKS_ENABLED="ansible.posix.profile_tasks"
ENV ANSIBLE_HOST_KEY_CHECKING="False"
# Install system dependencies # Install system dependencies
RUN apk --no-cache add pipx openssh bash RUN apk --no-cache add pipx openssh bash
RUN pipx install poetry==${POETRY_VERSION} RUN pipx install poetry==${POETRY_VERSION}
# Install ansible and dependencies # Install ansible and dependencies
WORKDIR /anvil WORKDIR ${PROJECT_DIR}
COPY . . COPY . .
RUN poetry install --no-root RUN poetry install --no-root
CMD poetry env use .venv/bin/python && \ CMD poetry env use .venv/bin/python && \

View file

@ -4,7 +4,7 @@
- name: DEBUG | forge variables - name: DEBUG | forge variables
ansible.builtin.debug: ansible.builtin.debug:
msg: "{{ item }}: {{ lookup('ansible.builtin.vars', item) }}" msg: "{{ item }}: {{ lookup('ansible.builtin.vars', item) }}"
verbosity: 1 # verbosity: 1
loop: "{{ __forge_vars_used }}" loop: "{{ __forge_vars_used }}"
loop_control: loop_control:
extended: true extended: true

View file

@ -1,3 +1,3 @@
#! /bin/bash #! /bin/bash
## Start nicegui ## Start nicegui
poetry env use .venv/bin/python && poetry run python nicegui/main.py poetry env use .venv/bin/python && poetry run python ${NICEGUI_DIR}/main.py

View file

@ -1,10 +1,10 @@
from nicegui import ui from nicegui import ui
from utils import get_project_root import os
def content() -> None: def content() -> None:
project_root = str(get_project_root()) project_root = os.environ['NICEGUI_DIR']
ui.label("Work in progress...").classes("text-h6") ui.label("Work in progress...").classes("text-h6")
ui.image(project_root + "/nicegui/pages/assets/work-in-progress.png").classes( ui.image(project_root + "/pages/assets/work-in-progress.png").classes(
"w-[200%]" "w-[200%]"
) )

View file

@ -1,9 +1,10 @@
import ansible_runner import ansible_runner
import re import re
import asyncio import asyncio
import os
from nicegui import ui from nicegui import ui
from theme import GuiProgressSpinner from theme import GuiProgressSpinner
from utils import get_project_root, local_file_picker from utils import local_file_picker
ANSIBLE_EXTRA_VARS = None ANSIBLE_EXTRA_VARS = None
@ -11,6 +12,7 @@ ANSIBLE_EXTRA_VARS = None
# Ansible integration # Ansible integration
@ui.refreshable # https://www.reddit.com/r/nicegui/comments/1bphjk5/comment/kx7l5kj/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button @ui.refreshable # https://www.reddit.com/r/nicegui/comments/1bphjk5/comment/kx7l5kj/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
async def load_configuration_file() -> None: async def load_configuration_file() -> None:
global ANSIBLE_EXTRA_VARS
result = await local_file_picker( result = await local_file_picker(
directory="/data", multiple=False, file_name_filter=".yml" directory="/data", multiple=False, file_name_filter=".yml"
) )
@ -22,7 +24,7 @@ async def load_configuration_file() -> None:
## Display content ## Display content
ui.code(content=data, language="yaml") ui.code(content=data, language="yaml")
## Preserve configuration file path for ansible-playbook --extra-vars ## Preserve configuration file path for ansible-playbook --extra-vars
ANSIBLE_EXTRA_VARS = f'"@{file_path}"' ANSIBLE_EXTRA_VARS = f"@{file_path}"
async def run_ansible_playbook(playbook_name: str, gui_log: ui.log, gui_spinner: GuiProgressSpinner) -> None: async def run_ansible_playbook(playbook_name: str, gui_log: ui.log, gui_spinner: GuiProgressSpinner) -> None:
@ -31,16 +33,14 @@ async def run_ansible_playbook(playbook_name: str, gui_log: ui.log, gui_spinner:
# Enable spinner # Enable spinner
gui_spinner.enable() gui_spinner.enable()
# Run ansible playbook # Run ansible playbook
project_root = str(get_project_root()) project_root = os.environ['ANSIBLE_DIR']
playbook_path = project_root + "/ansible/playbooks/" playbook_path = f"{project_root}/playbooks/"
inventory_path = project_root + "/ansible/inventory.yml" extra_vars_file = ANSIBLE_EXTRA_VARS
extra_vars_file = str(ANSIBLE_EXTRA_VARS)
thread, runner = ansible_runner.interface.run_command_async( thread, runner = ansible_runner.interface.run_command_async(
executable_cmd="ansible-playbook", executable_cmd="ansible-playbook",
cmdline_args=[ cmdline_args=[
playbook_path + playbook_name, f"{playbook_path}/{playbook_name}",
"-i", # playbook_path + playbook_name,
inventory_path,
"--extra-vars", "--extra-vars",
extra_vars_file, extra_vars_file,
], ],
@ -89,7 +89,7 @@ def content() -> None:
text="Clone project", text="Clone project",
on_click=lambda: run_ansible_playbook( on_click=lambda: run_ansible_playbook(
playbook_name="project_clone.yml", playbook_name="project_clone.yml",
gui_log=playbook_log, gui_log=gui_playbook_log,
gui_spinner=gui_build_progress, gui_spinner=gui_build_progress,
), ),
) )
@ -97,7 +97,7 @@ def content() -> None:
text="Build project", text="Build project",
on_click=lambda: run_ansible_playbook( on_click=lambda: run_ansible_playbook(
"project_build.yml", "project_build.yml",
gui_log=playbook_log, gui_log=gui_playbook_log,
gui_spinner=gui_build_progress, gui_spinner=gui_build_progress,
), ),
) )
@ -114,6 +114,6 @@ def content() -> None:
with ui.row().classes("w-full"): with ui.row().classes("w-full"):
with ui.card().classes("w-full"): with ui.card().classes("w-full"):
ui.label("Playbook Log").classes("text-h6") ui.label("Playbook Log").classes("text-h6")
ui.button("Clear Log", on_click=lambda: playbook_log.clear()) ui.button("Clear Log", on_click=lambda: gui_playbook_log.clear())
playbook_log = ui.log().classes("w-full h-full") gui_playbook_log = ui.log().classes("w-full h-full")

View file

@ -1,10 +1,10 @@
from nicegui import ui from nicegui import ui
from utils import get_project_root import os
def content() -> None: def content() -> None:
project_root = str(get_project_root()) project_root = os.environ['NICEGUI_DIR']
ui.label("Work in progress...").classes("text-h6") ui.label("Work in progress...").classes("text-h6")
ui.image(project_root + "/nicegui/pages/assets/work-in-progress.png").classes( ui.image(project_root + "/pages/assets/work-in-progress.png").classes(
"w-[200%]" "w-[200%]"
) )

View file

@ -1,10 +1,10 @@
from nicegui import ui from nicegui import ui
from utils import get_project_root import os
def content() -> None: def content() -> None:
project_root = str(get_project_root()) project_root = os.environ['NICEGUI_DIR']
ui.label("Work in progress...").classes("text-h6") ui.label("Work in progress...").classes("text-h6")
ui.image(project_root + "/nicegui/pages/assets/work-in-progress.png").classes( ui.image(project_root + "/pages/assets/work-in-progress.png").classes(
"w-[200%]" "w-[200%]"
) )

View file

@ -114,7 +114,3 @@ class local_file_picker(ui.dialog):
f"getElement({self.grid.id}).gridOptions.api.getSelectedRows()" f"getElement({self.grid.id}).gridOptions.api.getSelectedRows()"
) )
self.submit([r["path"] for r in rows]) self.submit([r["path"] for r in rows])
def get_project_root() -> Path:
return Path(__file__).parent.parent