add git credential auth
This commit is contained in:
@@ -3,3 +3,4 @@
|
||||
## TODO
|
||||
- Support building images within docker compose
|
||||
- GUI
|
||||
- Allow stack to be named whatever is needed
|
||||
@@ -1,8 +1,8 @@
|
||||
"""Provides setup and the core Composer class functionality to interact with a compose stack"""
|
||||
|
||||
from git import Repo
|
||||
from git import exc, Repo
|
||||
import logging
|
||||
from os import getenv
|
||||
from os import environ, getenv
|
||||
from pathlib import Path
|
||||
from python_on_whales import DockerClient
|
||||
from python_on_whales.exceptions import DockerException
|
||||
@@ -16,10 +16,27 @@ logger = logging.getLogger("composer-agent-logger")
|
||||
logger.addHandler(handler)
|
||||
logger.setLevel(logging.DEBUG) #TODO: add something to change log levles
|
||||
|
||||
environ['GIT_TERMINAL_PROMPT'] = '0'
|
||||
|
||||
class Setup:
|
||||
|
||||
"""Setup class ensuring appropriate files and symlinks are created for a Composer instance"""
|
||||
|
||||
@staticmethod
|
||||
def create_credential_remote():
|
||||
|
||||
"""Creates a remote url with credentials embedded"""
|
||||
|
||||
username, password = getenv("GIT_USERNAME"), getenv("GIT_PASSWORD")
|
||||
remote = getenv("REMOTE_REPO")
|
||||
if not remote:
|
||||
logger.critical("Remote URL not defined, aborting!")
|
||||
raise Exception("Remote URL not defined!")
|
||||
if username is not None and password is not None:
|
||||
return f"https://{username}:{password}@{remote.removeprefix('https://')}"
|
||||
else:
|
||||
return remote
|
||||
|
||||
@staticmethod
|
||||
def create_symlink():
|
||||
|
||||
@@ -74,10 +91,14 @@ class Composer:
|
||||
|
||||
if not Path("store/stack/.git").exists():
|
||||
self.repo = Repo.init("store/stack")
|
||||
self.repo.create_remote('origin', url)
|
||||
self.repo.create_remote('origin', remote_url)
|
||||
else:
|
||||
self.repo = Repo("store/stack")
|
||||
try:
|
||||
self.repo.remotes.origin.pull('master')
|
||||
except exc.GitCommandError:
|
||||
logger.critical("Failed to autheticate remote, aborting!")
|
||||
raise Exception("Failed to authenticate remote!")
|
||||
if self.docker.compose.config(return_json=True)["name"] != "stack":
|
||||
logger.warn(f"Composer stack name is wrong, either make sure it is set manually or keep it store/stack")
|
||||
self.start_update_job()
|
||||
@@ -137,14 +158,17 @@ class Composer:
|
||||
else:
|
||||
logger.warn(f"Undefined status {status} - use up, down, or restart")
|
||||
except DockerException as error:
|
||||
logger.critical(f"Setting status of composer failed: {error}")
|
||||
logger.error(f"Setting status of composer failed: {error}")
|
||||
|
||||
def update(self):
|
||||
|
||||
"""Updates the Composer stack based on the remote repo"""
|
||||
|
||||
current = self.repo.head.commit
|
||||
try:
|
||||
self.repo.remotes.origin.pull('master')
|
||||
except exc.GitCommandError:
|
||||
logger.critical("Failed to autheticate remote, aborting!")
|
||||
if current != self.repo.head.commit:
|
||||
self._create_services()
|
||||
self.set_status("up")
|
||||
@@ -240,8 +264,7 @@ class Service:
|
||||
else:
|
||||
logger.warn(f"Undefined status {status} - use up, down, or restart")
|
||||
except DockerException as error:
|
||||
logger.critical(f"Setting status for service {self.name} failed: {error}")
|
||||
logger.critical(error)
|
||||
logger.error(f"Setting status for service {self.name} failed: {error}")
|
||||
|
||||
def update(self, restart=True):
|
||||
|
||||
|
||||
@@ -5,7 +5,8 @@ import time
|
||||
|
||||
Setup.populate_store()
|
||||
Setup.create_symlink()
|
||||
composer = Composer(getenv("REMOTE_REPO"))
|
||||
remote = Setup.create_credential_remote()
|
||||
composer = Composer(remote)
|
||||
while True:
|
||||
schedule.run_pending()
|
||||
time.sleep(1)
|
||||
Reference in New Issue
Block a user