Пытаюсь написать надстройку поверх образа swagger-ui, чтобы при развертывании контейнера он шел по указанным адресам других контейнеров и агрегировал их с помощью swagger.json в один общий, что затем передается в swagger-ui. На данный момент я написал скрипт на C#, который успешно агрегирует json, но не могу передать его в swagger.
C#:
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net;
using System.Text;
namespace SwaggerConfigGeneration
{
internal class Program
{
private const string startJSON = @"{
""openapi"": ""3.0.1"",
""info"": {
""title"": ""TestApi"",
""version"": ""1.0""
},
""paths"": {";
private const string endJSON = @"},
""components"": { }
}";
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder(
startJSON);
var swaggerServises = (Environment
.GetEnvironmentVariable("SWAGGER_SERVISES") ?? "localhost")
.Replace(" ", "")
.Replace("\n", "")
.Split(',');
try
{
foreach (var servis in swaggerServises)
{
var json = GetSwaggerServisJson(servis);
sb.Append(json["paths"].ToString()[1..^2]);
sb.Append(',');
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
sb.Remove(sb.Length-1,1);
sb.Append(endJSON);
using (FileStream fstream = new FileStream("swagger.json", FileMode.Create))
{
var buf = Encoding.Default.GetBytes(sb.ToString());
fstream.WriteAsync(buf, 0, buf.Length);
}
Console.WriteLine("Произведенно получение данных API");
}
private static JObject GetSwaggerServisJson(string swaggerServis)
{
using (WebClient wc = new WebClient())
{
var json = wc.DownloadString($"http://{swaggerServis}:8080/swagger/v1/swagger.json");
return JObject.Parse(json);
}
}
}
}
файл докеров:
WORKDIR /app
ENV SWAGGER_SERVISES = localhost
COPY /bin/Debug/net8.0 /app
RUN dotnet SwaggerConfigGeneration.dll
FROM swaggerapi/swagger-ui
COPY --from=builder /app/swagger.json /app/swagger.json
docker-compose.yml
version: '3'
services:
swagger:
image: swagger-config-generation:latest
container_name: swagger
environment:
SWAGGER_SERVISES: ${SWAGGER_SERVISES}
depends_on:
- test-app
- test-app2
ports:
- 8081:8080
test-app:
image: testapi:latest
container_name: test-app
ports:
- 8080:8080
test-app2:
image: testapi2:latest
container_name: test-app2
ports:
- 8082:8080
.env:
SWAGGER_SERVISES = test-app2, test-app
Подробнее здесь: https://stackoverflow.com/questions/784 ... file-it-cr
Как я могу запустить сценарий при развертывании Docker-контейнера и скопировать созданный им файл в другой образ? ⇐ C#
Место общения программистов C#
1715383898
Anonymous
Пытаюсь написать надстройку поверх образа swagger-ui, чтобы при развертывании контейнера он шел по указанным адресам других контейнеров и агрегировал их с помощью swagger.json в один общий, что затем передается в swagger-ui. На данный момент я написал скрипт на C#, который успешно агрегирует json, но не могу передать его в swagger.
C#:
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net;
using System.Text;
namespace SwaggerConfigGeneration
{
internal class Program
{
private const string startJSON = @"{
""openapi"": ""3.0.1"",
""info"": {
""title"": ""TestApi"",
""version"": ""1.0""
},
""paths"": {";
private const string endJSON = @"},
""components"": { }
}";
static void Main(string[] args)
{
StringBuilder sb = new StringBuilder(
startJSON);
var swaggerServises = (Environment
.GetEnvironmentVariable("SWAGGER_SERVISES") ?? "localhost")
.Replace(" ", "")
.Replace("\n", "")
.Split(',');
try
{
foreach (var servis in swaggerServises)
{
var json = GetSwaggerServisJson(servis);
sb.Append(json["paths"].ToString()[1..^2]);
sb.Append(',');
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
sb.Remove(sb.Length-1,1);
sb.Append(endJSON);
using (FileStream fstream = new FileStream("swagger.json", FileMode.Create))
{
var buf = Encoding.Default.GetBytes(sb.ToString());
fstream.WriteAsync(buf, 0, buf.Length);
}
Console.WriteLine("Произведенно получение данных API");
}
private static JObject GetSwaggerServisJson(string swaggerServis)
{
using (WebClient wc = new WebClient())
{
var json = wc.DownloadString($"http://{swaggerServis}:8080/swagger/v1/swagger.json");
return JObject.Parse(json);
}
}
}
}
файл докеров:
WORKDIR /app
ENV SWAGGER_SERVISES = localhost
COPY /bin/Debug/net8.0 /app
RUN dotnet SwaggerConfigGeneration.dll
FROM swaggerapi/swagger-ui
COPY --from=builder /app/swagger.json /app/swagger.json
docker-compose.yml
version: '3'
services:
swagger:
image: swagger-config-generation:latest
container_name: swagger
environment:
SWAGGER_SERVISES: ${SWAGGER_SERVISES}
depends_on:
- test-app
- test-app2
ports:
- 8081:8080
test-app:
image: testapi:latest
container_name: test-app
ports:
- 8080:8080
test-app2:
image: testapi2:latest
container_name: test-app2
ports:
- 8082:8080
.env:
SWAGGER_SERVISES = test-app2, test-app
Подробнее здесь: [url]https://stackoverflow.com/questions/78462790/how-can-i-run-a-script-when-deploying-a-docker-container-and-copy-the-file-it-cr[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия