From ca2d2e6587ebacaa584c40764c2d0cc95fa2d4bc Mon Sep 17 00:00:00 2001 From: Kobe Date: Tue, 24 Jun 2025 14:11:16 +0200 Subject: [PATCH] transmit info --- __pycache__/models.cpython-313.pyc | Bin 49477 -> 49701 bytes ...add_portainer_stack_fields_to_instances.py | 34 ++++++++++++++++++ models.py | 3 ++ routes/launch_api.py | 31 +++++----------- templates/main/instance_detail.html | 15 ++++++++ templates/main/instances.html | 11 ++++++ 6 files changed, 71 insertions(+), 23 deletions(-) create mode 100644 migrations/versions/9206bf87bb8e_add_portainer_stack_fields_to_instances.py diff --git a/__pycache__/models.cpython-313.pyc b/__pycache__/models.cpython-313.pyc index 5ad7012ddfeafe142a8183b005593d3b98833ece..c577fe6abd09210907ba98012c3f59cde6371931 100644 GIT binary patch delta 909 zcmZvaT}YEr9LD#5=cW!PQ{PQr=hsBcg%`6FS{Dn`>LLu&mll_fK+m1~%hmd5O zHeNxSNd8b+x3y?x?9CrS%Q=va_X*@_F%p zuf|?ofo<-Vh+nMrnru!?ZZ23tSBr?IlTmoMYdK5O_evhAZ{MKVYaX)sEaUmJQtnKM zZcd-rYxbD?tb;|~qM>?U$$0s!K5r%@j;7vTk%NIMJt+Vty63J3U_X7`O#qfKr>Btd zW=|y?q8mMlg6T8sHLA!2dttK4@s$~5jbokT1ot+$`o^(@mi`(zhNJx-G>bul!^%S) zc>YoxI*F+K!o4+|^(IDq;xfST6EI5~t6Jci!$9@E(*O&&d{LrZ_p20Oeey6Ipqi>4 zsX+7Z8o}OGOdGL49hQx3!YY=GTHpe`H<}L6NT${iJKn=zE|(7dAZ zT&=xfUS4f??iM2nI6Qt7y6O734_J?=UeV0KlZjh7_E|))I}hJ(7NeEYP<3(Z$^z=bTXRBqAwvS zOMA4D7^_V$O0?#|3o)8rbQ4|_T{%e9V3D;xSC9?rJR^$GbMZS5|MP#&^PJ}lT$Z0+ zl+9m@ixr(%(NM$D*_Na^(;?l`<6N|jw_XoQnC(*WTjyPjZz;v^T^neZd`1juWf-|> zhDy9(tN33m`g5q1Sa#`|!)GnmG0kUVYq^RW0V;53w;QLbwqePB13t1CFxuUUH9eQ$ z8K3A`1ze8K%b@X0uM?n(oBDbIJUo7f0nDH^<`)dc0#L(W#2k`m0dzXI!p6k|*dpP* z5LlM*fpCztj}(0(%%BzzK^=C)=hasQfpC~iop|!x8Voaw@f~SdOeP#F-%$94@B?tW z)vioaOwjnx#1VjLoNFoLrw4)tsOPf}iU5LqVNe0}Umu0S8PpGXp$Th;79oS)VJ|Qq z8Fm4j;r$QmBv9~eves&r#O*3UA*?2p;_i_Ki15CV*V5L4L8wbzLi97M;C-2S$Y8_4 z(LHdLe;z#`@B5pVmXC!3OG=0|w~3J{Z3rAc(b$}pn;OH**;qNYkL`uq{P|b{z=+M` zo1BGd`>E!#{Y!X0;linF7UxUy$f61}5mpfFgi6ACi6*S(X~KkhA)eYHA@pnLIkcI# rJ`wF`eZV%^lBFt6euSwT$%l+GU diff --git a/migrations/versions/9206bf87bb8e_add_portainer_stack_fields_to_instances.py b/migrations/versions/9206bf87bb8e_add_portainer_stack_fields_to_instances.py new file mode 100644 index 0000000..ca5027f --- /dev/null +++ b/migrations/versions/9206bf87bb8e_add_portainer_stack_fields_to_instances.py @@ -0,0 +1,34 @@ +"""add portainer stack fields to instances + +Revision ID: 9206bf87bb8e +Revises: add_quota_fields +Create Date: 2025-06-24 14:02:17.375785 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '9206bf87bb8e' +down_revision = 'add_quota_fields' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('instances', schema=None) as batch_op: + batch_op.add_column(sa.Column('portainer_stack_id', sa.String(length=100), nullable=True)) + batch_op.add_column(sa.Column('portainer_stack_name', sa.String(length=100), nullable=True)) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('instances', schema=None) as batch_op: + batch_op.drop_column('portainer_stack_name') + batch_op.drop_column('portainer_stack_id') + + # ### end Alembic commands ### diff --git a/models.py b/models.py index fff20a6..3a96298 100644 --- a/models.py +++ b/models.py @@ -528,6 +528,9 @@ class Instance(db.Model): status = db.Column(db.String(20), nullable=False, default='inactive') status_details = db.Column(db.Text, nullable=True) connection_token = db.Column(db.String(64), unique=True, nullable=True) + # Portainer integration fields + portainer_stack_id = db.Column(db.String(100), nullable=True) # Portainer stack ID + portainer_stack_name = db.Column(db.String(100), nullable=True) # Portainer stack name # Version tracking fields deployed_version = db.Column(db.String(50), nullable=True) # Current deployed version (commit hash or tag) deployed_branch = db.Column(db.String(100), nullable=True) # Branch that was deployed diff --git a/routes/launch_api.py b/routes/launch_api.py index 46303ce..5d44e28 100644 --- a/routes/launch_api.py +++ b/routes/launch_api.py @@ -1090,13 +1090,9 @@ def save_instance(): if existing_instance: # Update existing instance - existing_instance.port = data['port'] - existing_instance.domains = data['domains'] - existing_instance.stack_id = data['stack_id'] - existing_instance.stack_name = data['stack_name'] + existing_instance.portainer_stack_id = data['stack_id'] + existing_instance.portainer_stack_name = data['stack_name'] existing_instance.status = data['status'] - existing_instance.repository = data['repository'] - existing_instance.branch = data['branch'] existing_instance.deployed_version = data.get('deployed_version', 'unknown') existing_instance.deployed_branch = data.get('deployed_branch', data['branch']) existing_instance.version_checked_at = datetime.utcnow() @@ -1107,13 +1103,9 @@ def save_instance(): 'message': 'Instance data updated successfully', 'data': { 'name': existing_instance.name, - 'port': existing_instance.port, - 'domains': existing_instance.domains, - 'stack_id': existing_instance.stack_id, - 'stack_name': existing_instance.stack_name, + 'portainer_stack_id': existing_instance.portainer_stack_id, + 'portainer_stack_name': existing_instance.portainer_stack_name, 'status': existing_instance.status, - 'repository': existing_instance.repository, - 'branch': existing_instance.branch, 'deployed_version': existing_instance.deployed_version, 'deployed_branch': existing_instance.deployed_branch } @@ -1129,11 +1121,8 @@ def save_instance(): payment_plan='Basic', main_url=f"https://{data['domains'][0]}" if data['domains'] else f"http://localhost:{data['port']}", status=data['status'], - port=data['port'], - stack_id=data['stack_id'], - stack_name=data['stack_name'], - repository=data['repository'], - branch=data['branch'], + portainer_stack_id=data['stack_id'], + portainer_stack_name=data['stack_name'], deployed_version=data.get('deployed_version', 'unknown'), deployed_branch=data.get('deployed_branch', data['branch']) ) @@ -1145,13 +1134,9 @@ def save_instance(): 'message': 'Instance data saved successfully', 'data': { 'name': instance.name, - 'port': instance.port, - 'domains': instance.domains, - 'stack_id': instance.stack_id, - 'stack_name': instance.stack_name, + 'portainer_stack_id': instance.portainer_stack_id, + 'portainer_stack_name': instance.portainer_stack_name, 'status': instance.status, - 'repository': instance.repository, - 'branch': instance.branch, 'deployed_version': instance.deployed_version, 'deployed_branch': instance.deployed_branch } diff --git a/templates/main/instance_detail.html b/templates/main/instance_detail.html index c29d307..34be9de 100644 --- a/templates/main/instance_detail.html +++ b/templates/main/instance_detail.html @@ -142,6 +142,21 @@
Loading...
+
+
+
Portainer Stack:
+
+ {% if instance.portainer_stack_name %} + {{ instance.portainer_stack_name }} + {% if instance.portainer_stack_id %} + ID: {{ instance.portainer_stack_id }} + {% endif %} + {% else %} + Not set + {% endif %} +
+
+
Contact Information
diff --git a/templates/main/instances.html b/templates/main/instances.html index a222285..7cf42fa 100644 --- a/templates/main/instances.html +++ b/templates/main/instances.html @@ -179,6 +179,7 @@ Main URL Status Version + Portainer Stack Connection Token Actions @@ -220,6 +221,16 @@ unknown {% endif %} + + {% if instance.portainer_stack_name %} + + {{ instance.portainer_stack_name }} + + {% else %} + Not set + {% endif %} + {% if instance.connection_token %}