From 9864040456e3e64ed6fd4d26a3b3a821be6cccff Mon Sep 17 00:00:00 2001 From: Maksym Sadovnychyy Date: Sun, 26 Oct 2025 16:08:31 +0100 Subject: [PATCH] (bugfix): configMap helm error, agent test --- src/ClientApp/ApiRoutes.tsx | 2 + src/ClientApp/app/test/page.tsx | 39 ++++++++++++++ src/ClientApp/components/sidemenu.tsx | 11 +++- src/LetsEncrypt/launchSettings.json | 11 ++++ .../Controllers/AgentController.cs | 24 +++++++++ src/LetsEncryptServer/Dockerfile | 2 + .../Services/AgentService.cs | 51 +++++++++++++++++-- .../Agent/Responses/HelloWorldResponse.cs | 10 ++++ src/Models/Models.csproj | 1 - src/helm/templates/deployments.yaml | 11 ++-- src/helm/values.yaml | 2 +- 11 files changed, 148 insertions(+), 16 deletions(-) create mode 100644 src/ClientApp/app/test/page.tsx create mode 100644 src/LetsEncrypt/launchSettings.json create mode 100644 src/LetsEncryptServer/Controllers/AgentController.cs create mode 100644 src/Models/Agent/Responses/HelloWorldResponse.cs diff --git a/src/ClientApp/ApiRoutes.tsx b/src/ClientApp/ApiRoutes.tsx index ee111db..1ec647f 100644 --- a/src/ClientApp/ApiRoutes.tsx +++ b/src/ClientApp/ApiRoutes.tsx @@ -1,4 +1,6 @@ enum ApiRoutes { + AGENT_TEST = 'api/agent/test', + ACCOUNTS = 'api/accounts', ACCOUNT = 'api/account', diff --git a/src/ClientApp/app/test/page.tsx b/src/ClientApp/app/test/page.tsx new file mode 100644 index 0000000..b3331cd --- /dev/null +++ b/src/ClientApp/app/test/page.tsx @@ -0,0 +1,39 @@ +'use client' + +import { ApiRoutes, GetApiRoute } from '@/ApiRoutes' +import { PageContainer } from '@/components/pageContainer' +import { CustomButton } from '@/controls' +import { showToast } from '@/redux/slices/toastSlice' +import { useAppDispatch } from '@/redux/store' +import { httpService } from '@/services/HttpService' + +const TestPage = () => { + const dispatch = useAppDispatch() + + const handleTestAgent = async () => { + httpService + .get(GetApiRoute(ApiRoutes.AGENT_TEST)) + .then((response) => { + dispatch( + showToast({ + message: JSON.stringify(response), + type: 'info' + }) + ) + }) + } + + return ( + + + Test Agent + + + ) +} + +export default TestPage diff --git a/src/ClientApp/components/sidemenu.tsx b/src/ClientApp/components/sidemenu.tsx index 1ecf0d1..8cd5c4b 100644 --- a/src/ClientApp/components/sidemenu.tsx +++ b/src/ClientApp/components/sidemenu.tsx @@ -1,5 +1,11 @@ import React, { FC } from 'react' -import { FaHome, FaUserPlus, FaBars, FaSyncAlt } from 'react-icons/fa' +import { + FaHome, + FaUserPlus, + FaBars, + FaSyncAlt, + FaThermometerHalf +} from 'react-icons/fa' import Link from 'next/link' interface SideMenuProps { @@ -9,7 +15,8 @@ interface SideMenuProps { const menuItems = [ { icon: , label: 'Auto Renew', path: '/' }, - { icon: , label: 'Register', path: '/register' } + { icon: , label: 'Register', path: '/register' }, + { icon: , label: 'Test', path: '/test' } ] const SideMenu: FC = ({ isCollapsed, toggleSidebar }) => { diff --git a/src/LetsEncrypt/launchSettings.json b/src/LetsEncrypt/launchSettings.json new file mode 100644 index 0000000..07d1238 --- /dev/null +++ b/src/LetsEncrypt/launchSettings.json @@ -0,0 +1,11 @@ +{ + "profiles": { + "Docker Compose": { + "commandName": "DockerCompose", + "commandVersion": "1.0", + "serviceActions": { + "letsencryptserver": "StartDebugging" + } + } + } +} \ No newline at end of file diff --git a/src/LetsEncryptServer/Controllers/AgentController.cs b/src/LetsEncryptServer/Controllers/AgentController.cs new file mode 100644 index 0000000..5ed23e1 --- /dev/null +++ b/src/LetsEncryptServer/Controllers/AgentController.cs @@ -0,0 +1,24 @@ +using MaksIT.LetsEncryptServer.Services; +using Microsoft.AspNetCore.Mvc; + +namespace LetsEncryptServer.Controllers; + + +[ApiController] +[Route("api")] +public class AgentController : ControllerBase { + + private readonly IAgentService _agentController; + public AgentController( + IAgentService agentController + ) { + _agentController = agentController; + } + + [HttpGet("agent/test")] + public async Task Test() { + var result = await _agentController.GetHelloWorld(); + return result.ToActionResult(); + } + +} diff --git a/src/LetsEncryptServer/Dockerfile b/src/LetsEncryptServer/Dockerfile index 901b826..aae13d1 100644 --- a/src/LetsEncryptServer/Dockerfile +++ b/src/LetsEncryptServer/Dockerfile @@ -8,6 +8,8 @@ EXPOSE 5000 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src +COPY ["Models/Models.csproj", "Models/"] +COPY ["LetsEncrypt/LetsEncrypt.csproj", "LetsEncrypt/"] COPY ["LetsEncryptServer/LetsEncryptServer.csproj", "LetsEncryptServer/"] RUN dotnet restore "./LetsEncryptServer/LetsEncryptServer.csproj" COPY . . diff --git a/src/LetsEncryptServer/Services/AgentService.cs b/src/LetsEncryptServer/Services/AgentService.cs index 44cc67f..63b7cd0 100644 --- a/src/LetsEncryptServer/Services/AgentService.cs +++ b/src/LetsEncryptServer/Services/AgentService.cs @@ -1,13 +1,15 @@ using MaksIT.Models.Agent.Requests; using MaksIT.Results; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using Models.Agent.Responses; using System.Text; using System.Text.Json; namespace MaksIT.LetsEncryptServer.Services { public interface IAgentService { - Task GetHelloWorld(); + Task> GetHelloWorld(); Task UploadCerts(Dictionary certs); Task ReloadService(string serviceName); } @@ -28,8 +30,42 @@ namespace MaksIT.LetsEncryptServer.Services { _httpClient = httpClient; } - public Task GetHelloWorld() { - throw new NotImplementedException(); + public async Task> GetHelloWorld() { + try { + var endpoint = $"/HelloWorld"; + + var fullAddress = $"{_appSettings.Agent.AgentHostname}:{_appSettings.Agent.AgentPort}{endpoint}"; + + var request = new HttpRequestMessage(HttpMethod.Get, fullAddress); + request.Headers.Add("x-api-key", _appSettings.Agent.AgentKey); + + _logger.LogInformation($"Sending GET request to {fullAddress}"); + + var response = await _httpClient.SendAsync(request); + + if (response.IsSuccessStatusCode) { + + var content = await response.Content.ReadAsStringAsync(); + + return Result.Ok(new HelloWorldResponse { + Message = content + }); + } + else { + _logger.LogError($"Request to {endpoint} failed with status code: {response.StatusCode}"); + return Result.InternalServerError(null, $"Request to {endpoint} failed with status code: {response.StatusCode}"); + } + + } + catch (Exception ex) { + List messages = new() { "Something went wrong" }; + + _logger.LogError(ex, messages.FirstOrDefault()); + + messages.Add(ex.Message); + + return Result.InternalServerError(null, [.. messages]); + } } public async Task ReloadService(string serviceName) { @@ -64,8 +100,13 @@ namespace MaksIT.LetsEncryptServer.Services { } } catch (Exception ex) { - _logger.LogError(ex, "Something went wrong"); - return Result.InternalServerError("Something went wrong"); + List messages = new() { "Something went wrong" }; + + _logger.LogError(ex, messages.FirstOrDefault()); + + messages.Add(ex.Message); + + return Result.InternalServerError([.. messages]); } } } diff --git a/src/Models/Agent/Responses/HelloWorldResponse.cs b/src/Models/Agent/Responses/HelloWorldResponse.cs new file mode 100644 index 0000000..c9cfdbc --- /dev/null +++ b/src/Models/Agent/Responses/HelloWorldResponse.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Models.Agent.Responses; +public class HelloWorldResponse { + public string Message { get; set; } +} diff --git a/src/Models/Models.csproj b/src/Models/Models.csproj index 0361520..b1a738b 100644 --- a/src/Models/Models.csproj +++ b/src/Models/Models.csproj @@ -7,7 +7,6 @@ - diff --git a/src/helm/templates/deployments.yaml b/src/helm/templates/deployments.yaml index 3ceee19..5b2b3c8 100644 --- a/src/helm/templates/deployments.yaml +++ b/src/helm/templates/deployments.yaml @@ -50,7 +50,7 @@ spec: {{- $vols := default (list) $p.volumes -}} {{- $hasVols := gt (len $vols) 0 -}} {{- $hasSecret := (hasKey $comp "secretsFile") -}} - {{- if or $hasVols $hasSecret }} + {{- if or $hasVols $hasSecret $comp.configMapFile }} volumeMounts: {{- range $vol := $vols }} - name: {{ $compName }}-{{ $vol.name }} @@ -63,14 +63,11 @@ spec: {{- end }} {{- if $comp.configMapFile }} - name: {{ $compName }}-configmap - configMap: - name: {{ include "certs-ui.fullname" $root }}-{{ $compName }}-configmap - items: - - key: {{ $comp.configMapFile.key }} - path: {{ base $comp.configMapFile.mountPath }} + mountPath: {{ $comp.configMapFile.mountPath }} + subPath: {{ base $comp.configMapFile.mountPath }} {{- end }} {{- end }} - {{- if or $hasVols $hasSecret }} + {{- if or $hasVols $hasSecret $comp.configMapFile }} volumes: {{- range $vol := $vols }} - name: {{ $compName }}-{{ $vol.name }} diff --git a/src/helm/values.yaml b/src/helm/values.yaml index 0c08a51..9c0ca7b 100644 --- a/src/helm/values.yaml +++ b/src/helm/values.yaml @@ -69,7 +69,7 @@ components: "Agent": { "AgentHostname": "http://websrv0001.corp.maks-it.com", - "AgentPort": 9000, + "AgentPort": 5000, "ServiceToReload": "haproxy" } }