sync
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 3m1s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 3m1s
This commit is contained in:
22
.github/workflows/nomad-deploy.yml
vendored
Normal file
22
.github/workflows/nomad-deploy.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Deploy to Nomad
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_run:
|
||||||
|
workflows: ["build-container"] # Name of your build workflow
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Deploy with Nomad
|
||||||
|
uses: qazz92/nomad-deploy@v1
|
||||||
|
with:
|
||||||
|
address: http://nomad.service.dc1.consul:4646
|
||||||
|
job: fitbit-garmin-sync.nomad
|
||||||
@@ -13,7 +13,11 @@ job "fitbit-garmin-sync" {
|
|||||||
volumes = [
|
volumes = [
|
||||||
"/mnt/Public/configs/fitbit-garmin-sync:/app/data"
|
"/mnt/Public/configs/fitbit-garmin-sync:/app/data"
|
||||||
]
|
]
|
||||||
|
memory_hard_limit = 2048
|
||||||
}
|
}
|
||||||
|
env {
|
||||||
|
CONFIG_SOURCE = "consul"
|
||||||
|
}
|
||||||
|
|
||||||
# Sensible resource allocation for a lightweight Python script.
|
# Sensible resource allocation for a lightweight Python script.
|
||||||
resources {
|
resources {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# Fitbit to Garmin Weight Sync Application
|
# Fitbit to Garmin Weight Sync Application
|
||||||
# Syncs weight data from Fitbit API to Garmin Connect
|
# Syncs weight data from Fitbit API to Garmin Connect
|
||||||
|
|
||||||
|
import base64
|
||||||
import sys
|
import sys
|
||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
@@ -139,38 +140,19 @@ class ConfigManager:
|
|||||||
port=consul_config.get('port', 8500)
|
port=consul_config.get('port', 8500)
|
||||||
)
|
)
|
||||||
prefix = consul_config.get('prefix', 'fitbit-garmin-sync').strip('/')
|
prefix = consul_config.get('prefix', 'fitbit-garmin-sync').strip('/')
|
||||||
config_prefix = f"{prefix}/config/"
|
full_config_key = f"{prefix}/config" # The key where the full JSON config is stored
|
||||||
|
|
||||||
index, data = c.kv.get(config_prefix, recurse=True)
|
index, data = c.kv.get(full_config_key) # Fetch this specific key
|
||||||
|
|
||||||
if not data:
|
if not data or not data.get('Value'):
|
||||||
logger.info("No configuration found in Consul at prefix: %s", config_prefix)
|
logger.info("No configuration found in Consul at key: %s", full_config_key)
|
||||||
return
|
return
|
||||||
|
|
||||||
consul_conf = {}
|
# Value is base64 encoded JSON
|
||||||
for item in data:
|
encoded_value = data['Value']
|
||||||
key_path = item['Key'].replace(config_prefix, '').split('/')
|
decoded_json_str = base64.b64decode(encoded_value).decode('utf-8')
|
||||||
value_str = item['Value'].decode('utf-8')
|
consul_conf = json.loads(decoded_json_str) # Parse the JSON
|
||||||
|
|
||||||
# Try to convert value to appropriate type
|
|
||||||
value: object
|
|
||||||
if value_str.lower() == 'true':
|
|
||||||
value = True
|
|
||||||
elif value_str.lower() == 'false':
|
|
||||||
value = False
|
|
||||||
elif value_str.isdigit():
|
|
||||||
value = int(value_str)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
value = float(value_str)
|
|
||||||
except ValueError:
|
|
||||||
value = value_str # It's a string
|
|
||||||
|
|
||||||
temp_conf = consul_conf
|
|
||||||
for part in key_path[:-1]:
|
|
||||||
temp_conf = temp_conf.setdefault(part, {})
|
|
||||||
temp_conf[key_path[-1]] = value
|
|
||||||
|
|
||||||
# Deep merge consul_conf into self.config
|
# Deep merge consul_conf into self.config
|
||||||
self._deep_merge(self.config, consul_conf)
|
self._deep_merge(self.config, consul_conf)
|
||||||
logger.info("Successfully loaded and merged configuration from Consul.")
|
logger.info("Successfully loaded and merged configuration from Consul.")
|
||||||
|
|||||||
Reference in New Issue
Block a user