Merge pull request #50 from dotnet-architecture/dev
eShopOnContainers fork
This commit is contained in:
commit
4d76ba42aa
7
.gitignore
vendored
7
.gitignore
vendored
@ -269,4 +269,9 @@ pub/
|
|||||||
.mfractor
|
.mfractor
|
||||||
|
|
||||||
# Ignore HealthCheckdb
|
# Ignore HealthCheckdb
|
||||||
*healthchecksdb*
|
*healthchecksdb*
|
||||||
|
|
||||||
|
# Ignores all extra inf.yaml and app.yaml that are copied by prepare-devspaces.ps1
|
||||||
|
src/**/app.yaml
|
||||||
|
src/**/inf.yaml
|
||||||
|
|
||||||
|
75
README.md
75
README.md
@ -1,70 +1,25 @@
|
|||||||
# eShopOnContainers - Microservices Architecture and Containers based Reference Application (**BETA state** - Visual Studio 2017 and CLI environments compatible)
|
# eShopOnContainers - Microservices Architecture and Containers based Reference Application (**BETA state** - Visual Studio and CLI environments compatible)
|
||||||
Sample .NET Core reference application, powered by Microsoft, based on a simplified microservices architecture and Docker containers.
|
Sample .NET Core reference application, powered by Microsoft, based on a simplified microservices architecture and Docker containers.
|
||||||
|
|
||||||
## Linux Build Status for 'dev' branch
|
## Linux Build Status for 'dev' branch
|
||||||
|
|
||||||
Dev branch contains the latest "stable" code, and their images are tagged with `:dev` in our [Docker Hub](https://cloud.docker.com/u/eshop/repository/list):
|
Dev branch contains the latest "stable" code, and their images are tagged with `:dev` in our [Docker Hub](https://cloud.docker.com/u/eshop/repository/list):
|
||||||
|
|
||||||
Api Gateways base image
|
| Basket API | Catalog API | Identity API | Location API |
|
||||||
|
| ------------- | ------------- | ------------- | ------------- |
|
||||||
|
| [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=199&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=197&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=200&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=202&branchName=dev) |
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=201&branchName=dev)
|
| Marketing API | Ordering API | Payment API | Api Gateways base image |
|
||||||
|
| ------------- | ------------- | ------------- | ------------- |
|
||||||
|
| [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=203&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=198&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=205&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=201&branchName=dev)
|
||||||
|
|
||||||
Basket API
|
| Web Shopping Aggregator | Mobile Shopping Aggregator | WebMVC Client | WebSPA Client |
|
||||||
|
| ------------- | ------------- | ------------- | ------------- |
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=199&branchName=dev)
|
| [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=206&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=204&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=209&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=210&branchName=dev) |
|
||||||
|
|
||||||
Catalog API
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=197&branchName=dev)
|
|
||||||
|
|
||||||
Identity API
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=200&branchName=dev)
|
|
||||||
|
|
||||||
Location API
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=202&branchName=dev)
|
|
||||||
|
|
||||||
Marketing API
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=203&branchName=dev)
|
|
||||||
|
|
||||||
Ordering API
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=198&branchName=dev)
|
|
||||||
|
|
||||||
Payment API
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=205&branchName=dev)
|
|
||||||
|
|
||||||
Webhooks API
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=207&branchName=dev)
|
|
||||||
|
|
||||||
Web Shopping Aggregator
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=206&branchName=dev)
|
|
||||||
|
|
||||||
Mobile Shopping Aggregator
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=204&branchName=dev)
|
|
||||||
|
|
||||||
Webbhooks demo client
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=208&branchName=dev)
|
|
||||||
|
|
||||||
WebMVC Client
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=209&branchName=dev)
|
|
||||||
|
|
||||||
WebSPA Client
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=210&branchName=dev)
|
|
||||||
|
|
||||||
Web Status
|
|
||||||
|
|
||||||
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=211&branchName=dev)
|
|
||||||
|
|
||||||
|
| Web Status | Webhooks API | Webbhooks demo client |
|
||||||
|
| ------------- | ------------- | ------------- |
|
||||||
|
[](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=211&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=207&branchName=dev) | [](https://msftdevtools.visualstudio.com/eShopOnContainers/_build/latest?definitionId=208&branchName=dev) |
|
||||||
|
|
||||||
## IMPORTANT NOTES!
|
## IMPORTANT NOTES!
|
||||||
**You can use either the latest version of Visual Studio or simply Docker CLI and .NET CLI for Windows, Mac and Linux**.
|
**You can use either the latest version of Visual Studio or simply Docker CLI and .NET CLI for Windows, Mac and Linux**.
|
||||||
@ -174,7 +129,7 @@ Finally, those microservices are consumed by multiple client web and mobile apps
|
|||||||
<img src="img/xamarin-mobile-App.png">
|
<img src="img/xamarin-mobile-App.png">
|
||||||
|
|
||||||
## Setting up your development environment for eShopOnContainers
|
## Setting up your development environment for eShopOnContainers
|
||||||
### Visual Studio 2017 and Windows based
|
### Visual Studio 2017 (or above) and Windows based
|
||||||
This is the more straightforward way to get started:
|
This is the more straightforward way to get started:
|
||||||
https://github.com/dotnet-architecture/eShopOnContainers/wiki/02.-Setting-eShopOnContainers-in-a-Visual-Studio-2017-environment
|
https://github.com/dotnet-architecture/eShopOnContainers/wiki/02.-Setting-eShopOnContainers-in-a-Visual-Studio-2017-environment
|
||||||
|
|
||||||
@ -194,5 +149,5 @@ As mentioned, we'd appreciate your feedback, improvements and ideas.
|
|||||||
You can create new issues at the issues section, do pull requests and/or send emails to **eshop_feedback@service.microsoft.com**
|
You can create new issues at the issues section, do pull requests and/or send emails to **eshop_feedback@service.microsoft.com**
|
||||||
|
|
||||||
## Questions
|
## Questions
|
||||||
[QUESTION] Answer +1 if the solution is working for you (Through VS2017 or CLI environment):
|
[QUESTION] Answer +1 if the solution is working for you (Through VS or CLI environment):
|
||||||
https://github.com/dotnet/eShopOnContainers/issues/107
|
https://github.com/dotnet/eShopOnContainers/issues/107
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
pool:
|
|
||||||
vmImage: 'ubuntu-16.04'
|
|
||||||
variables:
|
variables:
|
||||||
registryEndpoint: eshop-registry
|
registryEndpoint: eshop-registry
|
||||||
trigger:
|
trigger:
|
||||||
@ -17,34 +15,66 @@ trigger:
|
|||||||
exclude:
|
exclude:
|
||||||
- src/ApiGateways/Mobile.Bff.Shopping/aggregator/*
|
- src/ApiGateways/Mobile.Bff.Shopping/aggregator/*
|
||||||
- src/ApiGateways/Web.Bff.Shopping/aggregator/*
|
- src/ApiGateways/Web.Bff.Shopping/aggregator/*
|
||||||
steps:
|
jobs:
|
||||||
- task: DockerCompose@0
|
- job: BuildLinux
|
||||||
displayName: Compose build apigws
|
pool:
|
||||||
inputs:
|
vmImage: 'ubuntu-16.04'
|
||||||
dockerComposeCommand: 'build mobileshoppingapigw mobilemarketingapigw webshoppingapigw webmarketingapigw'
|
steps:
|
||||||
containerregistrytype: Container Registry
|
- task: DockerCompose@0
|
||||||
dockerRegistryEndpoint: $(registryEndpoint)
|
displayName: Compose build apigws
|
||||||
dockerComposeFile: docker-compose.yml
|
inputs:
|
||||||
qualifyImageNames: true
|
dockerComposeCommand: 'build mobileshoppingapigw mobilemarketingapigw webshoppingapigw webmarketingapigw'
|
||||||
projectName: ""
|
containerregistrytype: Container Registry
|
||||||
dockerComposeFileArgs: |
|
dockerRegistryEndpoint: $(registryEndpoint)
|
||||||
TAG=$(Build.SourceBranchName)
|
dockerComposeFile: docker-compose.yml
|
||||||
- task: DockerCompose@0
|
qualifyImageNames: true
|
||||||
displayName: Compose push apigws
|
projectName: ""
|
||||||
inputs:
|
dockerComposeFileArgs: |
|
||||||
dockerComposeCommand: 'push mobileshoppingapigw mobilemarketingapigw webshoppingapigw webmarketingapigw'
|
TAG=$(Build.SourceBranchName)
|
||||||
containerregistrytype: Container Registry
|
- task: DockerCompose@0
|
||||||
dockerRegistryEndpoint: $(registryEndpoint)
|
displayName: Compose push apigws
|
||||||
dockerComposeFile: docker-compose.yml
|
inputs:
|
||||||
qualifyImageNames: true
|
dockerComposeCommand: 'push mobileshoppingapigw mobilemarketingapigw webshoppingapigw webmarketingapigw'
|
||||||
projectName: ""
|
containerregistrytype: Container Registry
|
||||||
dockerComposeFileArgs: |
|
dockerRegistryEndpoint: $(registryEndpoint)
|
||||||
TAG=$(Build.SourceBranchName)
|
dockerComposeFile: docker-compose.yml
|
||||||
- task: CopyFiles@2
|
qualifyImageNames: true
|
||||||
inputs:
|
projectName: ""
|
||||||
sourceFolder: $(Build.SourcesDirectory)/k8s/helm
|
dockerComposeFileArgs: |
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)/k8s/helm
|
TAG=$(Build.SourceBranchName)
|
||||||
- task: PublishBuildArtifacts@1
|
- task: CopyFiles@2
|
||||||
inputs:
|
inputs:
|
||||||
pathtoPublish: $(Build.ArtifactStagingDirectory)/k8s/helm
|
sourceFolder: $(Build.SourcesDirectory)/k8s/helm
|
||||||
artifactName: helm
|
targetFolder: $(Build.ArtifactStagingDirectory)/k8s/helm
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
inputs:
|
||||||
|
pathtoPublish: $(Build.ArtifactStagingDirectory)/k8s/helm
|
||||||
|
artifactName: helm
|
||||||
|
- job: BuildWindows
|
||||||
|
pool:
|
||||||
|
vmImage: 'vs2017-win2016'
|
||||||
|
steps:
|
||||||
|
- task: DockerCompose@0
|
||||||
|
displayName: Compose build apigws
|
||||||
|
inputs:
|
||||||
|
dockerComposeCommand: 'build mobileshoppingapigw mobilemarketingapigw webshoppingapigw webmarketingapigw'
|
||||||
|
containerregistrytype: Container Registry
|
||||||
|
dockerRegistryEndpoint: $(registryEndpoint)
|
||||||
|
dockerComposeFile: docker-compose.yml
|
||||||
|
qualifyImageNames: true
|
||||||
|
projectName: ""
|
||||||
|
dockerComposeFileArgs: |
|
||||||
|
TAG=$(Build.SourceBranchName)
|
||||||
|
PLATFORM=win
|
||||||
|
- task: DockerCompose@0
|
||||||
|
displayName: Compose push apigws
|
||||||
|
inputs:
|
||||||
|
dockerComposeCommand: 'push mobileshoppingapigw mobilemarketingapigw webshoppingapigw webmarketingapigw'
|
||||||
|
containerregistrytype: Container Registry
|
||||||
|
dockerRegistryEndpoint: $(registryEndpoint)
|
||||||
|
dockerComposeFile: docker-compose.yml
|
||||||
|
qualifyImageNames: true
|
||||||
|
projectName: ""
|
||||||
|
dockerComposeFileArgs: |
|
||||||
|
TAG=$(Build.SourceBranchName)
|
||||||
|
PLATFORM=win
|
26
build/multiarch-manifests/create-manifests.ps1
Normal file
26
build/multiarch-manifests/create-manifests.ps1
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Param(
|
||||||
|
[parameter(Mandatory=$true)][string]$registry
|
||||||
|
)
|
||||||
|
|
||||||
|
if ([String]::IsNullOrEmpty($registry)) {
|
||||||
|
Write-Host "Registry must be set to docker registry to use" -ForegroundColor Red
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "This script creates the local manifests, for pushing the multi-arch manifests" -ForegroundColor Yellow
|
||||||
|
Write-Host "Tags used are linux-master, win-master, linux-dev, win-dev, linux-latest, win-latest" -ForegroundColor Yellow
|
||||||
|
Write-Host "Multiarch images tags will be master, dev, latest" -ForegroundColor Yellow
|
||||||
|
|
||||||
|
|
||||||
|
$services = "identity.api", "basket.api", "catalog.api", "ordering.api", "ordering.backgroundtasks", "marketing.api", "payment.api", "locations.api", "webhooks.api", "ocelotapigw", "mobileshoppingagg", "webshoppingagg", "ordering.signalrhub", "webstatus", "webspa", "webmvc", "webhooks.client"
|
||||||
|
|
||||||
|
foreach ($svc in $services) {
|
||||||
|
Write-Host "Creating manifest for $svc and tags :latest, :master, and :dev"
|
||||||
|
docker manifest create $registry/${svc}:master $registry/${svc}:linux-master $registry/${svc}:win-master
|
||||||
|
docker manifest create $registry/${svc}:dev $registry/${svc}:linux-dev $registry/${svc}:win-dev
|
||||||
|
docker manifest create $registry/${svc}:latest $registry/${svc}:linux-latest $registry/${svc}:win-latest
|
||||||
|
Write-Host "Pushing manifest for $svc and tags :latest, :master, and :dev"
|
||||||
|
docker manifest push $registry/${svc}:latest
|
||||||
|
docker manifest push $registry/${svc}:dev
|
||||||
|
docker manifest push $registry/${svc}:master
|
||||||
|
}
|
@ -18,7 +18,7 @@ services:
|
|||||||
image: rabbitmq:3-management-alpine
|
image: rabbitmq:3-management-alpine
|
||||||
|
|
||||||
identity.api:
|
identity.api:
|
||||||
image: ${REGISTRY:-eshop}/identity.api:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/identity.api:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Identity/Identity.API/Dockerfile
|
dockerfile: src/Services/Identity/Identity.API/Dockerfile
|
||||||
@ -26,7 +26,7 @@ services:
|
|||||||
- sql.data
|
- sql.data
|
||||||
|
|
||||||
basket.api:
|
basket.api:
|
||||||
image: ${REGISTRY:-eshop}/basket.api:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/basket.api:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Basket/Basket.API/Dockerfile
|
dockerfile: src/Services/Basket/Basket.API/Dockerfile
|
||||||
@ -36,7 +36,7 @@ services:
|
|||||||
- rabbitmq
|
- rabbitmq
|
||||||
|
|
||||||
catalog.api:
|
catalog.api:
|
||||||
image: ${REGISTRY:-eshop}/catalog.api:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/catalog.api:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Catalog/Catalog.API/Dockerfile
|
dockerfile: src/Services/Catalog/Catalog.API/Dockerfile
|
||||||
@ -45,7 +45,7 @@ services:
|
|||||||
- rabbitmq
|
- rabbitmq
|
||||||
|
|
||||||
ordering.api:
|
ordering.api:
|
||||||
image: ${REGISTRY:-eshop}/ordering.api:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/ordering.api:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Ordering/Ordering.API/Dockerfile
|
dockerfile: src/Services/Ordering/Ordering.API/Dockerfile
|
||||||
@ -54,7 +54,7 @@ services:
|
|||||||
- rabbitmq
|
- rabbitmq
|
||||||
|
|
||||||
ordering.backgroundtasks:
|
ordering.backgroundtasks:
|
||||||
image: ${REGISTRY:-eshop}/ordering.backgroundtasks:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/ordering.backgroundtasks:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile
|
dockerfile: src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile
|
||||||
@ -63,7 +63,7 @@ services:
|
|||||||
- rabbitmq
|
- rabbitmq
|
||||||
|
|
||||||
marketing.api:
|
marketing.api:
|
||||||
image: ${REGISTRY:-eshop}/marketing.api:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/marketing.api:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Marketing/Marketing.API/Dockerfile
|
dockerfile: src/Services/Marketing/Marketing.API/Dockerfile
|
||||||
@ -74,7 +74,7 @@ services:
|
|||||||
- rabbitmq
|
- rabbitmq
|
||||||
|
|
||||||
payment.api:
|
payment.api:
|
||||||
image: ${REGISTRY:-eshop}/payment.api:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/payment.api:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Payment/Payment.API/Dockerfile
|
dockerfile: src/Services/Payment/Payment.API/Dockerfile
|
||||||
@ -82,7 +82,7 @@ services:
|
|||||||
- rabbitmq
|
- rabbitmq
|
||||||
|
|
||||||
locations.api:
|
locations.api:
|
||||||
image: ${REGISTRY:-eshop}/locations.api:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/locations.api:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Location/Locations.API/Dockerfile
|
dockerfile: src/Services/Location/Locations.API/Dockerfile
|
||||||
@ -91,7 +91,7 @@ services:
|
|||||||
- rabbitmq
|
- rabbitmq
|
||||||
|
|
||||||
webhooks.api:
|
webhooks.api:
|
||||||
image: ${REGISTRY:-eshop}/webhooks.api:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/webhooks.api:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Webhooks/Webhooks.API/Dockerfile
|
dockerfile: src/Services/Webhooks/Webhooks.API/Dockerfile
|
||||||
@ -99,7 +99,7 @@ services:
|
|||||||
- sql.data
|
- sql.data
|
||||||
|
|
||||||
mobileshoppingapigw:
|
mobileshoppingapigw:
|
||||||
image: ${REGISTRY:-eshop}/ocelotapigw:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/ocelotapigw:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/ApiGateways/ApiGw-Base/Dockerfile
|
dockerfile: src/ApiGateways/ApiGw-Base/Dockerfile
|
||||||
@ -114,7 +114,7 @@ services:
|
|||||||
- basket.api
|
- basket.api
|
||||||
|
|
||||||
mobilemarketingapigw:
|
mobilemarketingapigw:
|
||||||
image: ${REGISTRY:-eshop}/ocelotapigw:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/ocelotapigw:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/ApiGateways/ApiGw-Base/Dockerfile
|
dockerfile: src/ApiGateways/ApiGw-Base/Dockerfile
|
||||||
@ -129,7 +129,7 @@ services:
|
|||||||
- basket.api
|
- basket.api
|
||||||
|
|
||||||
webshoppingapigw:
|
webshoppingapigw:
|
||||||
image: ${REGISTRY:-eshop}/ocelotapigw:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/ocelotapigw:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/ApiGateways/ApiGw-Base/Dockerfile
|
dockerfile: src/ApiGateways/ApiGw-Base/Dockerfile
|
||||||
@ -144,7 +144,7 @@ services:
|
|||||||
- basket.api
|
- basket.api
|
||||||
|
|
||||||
webmarketingapigw:
|
webmarketingapigw:
|
||||||
image: ${REGISTRY:-eshop}/ocelotapigw:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/ocelotapigw:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/ApiGateways/ApiGw-Base/Dockerfile
|
dockerfile: src/ApiGateways/ApiGw-Base/Dockerfile
|
||||||
@ -159,7 +159,7 @@ services:
|
|||||||
- basket.api
|
- basket.api
|
||||||
|
|
||||||
mobileshoppingagg:
|
mobileshoppingagg:
|
||||||
image: ${REGISTRY:-eshop}/mobileshoppingagg:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/mobileshoppingagg:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/ApiGateways/Mobile.Bff.Shopping/aggregator/Dockerfile
|
dockerfile: src/ApiGateways/Mobile.Bff.Shopping/aggregator/Dockerfile
|
||||||
@ -174,7 +174,7 @@ services:
|
|||||||
- basket.api
|
- basket.api
|
||||||
|
|
||||||
webshoppingagg:
|
webshoppingagg:
|
||||||
image: ${REGISTRY:-eshop}/webshoppingagg:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/webshoppingagg:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/ApiGateways/Web.Bff.Shopping/aggregator/Dockerfile
|
dockerfile: src/ApiGateways/Web.Bff.Shopping/aggregator/Dockerfile
|
||||||
@ -189,7 +189,7 @@ services:
|
|||||||
- basket.api
|
- basket.api
|
||||||
|
|
||||||
ordering.signalrhub:
|
ordering.signalrhub:
|
||||||
image: ${REGISTRY:-eshop}/ordering.signalrhub:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/ordering.signalrhub:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Services/Ordering/Ordering.SignalrHub/Dockerfile
|
dockerfile: src/Services/Ordering/Ordering.SignalrHub/Dockerfile
|
||||||
@ -204,13 +204,13 @@ services:
|
|||||||
- basket.api
|
- basket.api
|
||||||
|
|
||||||
webstatus:
|
webstatus:
|
||||||
image: ${REGISTRY:-eshop}/webstatus:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/webstatus:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Web/WebStatus/Dockerfile
|
dockerfile: src/Web/WebStatus/Dockerfile
|
||||||
|
|
||||||
webspa:
|
webspa:
|
||||||
image: ${REGISTRY:-eshop}/webspa:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/webspa:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Web/WebSPA/Dockerfile
|
dockerfile: src/Web/WebSPA/Dockerfile
|
||||||
@ -220,7 +220,7 @@ services:
|
|||||||
# - webmarketingapigw
|
# - webmarketingapigw
|
||||||
|
|
||||||
webmvc:
|
webmvc:
|
||||||
image: ${REGISTRY:-eshop}/webmvc:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/webmvc:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Web/WebMVC/Dockerfile
|
dockerfile: src/Web/WebMVC/Dockerfile
|
||||||
@ -230,7 +230,7 @@ services:
|
|||||||
- webmarketingapigw
|
- webmarketingapigw
|
||||||
|
|
||||||
webhooks.client:
|
webhooks.client:
|
||||||
image: ${REGISTRY:-eshop}/webhooks.client:${TAG:-latest}
|
image: ${REGISTRY:-eshop}/webhooks.client:${PLATFORM:-linux}-${TAG:-latest}
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: src/Web/WebhookClient/Dockerfile
|
dockerfile: src/Web/WebhookClient/Dockerfile
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
export NODE_DOWNLOAD_SHA 0e20787e2eda4cc31336d8327556ebc7417e8ee0a6ba0de96a09b0ec2b841f60
|
|
||||||
curl -SL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" --output nodejs.tar.gz \
|
|
||||||
&& echo "$NODE_DOWNLOAD_SHA nodejs.tar.gz" | sha256sum -c - \
|
|
||||||
&& tar -xzf "nodejs.tar.gz" -C /usr/local --strip-components=1 \
|
|
||||||
&& rm nodejs.tar.gz \
|
|
||||||
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
|
|
@ -1,4 +0,0 @@
|
|||||||
set NODE_VERSION=8.11.1
|
|
||||||
curl -SL "https://nodejs.org/dist/v%NODE_VERSION%/node-v%NODE_VERSION%-win-x64.zip" --output nodejs.zip
|
|
||||||
tar -xf nodejs.zip -C c:\
|
|
||||||
setx PATH "%PATH%;c:\node-v%NODE_VERSION%-win-x64"
|
|
@ -142,9 +142,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Payment.API", "src\Services
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Webhooks", "Webhooks", "{E0AA11C4-2873-461D-8F82-53392530FB7A}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Webhooks", "Webhooks", "{E0AA11C4-2873-461D-8F82-53392530FB7A}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Webhooks.API", "src\Services\Webhooks\Webhooks.API\Webhooks.API.csproj", "{84E2016E-0435-44C6-8020-3D288AA38B2C}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Webhooks.API", "src\Services\Webhooks\Webhooks.API\Webhooks.API.csproj", "{84E2016E-0435-44C6-8020-3D288AA38B2C}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebhookClient", "src\Web\WebhookClient\WebhookClient.csproj", "{766D7E92-6AF0-476C-ADD5-282BF4D8C576}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebhookClient", "src\Web\WebhookClient\WebhookClient.csproj", "{766D7E92-6AF0-476C-ADD5-282BF4D8C576}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Devspace.Support", "Devspace.Support", "{68F5041D-51F2-4630-94B6-B49789F5E51A}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Devspaces.Support", "src\BuildingBlocks\Devspaces.Support\Devspaces.Support.csproj", "{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -1744,6 +1748,54 @@ Global
|
|||||||
{766D7E92-6AF0-476C-ADD5-282BF4D8C576}.Release|x64.Build.0 = Release|Any CPU
|
{766D7E92-6AF0-476C-ADD5-282BF4D8C576}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{766D7E92-6AF0-476C-ADD5-282BF4D8C576}.Release|x86.ActiveCfg = Release|Any CPU
|
{766D7E92-6AF0-476C-ADD5-282BF4D8C576}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{766D7E92-6AF0-476C-ADD5-282BF4D8C576}.Release|x86.Build.0 = Release|Any CPU
|
{766D7E92-6AF0-476C-ADD5-282BF4D8C576}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|iPhone.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|x64.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.AppStore|x86.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|iPhone.Build.0 = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -1808,6 +1860,8 @@ Global
|
|||||||
{E0AA11C4-2873-461D-8F82-53392530FB7A} = {91CF7717-08AB-4E65-B10E-0B426F01E2E8}
|
{E0AA11C4-2873-461D-8F82-53392530FB7A} = {91CF7717-08AB-4E65-B10E-0B426F01E2E8}
|
||||||
{84E2016E-0435-44C6-8020-3D288AA38B2C} = {E0AA11C4-2873-461D-8F82-53392530FB7A}
|
{84E2016E-0435-44C6-8020-3D288AA38B2C} = {E0AA11C4-2873-461D-8F82-53392530FB7A}
|
||||||
{766D7E92-6AF0-476C-ADD5-282BF4D8C576} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}
|
{766D7E92-6AF0-476C-ADD5-282BF4D8C576} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}
|
||||||
|
{68F5041D-51F2-4630-94B6-B49789F5E51A} = {DB0EFB20-B024-4E5E-A75C-52143C131D25}
|
||||||
|
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35} = {68F5041D-51F2-4630-94B6-B49789F5E51A}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9}
|
SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9}
|
||||||
|
@ -33,14 +33,13 @@
|
|||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{- define "pathBase" -}}
|
{{- define "pathBase" -}}
|
||||||
{{- $name := first .}}
|
{{- if .Values.inf.k8s.suffix -}}
|
||||||
{{- $ctx := last .}}
|
{{- $suffix := include "suffix-name" . -}}
|
||||||
{{- if $ctx.Values.inf.k8s.suffix -}}
|
{{- printf "%s-%s" .Values.pathBase $suffix -}}
|
||||||
{{- $suffix := include "suffix-name" $ctx -}}
|
|
||||||
{{- printf "/%s-%s" $name $suffix -}}
|
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{- printf "/%s" $name -}}
|
{{- .Values.pathBase -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
@ -61,10 +61,10 @@ spec:
|
|||||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: config
|
- name: config
|
||||||
mountPath: /app/configuration
|
mountPath: {{ .Values.ocelot.configPath }}
|
||||||
env:
|
env:
|
||||||
- name: PATH_BASE
|
- name: PATH_BASE
|
||||||
value: {{ include "pathBase" (list .Values.app.ingress.entries.mobilemarketingapigw .) }}
|
value: {{ include "pathBase" . }}
|
||||||
- name: k8sname
|
- name: k8sname
|
||||||
value: {{ .Values.clusterName }}
|
value: {{ .Values.clusterName }}
|
||||||
{{- if .Values.env.values -}}
|
{{- if .Values.env.values -}}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{{- if .Values.ingress.enabled -}}
|
{{- if .Values.ingress.enabled -}}
|
||||||
{{- $ingressPath := include "pathBase" (list .Values.app.ingress.entries.mobilemarketingapigw .) -}}
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.mobilemarketingapigw -}}
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: extensions/v1beta1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@ -23,11 +24,13 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
rules:
|
rules:
|
||||||
- host: {{ .Values.inf.k8s.dns }}
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: {{ $ingressPath }}
|
- path: {{ $ingressPath }}
|
||||||
backend:
|
backend:
|
||||||
serviceName: {{ .Values.app.svc.mobilemarketingapigw }}
|
serviceName: {{ $serviceName }}
|
||||||
servicePort: http
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
@ -62,3 +62,5 @@ probes:
|
|||||||
initialDelaySeconds: 90
|
initialDelaySeconds: 90
|
||||||
periodSeconds: 60
|
periodSeconds: 60
|
||||||
port: 80
|
port: 80
|
||||||
|
ocelot:
|
||||||
|
configPath: /app/configuration
|
||||||
|
@ -35,13 +35,11 @@
|
|||||||
|
|
||||||
|
|
||||||
{{- define "pathBase" -}}
|
{{- define "pathBase" -}}
|
||||||
{{- $name := first .}}
|
{{- if .Values.inf.k8s.suffix -}}
|
||||||
{{- $ctx := last .}}
|
{{- $suffix := include "suffix-name" . -}}
|
||||||
{{- if $ctx.Values.inf.k8s.suffix -}}
|
{{- printf "%s-%s" .Values.pathBase $suffix -}}
|
||||||
{{- $suffix := include "suffix-name" $ctx -}}
|
|
||||||
{{- printf "/%s-%s" $name $suffix -}}
|
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{- printf "/%s" $name -}}
|
{{- .Values.pathBase -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
@ -61,10 +61,10 @@ spec:
|
|||||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: config
|
- name: config
|
||||||
mountPath: /app/configuration
|
mountPath: {{ .Values.ocelot.configPath }}
|
||||||
env:
|
env:
|
||||||
- name: PATH_BASE
|
- name: PATH_BASE
|
||||||
value: {{ include "pathBase" (list .Values.app.ingress.entries.mobileshoppingapigw .) }}
|
value: {{ include "pathBase" . }}
|
||||||
- name: k8sname
|
- name: k8sname
|
||||||
value: {{ .Values.clusterName }}
|
value: {{ .Values.clusterName }}
|
||||||
{{- if .Values.env.values -}}
|
{{- if .Values.env.values -}}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
{{- if .Values.ingress.enabled -}}
|
{{- if .Values.ingress.enabled -}}
|
||||||
{{- $ingressPath := include "pathBase" (list .Values.app.ingress.entries.mobileshoppingapigw .) -}}
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.mobileshoppingapigw -}}
|
||||||
|
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: extensions/v1beta1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@ -23,11 +25,13 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
rules:
|
rules:
|
||||||
- host: {{ .Values.inf.k8s.dns }}
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: {{ $ingressPath }}
|
- path: {{ $ingressPath }}
|
||||||
backend:
|
backend:
|
||||||
serviceName: {{ .Values.app.svc.mobileshoppingapigw }}
|
serviceName: {{ $serviceName }}
|
||||||
servicePort: http
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
@ -61,4 +61,6 @@ probes:
|
|||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
initialDelaySeconds: 90
|
initialDelaySeconds: 90
|
||||||
periodSeconds: 60
|
periodSeconds: 60
|
||||||
port: 80
|
port: 80
|
||||||
|
ocelot:
|
||||||
|
configPath: /app/configuration
|
@ -35,13 +35,11 @@
|
|||||||
|
|
||||||
|
|
||||||
{{- define "pathBase" -}}
|
{{- define "pathBase" -}}
|
||||||
{{- $name := first .}}
|
{{- if .Values.inf.k8s.suffix -}}
|
||||||
{{- $ctx := last .}}
|
{{- $suffix := include "suffix-name" . -}}
|
||||||
{{- if $ctx.Values.inf.k8s.suffix -}}
|
{{- printf "%s-%s" .Values.pathBase $suffix -}}
|
||||||
{{- $suffix := include "suffix-name" $ctx -}}
|
|
||||||
{{- printf "/%s-%s" $name $suffix -}}
|
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{- printf "/%s" $name -}}
|
{{- .Values.pathBase -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
@ -61,10 +61,10 @@ spec:
|
|||||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: config
|
- name: config
|
||||||
mountPath: /app/configuration
|
mountPath: {{ .Values.ocelot.configPath }}
|
||||||
env:
|
env:
|
||||||
- name: PATH_BASE
|
- name: PATH_BASE
|
||||||
value: {{ include "pathBase" (list .Values.app.ingress.entries.webmarketingapigw .) }}
|
value: {{ include "pathBase" . }}
|
||||||
- name: k8sname
|
- name: k8sname
|
||||||
value: {{ .Values.clusterName }}
|
value: {{ .Values.clusterName }}
|
||||||
{{- if .Values.env.values -}}
|
{{- if .Values.env.values -}}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
{{- if .Values.ingress.enabled -}}
|
{{- if .Values.ingress.enabled -}}
|
||||||
{{- $ingressPath := include "pathBase" (list .Values.app.ingress.entries.webmarketingapigw .) -}}
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.webmarketingapigw -}}
|
||||||
|
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: extensions/v1beta1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@ -23,11 +25,13 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
rules:
|
rules:
|
||||||
- host: {{ .Values.inf.k8s.dns }}
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: {{ $ingressPath }}
|
- path: {{ $ingressPath }}
|
||||||
backend:
|
backend:
|
||||||
serviceName: {{ .Values.app.svc.webmarketingapigw }}
|
serviceName: {{ $serviceName }}
|
||||||
servicePort: http
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
@ -61,4 +61,6 @@ probes:
|
|||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
initialDelaySeconds: 90
|
initialDelaySeconds: 90
|
||||||
periodSeconds: 60
|
periodSeconds: 60
|
||||||
port: 80
|
port: 80
|
||||||
|
ocelot:
|
||||||
|
configPath: /app/configuration
|
@ -33,14 +33,13 @@
|
|||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{- define "pathBase" -}}
|
{{- define "pathBase" -}}
|
||||||
{{- $name := first .}}
|
{{- if .Values.inf.k8s.suffix -}}
|
||||||
{{- $ctx := last .}}
|
{{- $suffix := include "suffix-name" . -}}
|
||||||
{{- if $ctx.Values.inf.k8s.suffix -}}
|
{{- printf "%s-%s" .Values.pathBase $suffix -}}
|
||||||
{{- $suffix := include "suffix-name" $ctx -}}
|
|
||||||
{{- printf "/%s-%s" $name $suffix -}}
|
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
{{- printf "/%s" $name -}}
|
{{- .Values.pathBase -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
@ -60,10 +60,10 @@ spec:
|
|||||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: config
|
- name: config
|
||||||
mountPath: /app/configuration
|
mountPath: {{ .Values.ocelot.configPath }}
|
||||||
env:
|
env:
|
||||||
- name: PATH_BASE
|
- name: PATH_BASE
|
||||||
value: {{ include "pathBase" (list .Values.app.ingress.entries.webshoppingapigw .) }}
|
value: {{ include "pathBase" . }}
|
||||||
- name: k8sname
|
- name: k8sname
|
||||||
value: {{ .Values.clusterName }}
|
value: {{ .Values.clusterName }}
|
||||||
{{- if .Values.env.values -}}
|
{{- if .Values.env.values -}}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{{- if .Values.ingress.enabled -}}
|
{{- if .Values.ingress.enabled -}}
|
||||||
{{- $ingressPath := include "pathBase" (list .Values.app.ingress.entries.webshoppingapigw .) -}}
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.webshoppingapigw -}}
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: extensions/v1beta1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@ -23,11 +24,13 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
rules:
|
rules:
|
||||||
- host: {{ .Values.inf.k8s.dns }}
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: {{ $ingressPath }}
|
- path: {{ $ingressPath }}
|
||||||
backend:
|
backend:
|
||||||
serviceName: {{ .Values.app.svc.webshoppingapigw }}
|
serviceName: {{ $serviceName }}
|
||||||
servicePort: http
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
@ -62,3 +62,5 @@ probes:
|
|||||||
initialDelaySeconds: 90
|
initialDelaySeconds: 90
|
||||||
periodSeconds: 60
|
periodSeconds: 60
|
||||||
port: 80
|
port: 80
|
||||||
|
ocelot:
|
||||||
|
configPath: /app/configuration
|
37
k8s/helm/basket-api/templates/ingress.yaml
Normal file
37
k8s/helm/basket-api/templates/ingress.yaml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.basket -}}
|
||||||
|
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ template "basket-api.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "basket-api.name" . }}
|
||||||
|
chart: {{ template "basket-api.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.inf.k8s.dns }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ $ingressPath }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
@ -53,3 +53,6 @@ probes:
|
|||||||
initialDelaySeconds: 90
|
initialDelaySeconds: 90
|
||||||
periodSeconds: 60
|
periodSeconds: 60
|
||||||
port: 80
|
port: 80
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
37
k8s/helm/catalog-api/templates/ingress.yaml
Normal file
37
k8s/helm/catalog-api/templates/ingress.yaml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.catalog -}}
|
||||||
|
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ template "catalog-api.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "catalog-api.name" . }}
|
||||||
|
chart: {{ template "catalog-api.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.inf.k8s.dns }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ $ingressPath }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
@ -5,6 +5,7 @@ Param(
|
|||||||
[parameter(Mandatory=$false)][string]$externalDns,
|
[parameter(Mandatory=$false)][string]$externalDns,
|
||||||
[parameter(Mandatory=$false)][string]$appName="eshop",
|
[parameter(Mandatory=$false)][string]$appName="eshop",
|
||||||
[parameter(Mandatory=$false)][bool]$deployInfrastructure=$true,
|
[parameter(Mandatory=$false)][bool]$deployInfrastructure=$true,
|
||||||
|
[parameter(Mandatory=$false)][bool]$deployCharts=$true,
|
||||||
[parameter(Mandatory=$false)][bool]$clean=$true,
|
[parameter(Mandatory=$false)][bool]$clean=$true,
|
||||||
[parameter(Mandatory=$false)][string]$aksName="",
|
[parameter(Mandatory=$false)][string]$aksName="",
|
||||||
[parameter(Mandatory=$false)][string]$aksRg="",
|
[parameter(Mandatory=$false)][string]$aksRg="",
|
||||||
@ -66,20 +67,28 @@ $charts = ("eshop-common", "apigwmm", "apigwms", "apigwwm", "apigwws", "basket-a
|
|||||||
if ($deployInfrastructure) {
|
if ($deployInfrastructure) {
|
||||||
foreach ($infra in $infras) {
|
foreach ($infra in $infras) {
|
||||||
Write-Host "Installing infrastructure: $infra" -ForegroundColor Green
|
Write-Host "Installing infrastructure: $infra" -ForegroundColor Green
|
||||||
helm install --values app.yaml --values inf.yaml --values $ingressValuesFile --set app.name=$appName --set inf.k8s.dns=$dns --name="$appName-$infra" $infra
|
helm install --values app.yaml --values inf.yaml --values $ingressValuesFile --set app.name=$appName --set inf.k8s.dns=$dns --set ingress.hosts={$dns} --name="$appName-$infra" $infra
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
Write-Host "eShopOnContainers infrastructure (bbdd, redis, ...) charts aren't installed (-deployCharts is false)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($chart in $charts) {
|
if ($deployCharts) {
|
||||||
Write-Host "Installing: $chart" -ForegroundColor Green
|
foreach ($chart in $charts) {
|
||||||
if ($useCustomRegistry) {
|
Write-Host "Installing: $chart" -ForegroundColor Green
|
||||||
helm install --set inf.registry.server=$registry --set inf.registry.login=$dockerUser --set inf.registry.pwd=$dockerPassword --set inf.registry.secretName=eshop-docker-scret --values app.yaml --values inf.yaml --values $ingressValuesFile --set app.name=$appName --set inf.k8s.dns=$dns --set image.tag=$imageTag --set image.pullPolicy=Always --name="$appName-$chart" $chart
|
if ($useCustomRegistry) {
|
||||||
}
|
helm install --set inf.registry.server=$registry --set inf.registry.login=$dockerUser --set inf.registry.pwd=$dockerPassword --set inf.registry.secretName=eshop-docker-scret --values app.yaml --values inf.yaml --values $ingressValuesFile --set app.name=$appName --set inf.k8s.dns=$dns --set ingress.hosts={$dns} --set image.tag=$imageTag --set image.pullPolicy=Always --name="$appName-$chart" $chart
|
||||||
else {
|
}
|
||||||
if ($chart -ne "eshop-common") { # eshop-common is ignored when no secret must be deployed
|
else {
|
||||||
helm install --values app.yaml --values inf.yaml --values $ingressValuesFile --set app.name=$appName --set inf.k8s.dns=$dns --set image.tag=$imageTag --set image.pullPolicy=Always --name="$appName-$chart" $chart
|
if ($chart -ne "eshop-common") { # eshop-common is ignored when no secret must be deployed
|
||||||
|
helm install --values app.yaml --values inf.yaml --values $ingressValuesFile --set app.name=$appName --set inf.k8s.dns=$dns --set ingress.hosts={$dns} --set image.tag=$imageTag --set image.pullPolicy=Always --name="$appName-$chart" $chart
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
Write-Host "eShopOnContainers non-infrastructure charts aren't installed (-deployCharts is false)" -ForegroundColor Yellow
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "helm charts installed." -ForegroundColor Green
|
Write-Host "helm charts installed." -ForegroundColor Green
|
@ -36,5 +36,4 @@ data:
|
|||||||
xamarin_callback_e: http://{{ $xamarincallback }}
|
xamarin_callback_e: http://{{ $xamarincallback }}
|
||||||
webhooksapi_e: http://{{ $webhooks_url }}
|
webhooksapi_e: http://{{ $webhooks_url }}
|
||||||
webhooksweb_e: http://{{ $webhooksweb_url }}
|
webhooksweb_e: http://{{ $webhooksweb_url }}
|
||||||
|
enableDevspaces: "{{ .Values.enableDevspaces }}"
|
||||||
|
|
@ -1,5 +1,6 @@
|
|||||||
{{- if .Values.ingress.enabled -}}
|
{{- if .Values.ingress.enabled -}}
|
||||||
{{- $ingressPath := include "pathBase" . -}}
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.identity }}
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: extensions/v1beta1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@ -23,11 +24,13 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
rules:
|
rules:
|
||||||
- host: {{ .Values.inf.k8s.dns }}
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: {{ $ingressPath }}
|
- path: {{ $ingressPath }}
|
||||||
backend:
|
backend:
|
||||||
serviceName: {{ .Values.app.svc.identity }}
|
serviceName: {{ $serviceName }}
|
||||||
servicePort: http
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
@ -58,6 +58,8 @@ env:
|
|||||||
key: webhooksapi_e
|
key: webhooksapi_e
|
||||||
- name: WebhooksWebClient
|
- name: WebhooksWebClient
|
||||||
key: webhooksweb_e
|
key: webhooksweb_e
|
||||||
|
- name: EnableDevspaces
|
||||||
|
key: enableDevspaces
|
||||||
values:
|
values:
|
||||||
- name: ASPNETCORE_ENVIRONMENT
|
- name: ASPNETCORE_ENVIRONMENT
|
||||||
value: Development
|
value: Development
|
||||||
@ -65,6 +67,7 @@ env:
|
|||||||
value: 'K8S'
|
value: 'K8S'
|
||||||
- name: IsClusterEnv
|
- name: IsClusterEnv
|
||||||
value: 'True'
|
value: 'True'
|
||||||
|
|
||||||
probes:
|
probes:
|
||||||
liveness:
|
liveness:
|
||||||
path: /liveness
|
path: /liveness
|
||||||
@ -76,4 +79,6 @@ probes:
|
|||||||
timeoutSeconds: 5
|
timeoutSeconds: 5
|
||||||
initialDelaySeconds: 90
|
initialDelaySeconds: 90
|
||||||
periodSeconds: 60
|
periodSeconds: 60
|
||||||
port: 80
|
port: 80
|
||||||
|
|
||||||
|
enableDevspaces: "false"
|
36
k8s/helm/locations-api/templates/ingress.yaml
Normal file
36
k8s/helm/locations-api/templates/ingress.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.locations }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ template "locations-api.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "locations-api.name" . }}
|
||||||
|
chart: {{ template "locations-api.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.inf.k8s.dns }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ $ingressPath }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
36
k8s/helm/marketing-api/templates/ingress.yaml
Normal file
36
k8s/helm/marketing-api/templates/ingress.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.marketing }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ template "marketing-api.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "marketing-api.name" . }}
|
||||||
|
chart: {{ template "marketing-api.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.inf.k8s.dns }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ $ingressPath }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
36
k8s/helm/mobileshoppingagg/templates/ingress.yaml
Normal file
36
k8s/helm/mobileshoppingagg/templates/ingress.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.mobileshoppingagg }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ template "mobileshoppingagg.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "mobileshoppingagg.name" . }}
|
||||||
|
chart: {{ template "mobileshoppingagg.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.inf.k8s.dns }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ $ingressPath }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
@ -1,10 +1,11 @@
|
|||||||
{{- $name := include "ordering-backgroundtasks.fullname" . -}}
|
{{- $name := include "ordering-backgroundtasks.fullname" . -}}
|
||||||
{{- $sqlsrv := include "sql-name" . -}}
|
{{- $sqlsrv := include "sql-name" . -}}
|
||||||
|
{{- $cfgname := printf "cfg-%s" $name | trunc 63 }}
|
||||||
|
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
metadata:
|
metadata:
|
||||||
name: "cfg-{{ $name }}"
|
name: "{{ $cfgname }}"
|
||||||
labels:
|
labels:
|
||||||
app: {{ template "ordering-backgroundtasks.name" . }}
|
app: {{ template "ordering-backgroundtasks.name" . }}
|
||||||
chart: {{ template "ordering-backgroundtasks.chart" .}}
|
chart: {{ template "ordering-backgroundtasks.chart" .}}
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
{{- $name := include "ordering-backgroundtasks.fullname" . -}}
|
{{- $name := include "ordering-backgroundtasks.fullname" . -}}
|
||||||
{{- $cfgname := printf "%s-%s" "cfg" $name -}}
|
{{- $cfgname := printf "cfg-%s" $name | trunc 63 }}
|
||||||
|
|
||||||
apiVersion: apps/v1beta2
|
apiVersion: apps/v1beta2
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: {{ template "ordering-backgroundtasks.fullname" . }}
|
name: {{ template "ordering-backgroundtasks.fullname" . }}
|
||||||
labels:
|
labels:
|
||||||
ufo: {{ $cfgname}}
|
|
||||||
app: {{ template "ordering-backgroundtasks.name" . }}
|
app: {{ template "ordering-backgroundtasks.name" . }}
|
||||||
chart: {{ template "ordering-backgroundtasks.chart" . }}
|
chart: {{ template "ordering-backgroundtasks.chart" . }}
|
||||||
release: {{ .Release.Name }}
|
release: {{ .Release.Name }}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{{- if .Values.ingress.enabled -}}
|
{{- if .Values.ingress.enabled -}}
|
||||||
{{- $ingressPath := include "pathBase" . -}}
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.webhooks }}
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: extensions/v1beta1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@ -23,11 +24,13 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
rules:
|
rules:
|
||||||
- host: {{ .Values.inf.k8s.dns }}
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: {{ $ingressPath }}
|
- path: {{ $ingressPath }}
|
||||||
backend:
|
backend:
|
||||||
serviceName: {{ .Values.app.svc.webhooks }}
|
serviceName: {{ $serviceName }}
|
||||||
servicePort: http
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
{{- $identity := include "url-of" (list .Values.app.ingress.entries.identity .) -}}
|
{{- $identity := include "url-of" (list .Values.app.ingress.entries.identity .) -}}
|
||||||
{{- $webshoppingapigw := include "url-of" (list .Values.app.ingress.entries.webshoppingapigw .) -}}
|
{{- $webshoppingapigw := include "url-of" (list .Values.app.ingress.entries.webshoppingapigw .) -}}
|
||||||
{{- $mvc := include "url-of" (list .Values.app.ingress.entries.mvc .) -}}
|
{{- $mvc := include "url-of" (list .Values.app.ingress.entries.mvc .) -}}
|
||||||
{{- $mongo := include "mongo-name" . -}}
|
|
||||||
|
|
||||||
|
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
{{- if .Values.ingress.enabled -}}
|
{{- if .Values.ingress.enabled -}}
|
||||||
{{- $ingressPath := include "pathBase" . -}}
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.mvc -}}
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: extensions/v1beta1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
@ -23,11 +24,13 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
rules:
|
rules:
|
||||||
- host: {{ .Values.inf.k8s.dns }}
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: {{ $ingressPath }}
|
- path: {{ $ingressPath }}
|
||||||
backend:
|
backend:
|
||||||
serviceName: {{ .Values.app.svc.mvc }}
|
serviceName: {{ $serviceName }}
|
||||||
servicePort: http
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
36
k8s/helm/webshoppingagg/templates/ingress.yaml
Normal file
36
k8s/helm/webshoppingagg/templates/ingress.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $ingressPath := include "pathBase" . -}}
|
||||||
|
{{- $serviceName := .Values.app.svc.webshoppingagg }}
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ template "webshoppingagg.fullname" . }}
|
||||||
|
labels:
|
||||||
|
app: {{ template "webshoppingagg.name" . }}
|
||||||
|
chart: {{ template "webshoppingagg.chart" . }}
|
||||||
|
release: {{ .Release.Name }}
|
||||||
|
heritage: {{ .Release.Service }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{ toYaml . | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
- {{ .Values.inf.k8s.dns }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: {{ $ingressPath }}
|
||||||
|
backend:
|
||||||
|
serviceName: {{ $serviceName }}
|
||||||
|
servicePort: http
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
14
src/ApiGateways/ApiGw-Base/Dockerfile.develop
Normal file
14
src/ApiGateways/ApiGw-Base/Dockerfile.develop
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
FROM microsoft/dotnet:2.2-sdk
|
||||||
|
ARG BUILD_CONFIGURATION=Debug
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Development
|
||||||
|
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY ["src/ApiGateways/ApiGw-Base/OcelotApiGw.csproj", "src/ApiGateways/ApiGw-Base/"]
|
||||||
|
RUN dotnet restore "src/ApiGateways/ApiGw-Base/OcelotApiGw.csproj"
|
||||||
|
COPY . .
|
||||||
|
WORKDIR "/src/src/ApiGateways/ApiGw-Base"
|
||||||
|
RUN dotnet build --no-restore "OcelotApiGw.csproj" -c $BUILD_CONFIGURATION
|
||||||
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"]
|
44
src/ApiGateways/Mobile.Bff.Marketing/apigw/azds.yaml
Normal file
44
src/ApiGateways/Mobile.Bff.Marketing/apigw/azds.yaml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..\
|
||||||
|
dockerfile: ..\..\..\ApiGateways\ApiGw-Base\Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/apigwmm
|
||||||
|
set:
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
# This expands to [space.s.]webmvc.<guid>.<region>.aksapp.io
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- inf.yaml
|
||||||
|
- app.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: ..\..\..\ApiGateways\ApiGw-Base\Dockerfile.develop
|
||||||
|
args:
|
||||||
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
container:
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command: [dotnet, run, --no-restore, --no-build, --no-launch-profile, -c, "${BUILD_CONFIGURATION:-Debug}"]
|
||||||
|
iterate:
|
||||||
|
processesToKill: [dotnet, vsdbg]
|
||||||
|
buildCommands:
|
||||||
|
- [dotnet, build, --no-restore, -c, "${BUILD_CONFIGURATION:-Debug}"]
|
@ -0,0 +1,2 @@
|
|||||||
|
ocelot:
|
||||||
|
configPath: /src/src/ApiGateways/ApiGw-Base/configuration
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM microsoft/dotnet:2.2-sdk
|
||||||
|
ARG BUILD_CONFIGURATION=Debug
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Development
|
||||||
|
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY ["src/ApiGateways/Mobile.Bff.Shopping/aggregator/Mobile.Shopping.HttpAggregator.csproj", "src/ApiGateways/Mobile.Bff.Shopping/aggregator/"]
|
||||||
|
COPY ["src/BuildingBlocks/Devspaces.Support/Devspaces.Support.csproj", "src/BuildingBlocks/Devspaces.Support/"]
|
||||||
|
|
||||||
|
RUN dotnet restore src/ApiGateways/Mobile.Bff.Shopping/aggregator/Mobile.Shopping.HttpAggregator.csproj -nowarn:msb3202,nu1503
|
||||||
|
COPY . .
|
||||||
|
WORKDIR "/src/src/ApiGateways/Mobile.Bff.Shopping/aggregator"
|
||||||
|
RUN dotnet build --no-restore -c $BUILD_CONFIGURATION
|
||||||
|
|
||||||
|
CMD ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"]]
|
@ -23,4 +23,8 @@
|
|||||||
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="2.2.0" />
|
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="2.2.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\BuildingBlocks\Devspaces.Support\Devspaces.Support.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -24,6 +24,13 @@
|
|||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
},
|
},
|
||||||
"applicationUrl": "http://localhost:61632/"
|
"applicationUrl": "http://localhost:61632/"
|
||||||
|
},
|
||||||
|
"Azure Dev Spaces": {
|
||||||
|
"commandName": "AzureDevSpaces",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"resourceGroup": "eshoptestedu",
|
||||||
|
"aksName": "eshoptestedu",
|
||||||
|
"subscriptionId": "e3035ac1-c06c-4daf-8939-57b3c5f1f759"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,6 +20,7 @@ using Swashbuckle.AspNetCore.Swagger;
|
|||||||
using HealthChecks.UI.Client;
|
using HealthChecks.UI.Client;
|
||||||
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
||||||
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
||||||
|
using Devspaces.Support;
|
||||||
|
|
||||||
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
|
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
|
||||||
{
|
{
|
||||||
@ -47,6 +48,7 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
|
|||||||
|
|
||||||
services.AddCustomMvc(Configuration)
|
services.AddCustomMvc(Configuration)
|
||||||
.AddCustomAuthentication(Configuration)
|
.AddCustomAuthentication(Configuration)
|
||||||
|
.AddDevspaces()
|
||||||
.AddHttpServices();
|
.AddHttpServices();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,15 +190,18 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
|
|||||||
services.AddHttpClient<IBasketService, BasketService>()
|
services.AddHttpClient<IBasketService, BasketService>()
|
||||||
.AddHttpMessageHandler<HttpClientAuthorizationDelegatingHandler>()
|
.AddHttpMessageHandler<HttpClientAuthorizationDelegatingHandler>()
|
||||||
.AddPolicyHandler(GetRetryPolicy())
|
.AddPolicyHandler(GetRetryPolicy())
|
||||||
.AddPolicyHandler(GetCircuitBreakerPolicy());
|
.AddPolicyHandler(GetCircuitBreakerPolicy())
|
||||||
|
.AddDevspacesSupport();
|
||||||
|
|
||||||
services.AddHttpClient<ICatalogService, CatalogService>()
|
services.AddHttpClient<ICatalogService, CatalogService>()
|
||||||
.AddPolicyHandler(GetRetryPolicy())
|
.AddPolicyHandler(GetRetryPolicy())
|
||||||
.AddPolicyHandler(GetCircuitBreakerPolicy());
|
.AddPolicyHandler(GetCircuitBreakerPolicy())
|
||||||
|
.AddDevspacesSupport();
|
||||||
|
|
||||||
services.AddHttpClient<IOrderApiClient, OrderApiClient>()
|
services.AddHttpClient<IOrderApiClient, OrderApiClient>()
|
||||||
.AddPolicyHandler(GetRetryPolicy())
|
.AddPolicyHandler(GetRetryPolicy())
|
||||||
.AddPolicyHandler(GetCircuitBreakerPolicy());
|
.AddPolicyHandler(GetCircuitBreakerPolicy())
|
||||||
|
.AddDevspacesSupport();
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
55
src/ApiGateways/Mobile.Bff.Shopping/aggregator/azds.yaml
Normal file
55
src/ApiGateways/Mobile.Bff.Shopping/aggregator/azds.yaml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/mobileshoppingagg
|
||||||
|
set:
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
# This expands to [space.s.]apigwms.<guid>.<region>.aksapp.io
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- app.yaml
|
||||||
|
- inf.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: Dockerfile.develop
|
||||||
|
container:
|
||||||
|
syncTarget: /src
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command:
|
||||||
|
- dotnet
|
||||||
|
- run
|
||||||
|
- --no-restore
|
||||||
|
- --no-build
|
||||||
|
- --no-launch-profile
|
||||||
|
- -c
|
||||||
|
- ${Configuration:-Debug}
|
||||||
|
iterate:
|
||||||
|
processesToKill:
|
||||||
|
- dotnet
|
||||||
|
- vsdbg
|
||||||
|
buildCommands:
|
||||||
|
- - dotnet
|
||||||
|
- build
|
||||||
|
- --no-restore
|
||||||
|
- -c
|
||||||
|
- ${Configuration:-Debug}
|
@ -0,0 +1,3 @@
|
|||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
tls: []
|
44
src/ApiGateways/Mobile.Bff.Shopping/apigw/azds.yaml
Normal file
44
src/ApiGateways/Mobile.Bff.Shopping/apigw/azds.yaml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..\
|
||||||
|
dockerfile: ..\..\..\ApiGateways\ApiGw-Base\Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/apigwms
|
||||||
|
set:
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
# This expands to [space.s.]webmvc.<guid>.<region>.aksapp.io
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- inf.yaml
|
||||||
|
- app.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: ..\..\..\ApiGateways\ApiGw-Base\Dockerfile.develop
|
||||||
|
args:
|
||||||
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
container:
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command: [dotnet, run, --no-restore, --no-build, --no-launch-profile, -c, "${BUILD_CONFIGURATION:-Debug}"]
|
||||||
|
iterate:
|
||||||
|
processesToKill: [dotnet, vsdbg]
|
||||||
|
buildCommands:
|
||||||
|
- [dotnet, build, --no-restore, -c, "${BUILD_CONFIGURATION:-Debug}"]
|
@ -0,0 +1,2 @@
|
|||||||
|
ocelot:
|
||||||
|
configPath: /src/src/ApiGateways/ApiGw-Base/configuration
|
44
src/ApiGateways/Web.Bff.Marketing/apigw/azds.yaml
Normal file
44
src/ApiGateways/Web.Bff.Marketing/apigw/azds.yaml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..\
|
||||||
|
dockerfile: ..\..\..\ApiGateways\ApiGw-Base\Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/apigwwm
|
||||||
|
set:
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
# This expands to [space.s.]webmvc.<guid>.<region>.aksapp.io
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- inf.yaml
|
||||||
|
- app.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: ..\..\..\ApiGateways\ApiGw-Base\Dockerfile.develop
|
||||||
|
args:
|
||||||
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
container:
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command: [dotnet, run, --no-restore, --no-build, --no-launch-profile, -c, "${BUILD_CONFIGURATION:-Debug}"]
|
||||||
|
iterate:
|
||||||
|
processesToKill: [dotnet, vsdbg]
|
||||||
|
buildCommands:
|
||||||
|
- [dotnet, build, --no-restore, -c, "${BUILD_CONFIGURATION:-Debug}"]
|
2
src/ApiGateways/Web.Bff.Marketing/apigw/values.dev.yaml
Normal file
2
src/ApiGateways/Web.Bff.Marketing/apigw/values.dev.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ocelot:
|
||||||
|
configPath: /src/src/ApiGateways/ApiGw-Base/configuration
|
@ -0,0 +1,16 @@
|
|||||||
|
FROM microsoft/dotnet:2.2-sdk
|
||||||
|
ARG BUILD_CONFIGURATION=Debug
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Development
|
||||||
|
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY ["src/ApiGateways/Web.Bff.Shopping/aggregator/Web.Shopping.HttpAggregator.csproj", "src/ApiGateways/Web.Bff.Shopping/aggregator/"]
|
||||||
|
COPY ["src/BuildingBlocks/Devspaces.Support/Devspaces.Support.csproj", "src/BuildingBlocks/Devspaces.Support/"]
|
||||||
|
|
||||||
|
RUN dotnet restore src/ApiGateways/Web.Bff.Shopping/aggregator/Web.Shopping.HttpAggregator.csproj -nowarn:msb3202,nu1503
|
||||||
|
COPY . .
|
||||||
|
WORKDIR "/src/src/ApiGateways/Web.Bff.Shopping/aggregator"
|
||||||
|
RUN dotnet build --no-restore -c $BUILD_CONFIGURATION
|
||||||
|
|
||||||
|
CMD ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"]]
|
@ -21,6 +21,7 @@ using System.Net.Http;
|
|||||||
using HealthChecks.UI.Client;
|
using HealthChecks.UI.Client;
|
||||||
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
||||||
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
||||||
|
using Devspaces.Support;
|
||||||
|
|
||||||
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
|
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
|
||||||
{
|
{
|
||||||
@ -48,6 +49,7 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
|
|||||||
|
|
||||||
services.AddCustomMvc(Configuration)
|
services.AddCustomMvc(Configuration)
|
||||||
.AddCustomAuthentication(Configuration)
|
.AddCustomAuthentication(Configuration)
|
||||||
|
.AddDevspaces()
|
||||||
.AddApplicationServices();
|
.AddApplicationServices();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,21 +184,23 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
|
|||||||
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
||||||
|
|
||||||
//register http services
|
//register http services
|
||||||
|
|
||||||
services.AddHttpClient<IBasketService, BasketService>()
|
services.AddHttpClient<IBasketService, BasketService>()
|
||||||
.AddHttpMessageHandler<HttpClientAuthorizationDelegatingHandler>()
|
.AddHttpMessageHandler<HttpClientAuthorizationDelegatingHandler>()
|
||||||
.AddPolicyHandler(GetRetryPolicy())
|
.AddPolicyHandler(GetRetryPolicy())
|
||||||
.AddPolicyHandler(GetCircuitBreakerPolicy());
|
.AddPolicyHandler(GetCircuitBreakerPolicy())
|
||||||
|
.AddDevspacesSupport();
|
||||||
|
|
||||||
services.AddHttpClient<ICatalogService, CatalogService>()
|
services.AddHttpClient<ICatalogService, CatalogService>()
|
||||||
.AddPolicyHandler(GetRetryPolicy())
|
.AddPolicyHandler(GetRetryPolicy())
|
||||||
.AddPolicyHandler(GetCircuitBreakerPolicy());
|
.AddPolicyHandler(GetCircuitBreakerPolicy())
|
||||||
|
.AddDevspacesSupport();
|
||||||
|
|
||||||
services.AddHttpClient<IOrderApiClient, OrderApiClient>()
|
services.AddHttpClient<IOrderApiClient, OrderApiClient>()
|
||||||
.AddHttpMessageHandler<HttpClientAuthorizationDelegatingHandler>()
|
.AddHttpMessageHandler<HttpClientAuthorizationDelegatingHandler>()
|
||||||
.AddPolicyHandler(GetRetryPolicy())
|
.AddPolicyHandler(GetRetryPolicy())
|
||||||
.AddPolicyHandler(GetCircuitBreakerPolicy());
|
.AddPolicyHandler(GetCircuitBreakerPolicy())
|
||||||
|
.AddDevspacesSupport();
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
@ -22,4 +22,8 @@
|
|||||||
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="2.2.0" />
|
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="2.2.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\BuildingBlocks\Devspaces.Support\Devspaces.Support.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
55
src/ApiGateways/Web.Bff.Shopping/aggregator/azds.yaml
Normal file
55
src/ApiGateways/Web.Bff.Shopping/aggregator/azds.yaml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/webshoppingagg
|
||||||
|
set:
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
# This expands to [space.s.]apigwms.<guid>.<region>.aksapp.io
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- app.yaml
|
||||||
|
- inf.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: Dockerfile.develop
|
||||||
|
container:
|
||||||
|
syncTarget: /src
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command:
|
||||||
|
- dotnet
|
||||||
|
- run
|
||||||
|
- --no-restore
|
||||||
|
- --no-build
|
||||||
|
- --no-launch-profile
|
||||||
|
- -c
|
||||||
|
- ${Configuration:-Debug}
|
||||||
|
iterate:
|
||||||
|
processesToKill:
|
||||||
|
- dotnet
|
||||||
|
- vsdbg
|
||||||
|
buildCommands:
|
||||||
|
- - dotnet
|
||||||
|
- build
|
||||||
|
- --no-restore
|
||||||
|
- -c
|
||||||
|
- ${Configuration:-Debug}
|
@ -0,0 +1,2 @@
|
|||||||
|
ocelot:
|
||||||
|
configPath: /app/configuration
|
43
src/ApiGateways/Web.Bff.Shopping/apigw/azds.yaml
Normal file
43
src/ApiGateways/Web.Bff.Shopping/apigw/azds.yaml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..\
|
||||||
|
dockerfile: ..\..\..\..\ApiGateways\ApiGw-Base\Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/apigwws
|
||||||
|
set:
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- inf.yaml
|
||||||
|
- app.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: ..\..\..\ApiGateways\ApiGw-Base\Dockerfile.develop
|
||||||
|
args:
|
||||||
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
container:
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command: [dotnet, run, --no-restore, --no-build, --no-launch-profile, -c, "${BUILD_CONFIGURATION:-Debug}"]
|
||||||
|
iterate:
|
||||||
|
processesToKill: [dotnet, vsdbg]
|
||||||
|
buildCommands:
|
||||||
|
- [dotnet, build, --no-restore, -c, "${BUILD_CONFIGURATION:-Debug}"]
|
2
src/ApiGateways/Web.Bff.Shopping/apigw/values.dev.yaml
Normal file
2
src/ApiGateways/Web.Bff.Shopping/apigw/values.dev.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ocelot:
|
||||||
|
configPath: /src/src/ApiGateways/ApiGw-Base/configuration
|
@ -0,0 +1,11 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.2.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Http" Version="2.2.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -0,0 +1,30 @@
|
|||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Devspaces.Support
|
||||||
|
{
|
||||||
|
public class DevspacesMessageHandler : DelegatingHandler
|
||||||
|
{
|
||||||
|
private const string DevspacesHeaderName = "azds-route-as";
|
||||||
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||||
|
public DevspacesMessageHandler(IHttpContextAccessor httpContextAccessor)
|
||||||
|
{
|
||||||
|
_httpContextAccessor = httpContextAccessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var req = _httpContextAccessor.HttpContext.Request;
|
||||||
|
|
||||||
|
if (req.Headers.ContainsKey(DevspacesHeaderName))
|
||||||
|
{
|
||||||
|
request.Headers.Add(DevspacesHeaderName, req.Headers[DevspacesHeaderName] as IEnumerable<string>);
|
||||||
|
}
|
||||||
|
return base.SendAsync(request, cancellationToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Devspaces.Support
|
||||||
|
{
|
||||||
|
public static class HttpClientBuilderDevspacesExtensions
|
||||||
|
{
|
||||||
|
public static IHttpClientBuilder AddDevspacesSupport(this IHttpClientBuilder builder)
|
||||||
|
{
|
||||||
|
builder.AddHttpMessageHandler<DevspacesMessageHandler>();
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Devspaces.Support
|
||||||
|
{
|
||||||
|
public static class ServiceCollectionDevspacesExtensions
|
||||||
|
{
|
||||||
|
public static IServiceCollection AddDevspaces(this IServiceCollection services)
|
||||||
|
{
|
||||||
|
services.AddTransient<DevspacesMessageHandler>();
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -178,27 +178,46 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ
|
|||||||
{
|
{
|
||||||
if (_consumerChannel != null)
|
if (_consumerChannel != null)
|
||||||
{
|
{
|
||||||
var consumer = new EventingBasicConsumer(_consumerChannel);
|
var consumer = new AsyncEventingBasicConsumer(_consumerChannel);
|
||||||
consumer.Received += async (model, ea) =>
|
|
||||||
{
|
|
||||||
var eventName = ea.RoutingKey;
|
|
||||||
var message = Encoding.UTF8.GetString(ea.Body);
|
|
||||||
|
|
||||||
await ProcessEvent(eventName, message);
|
consumer.Received += Consumer_Received;
|
||||||
|
|
||||||
_consumerChannel.BasicAck(ea.DeliveryTag, multiple: false);
|
_consumerChannel.BasicConsume(
|
||||||
};
|
queue: _queueName,
|
||||||
|
autoAck: false,
|
||||||
_consumerChannel.BasicConsume(queue: _queueName,
|
consumer: consumer);
|
||||||
autoAck: false,
|
|
||||||
consumer: consumer);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_logger.LogError("StartBasicConsume can not call on _consumerChannelCreated == false");
|
_logger.LogError("StartBasicConsume can't call on _consumerChannel == null");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task Consumer_Received(object sender, BasicDeliverEventArgs eventArgs)
|
||||||
|
{
|
||||||
|
var eventName = eventArgs.RoutingKey;
|
||||||
|
var message = Encoding.UTF8.GetString(eventArgs.Body);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (message.ToLowerInvariant().Contains("throw-fake-exception"))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException($"Fake exception requested: \"{message}\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
await ProcessEvent(eventName, message);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogWarning(ex, "----- ERROR Processing message \"{Message}\"", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Even on exception we take the message off the queue.
|
||||||
|
// in a REAL WORLD app this should be handled with a Dead Letter Exchange (DLX).
|
||||||
|
// For more information see: https://www.rabbitmq.com/dlx.html
|
||||||
|
_consumerChannel.BasicAck(eventArgs.DeliveryTag, multiple: false);
|
||||||
|
}
|
||||||
|
|
||||||
private IModel CreateConsumerChannel()
|
private IModel CreateConsumerChannel()
|
||||||
{
|
{
|
||||||
if (!_persistentConnection.IsConnected)
|
if (!_persistentConnection.IsConnected)
|
||||||
@ -209,7 +228,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ
|
|||||||
var channel = _persistentConnection.CreateModel();
|
var channel = _persistentConnection.CreateModel();
|
||||||
|
|
||||||
channel.ExchangeDeclare(exchange: BROKER_NAME,
|
channel.ExchangeDeclare(exchange: BROKER_NAME,
|
||||||
type: "direct");
|
type: "direct");
|
||||||
|
|
||||||
channel.QueueDeclare(queue: _queueName,
|
channel.QueueDeclare(queue: _queueName,
|
||||||
durable: true,
|
durable: true,
|
||||||
|
14
src/Services/Basket/Basket.API/.dockerignore
Normal file
14
src/Services/Basket/Basket.API/.dockerignore
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
.dockerignore
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.vs
|
||||||
|
.vscode
|
||||||
|
**/*.*proj.user
|
||||||
|
**/azds.yaml
|
||||||
|
**/bin
|
||||||
|
**/charts
|
||||||
|
**/Dockerfile
|
||||||
|
**/Dockerfile.develop
|
||||||
|
**/obj
|
||||||
|
**/secrets.dev.yaml
|
||||||
|
**/values.dev.yaml
|
@ -41,14 +41,14 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Controllers
|
|||||||
{
|
{
|
||||||
var basket = await _repository.GetBasketAsync(id);
|
var basket = await _repository.GetBasketAsync(id);
|
||||||
|
|
||||||
return basket ?? new CustomerBasket(id);
|
return Ok(basket ?? new CustomerBasket(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[ProducesResponseType(typeof(CustomerBasket), (int)HttpStatusCode.OK)]
|
[ProducesResponseType(typeof(CustomerBasket), (int)HttpStatusCode.OK)]
|
||||||
public async Task<ActionResult<CustomerBasket>> UpdateBasketAsync([FromBody]CustomerBasket value)
|
public async Task<ActionResult<CustomerBasket>> UpdateBasketAsync([FromBody]CustomerBasket value)
|
||||||
{
|
{
|
||||||
return await _repository.UpdateBasketAsync(value);
|
return Ok(await _repository.UpdateBasketAsync(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("checkout")]
|
[Route("checkout")]
|
||||||
|
19
src/Services/Basket/Basket.API/Dockerfile.develop
Normal file
19
src/Services/Basket/Basket.API/Dockerfile.develop
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
FROM microsoft/dotnet:2.2-sdk
|
||||||
|
ARG BUILD_CONFIGURATION=Debug
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Development
|
||||||
|
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBus/EventBus.csproj", "src/BuildingBlocks/EventBus/EventBus/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj", "src/BuildingBlocks/EventBus/EventBusRabbitMQ/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj", "src/BuildingBlocks/EventBus/EventBusServiceBus/"]
|
||||||
|
COPY ["src/Services/Basket/Basket.API/Basket.API.csproj", "src/Services/Basket/Basket.API/"]
|
||||||
|
|
||||||
|
RUN dotnet restore src/Services/Basket/Basket.API/Basket.API.csproj -nowarn:msb3202,nu1503
|
||||||
|
COPY . .
|
||||||
|
WORKDIR /src/src/Services/Basket/Basket.API
|
||||||
|
RUN dotnet build --no-restore -c $BUILD_CONFIGURATION
|
||||||
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"]
|
@ -105,7 +105,8 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API
|
|||||||
|
|
||||||
var factory = new ConnectionFactory()
|
var factory = new ConnectionFactory()
|
||||||
{
|
{
|
||||||
HostName = Configuration["EventBusConnection"]
|
HostName = Configuration["EventBusConnection"],
|
||||||
|
DispatchConsumersAsync = true
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"]))
|
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"]))
|
||||||
|
56
src/Services/Basket/Basket.API/azds.yaml
Normal file
56
src/Services/Basket/Basket.API/azds.yaml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/basket-api
|
||||||
|
set:
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- inf.yaml
|
||||||
|
- app.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: Dockerfile.develop
|
||||||
|
args:
|
||||||
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
container:
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command:
|
||||||
|
- dotnet
|
||||||
|
- run
|
||||||
|
- --no-restore
|
||||||
|
- --no-build
|
||||||
|
- --no-launch-profile
|
||||||
|
- -c
|
||||||
|
- ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
iterate:
|
||||||
|
processesToKill:
|
||||||
|
- dotnet
|
||||||
|
- vsdbg
|
||||||
|
buildCommands:
|
||||||
|
- - dotnet
|
||||||
|
- build
|
||||||
|
- --no-restore
|
||||||
|
- -c
|
||||||
|
- ${BUILD_CONFIGURATION:-Debug}
|
3
src/Services/Basket/Basket.API/values.dev.yaml
Normal file
3
src/Services/Basket/Basket.API/values.dev.yaml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
tls: []
|
@ -17,6 +17,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.2.0" />
|
||||||
<PackageReference Include="xunit" Version="2.4.1" />
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
|
@ -55,7 +55,7 @@ namespace UnitTest.Basket.Application
|
|||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal((actionResult.Result as OkObjectResult).StatusCode, (int)System.Net.HttpStatusCode.OK);
|
Assert.Equal((actionResult.Result as OkObjectResult).StatusCode, (int)System.Net.HttpStatusCode.OK);
|
||||||
Assert.Equal(((CustomerBasket)actionResult.Value).BuyerId, fakeCustomerId);
|
Assert.Equal((((ObjectResult)actionResult.Result).Value as CustomerBasket).BuyerId, fakeCustomerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@ -81,7 +81,7 @@ namespace UnitTest.Basket.Application
|
|||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
Assert.Equal((actionResult.Result as OkObjectResult).StatusCode, (int)System.Net.HttpStatusCode.OK);
|
Assert.Equal((actionResult.Result as OkObjectResult).StatusCode, (int)System.Net.HttpStatusCode.OK);
|
||||||
Assert.Equal(((CustomerBasket)actionResult.Value).BuyerId, fakeCustomerId);
|
Assert.Equal((((ObjectResult)actionResult.Result).Value as CustomerBasket).BuyerId, fakeCustomerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||||
<PackageReference Include="xunit" Version="2.4.1" />
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
|
||||||
|
@ -60,6 +60,15 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
|||||||
.Take(pageSize)
|
.Take(pageSize)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
|
/* The "awesome" fix for testing Devspaces */
|
||||||
|
|
||||||
|
/*
|
||||||
|
foreach (var pr in itemsOnPage) {
|
||||||
|
pr.Name = "Awesome " + pr.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
itemsOnPage = ChangeUriPlaceholder(itemsOnPage);
|
itemsOnPage = ChangeUriPlaceholder(itemsOnPage);
|
||||||
|
|
||||||
var model = new PaginatedItemsViewModel<CatalogItem>(pageIndex, pageSize, totalItems, itemsOnPage);
|
var model = new PaginatedItemsViewModel<CatalogItem>(pageIndex, pageSize, totalItems, itemsOnPage);
|
||||||
|
21
src/Services/Catalog/Catalog.API/Dockerfile.develop
Normal file
21
src/Services/Catalog/Catalog.API/Dockerfile.develop
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
FROM microsoft/dotnet:2.2-sdk
|
||||||
|
ARG BUILD_CONFIGURATION=Debug
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Development
|
||||||
|
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBus/EventBus.csproj", "src/BuildingBlocks/EventBus/EventBus/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj", "src/BuildingBlocks/EventBus/EventBusRabbitMQ/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj", "src/BuildingBlocks/EventBus/EventBusServiceBus/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/IntegrationEventLogEF/IntegrationEventLogEF.csproj", "src/BuildingBlocks/EventBus/IntegrationEventLogEF/"]
|
||||||
|
COPY ["src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj", "src/BuildingBlocks/WebHostCustomization/WebHost.Customization/"]
|
||||||
|
COPY ["src/Services/Catalog/Catalog.API/Catalog.API.csproj", "src/Services/Catalog/Catalog.API/"]
|
||||||
|
|
||||||
|
RUN dotnet restore src/Services/Catalog/Catalog.API/Catalog.API.csproj -nowarn:msb3202,nu1503
|
||||||
|
COPY . .
|
||||||
|
WORKDIR "/src/src/Services/Catalog/Catalog.API"
|
||||||
|
RUN dotnet build --no-restore -c $BUILD_CONFIGURATION
|
||||||
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"]
|
@ -64,7 +64,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Model
|
|||||||
|
|
||||||
if (quantityDesired <= 0)
|
if (quantityDesired <= 0)
|
||||||
{
|
{
|
||||||
throw new CatalogDomainException($"Item units desired should be greater than cero");
|
throw new CatalogDomainException($"Item units desired should be greater than zero");
|
||||||
}
|
}
|
||||||
|
|
||||||
int removed = Math.Min(quantityDesired, this.AvailableStock);
|
int removed = Math.Min(quantityDesired, this.AvailableStock);
|
||||||
|
@ -27,6 +27,13 @@
|
|||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"Azure Dev Spaces": {
|
||||||
|
"commandName": "AzureDevSpaces",
|
||||||
|
"launchBrowser": true,
|
||||||
|
"resourceGroup": "edu-devspaces3",
|
||||||
|
"aksName": "edu-devspaces3",
|
||||||
|
"subscriptionId": "e3035ac1-c06c-4daf-8939-57b3c5f1f759"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -297,7 +297,8 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API
|
|||||||
|
|
||||||
var factory = new ConnectionFactory()
|
var factory = new ConnectionFactory()
|
||||||
{
|
{
|
||||||
HostName = configuration["EventBusConnection"]
|
HostName = configuration["EventBusConnection"],
|
||||||
|
DispatchConsumersAsync = true
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(configuration["EventBusUserName"]))
|
if (!string.IsNullOrEmpty(configuration["EventBusUserName"]))
|
||||||
|
54
src/Services/Catalog/Catalog.API/azds.yaml
Normal file
54
src/Services/Catalog/Catalog.API/azds.yaml
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/catalog-api
|
||||||
|
set:
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- inf.yaml
|
||||||
|
- app.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: Dockerfile.develop
|
||||||
|
container:
|
||||||
|
syncTarget: /src
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command:
|
||||||
|
- dotnet
|
||||||
|
- run
|
||||||
|
- --no-restore
|
||||||
|
- --no-build
|
||||||
|
- --no-launch-profile
|
||||||
|
- -c
|
||||||
|
- ${Configuration:-Debug}
|
||||||
|
iterate:
|
||||||
|
processesToKill:
|
||||||
|
- dotnet
|
||||||
|
- vsdbg
|
||||||
|
buildCommands:
|
||||||
|
- - dotnet
|
||||||
|
- build
|
||||||
|
- --no-restore
|
||||||
|
- -c
|
||||||
|
- ${Configuration:-Debug}
|
3
src/Services/Catalog/Catalog.API/values.dev.yaml
Normal file
3
src/Services/Catalog/Catalog.API/values.dev.yaml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
tls: []
|
@ -33,6 +33,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.2.0" />
|
||||||
<PackageReference Include="xunit" Version="2.4.1" />
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||||
<PackageReference Include="xunit" Version="2.4.1" />
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
|
||||||
|
14
src/Services/Identity/Identity.API/.dockerignore
Normal file
14
src/Services/Identity/Identity.API/.dockerignore
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
.dockerignore
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.vs
|
||||||
|
.vscode
|
||||||
|
**/*.*proj.user
|
||||||
|
**/azds.yaml
|
||||||
|
**/bin
|
||||||
|
**/charts
|
||||||
|
**/Dockerfile
|
||||||
|
**/Dockerfile.develop
|
||||||
|
**/obj
|
||||||
|
**/secrets.dev.yaml
|
||||||
|
**/values.dev.yaml
|
@ -0,0 +1,31 @@
|
|||||||
|
using IdentityServer4.Models;
|
||||||
|
using IdentityServer4.Validation;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
|
namespace Microsoft.eShopOnContainers.Services.Identity.API.Devspaces
|
||||||
|
{
|
||||||
|
public class DevspacesRedirectUriValidator : IRedirectUriValidator
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
public DevspacesRedirectUriValidator(ILogger<DevspacesRedirectUriValidator> logger)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<bool> IsPostLogoutRedirectUriValidAsync(string requestedUri, Client client)
|
||||||
|
{
|
||||||
|
|
||||||
|
_logger.LogInformation($"Client {client.ClientName} used post logout uri {requestedUri}.");
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<bool> IsRedirectUriValidAsync(string requestedUri, Client client)
|
||||||
|
{
|
||||||
|
_logger.LogInformation($"Client {client.ClientName} used redirect uri {requestedUri}.");
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Microsoft.eShopOnContainers.Services.Identity.API.Devspaces
|
||||||
|
{
|
||||||
|
static class IdentityDevspacesBuilderExtensions
|
||||||
|
{
|
||||||
|
public static IIdentityServerBuilder AddDevspacesIfNeeded(this IIdentityServerBuilder builder, bool useDevspaces)
|
||||||
|
{
|
||||||
|
if (useDevspaces)
|
||||||
|
{
|
||||||
|
builder.AddRedirectUriValidator<DevspacesRedirectUriValidator>();
|
||||||
|
}
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
src/Services/Identity/Identity.API/Dockerfile.develop
Normal file
15
src/Services/Identity/Identity.API/Dockerfile.develop
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
FROM microsoft/dotnet:2.2-sdk
|
||||||
|
ARG BUILD_CONFIGURATION=Debug
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Development
|
||||||
|
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY ["src/Services/Identity/Identity.API/Identity.API.csproj", "src/Services/Identity/Identity.API/"]
|
||||||
|
COPY ["src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj", "src/BuildingBlocks/WebHostCustomization/WebHost.Customization/"]
|
||||||
|
RUN dotnet restore src/Services/Identity/Identity.API/Identity.API.csproj -nowarn:msb3202,nu1503
|
||||||
|
COPY . .
|
||||||
|
WORKDIR "/src/src/Services/Identity/Identity.API"
|
||||||
|
RUN dotnet build --no-restore -c $BUILD_CONFIGURATION
|
||||||
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"]
|
@ -2,10 +2,10 @@
|
|||||||
Sample reference containerized application, cross-platform and microservices architecture.
|
Sample reference containerized application, cross-platform and microservices architecture.
|
||||||
Powered by Microsoft
|
Powered by Microsoft
|
||||||
|
|
||||||
#Overview
|
## Overview
|
||||||
This sample runs a microservices oriented application and a .net core Mvc application that consumes this services. You can find more information about how to set up docker in your machine in the global directory solution.
|
This sample runs a microservices oriented application and a .net core Mvc application that consumes this services. You can find more information about how to set up docker in your machine in the global directory solution.
|
||||||
|
|
||||||
#Setup
|
## Setup
|
||||||
This service is a identity provider or STS (Security Token Service) currently implemented with IdentityServer 4 wrapping ASP.NET Identity underneath.
|
This service is a identity provider or STS (Security Token Service) currently implemented with IdentityServer 4 wrapping ASP.NET Identity underneath.
|
||||||
|
|
||||||
Check procedures on how to get the sample app started at the Wiki:
|
Check procedures on how to get the sample app started at the Wiki:
|
||||||
|
@ -13,6 +13,7 @@ using Microsoft.eShopOnContainers.Services.Identity.API.Certificates;
|
|||||||
using Microsoft.eShopOnContainers.Services.Identity.API.Data;
|
using Microsoft.eShopOnContainers.Services.Identity.API.Data;
|
||||||
using Microsoft.eShopOnContainers.Services.Identity.API.Models;
|
using Microsoft.eShopOnContainers.Services.Identity.API.Models;
|
||||||
using Microsoft.eShopOnContainers.Services.Identity.API.Services;
|
using Microsoft.eShopOnContainers.Services.Identity.API.Services;
|
||||||
|
using Microsoft.eShopOnContainers.Services.Identity.API.Devspaces;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
@ -85,6 +86,7 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API
|
|||||||
x.IssuerUri = "null";
|
x.IssuerUri = "null";
|
||||||
x.Authentication.CookieLifetime = TimeSpan.FromHours(2);
|
x.Authentication.CookieLifetime = TimeSpan.FromHours(2);
|
||||||
})
|
})
|
||||||
|
.AddDevspacesIfNeeded(Configuration.GetValue("EnableDevspaces", false))
|
||||||
.AddSigningCredential(Certificate.Get())
|
.AddSigningCredential(Certificate.Get())
|
||||||
.AddAspNetIdentity<ApplicationUser>()
|
.AddAspNetIdentity<ApplicationUser>()
|
||||||
.AddConfigurationStore(options =>
|
.AddConfigurationStore(options =>
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
@Html.Partial("_ValidationSummary")
|
<partial name="_ValidationSummary"/>
|
||||||
|
|
||||||
<form asp-action="Index" class="consent-form">
|
<form asp-action="Index" class="consent-form">
|
||||||
<input type="hidden" asp-for="ReturnUrl" />
|
<input type="hidden" asp-for="ReturnUrl" />
|
||||||
@ -33,7 +33,7 @@
|
|||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
@foreach (var scope in Model.IdentityScopes)
|
@foreach (var scope in Model.IdentityScopes)
|
||||||
{
|
{
|
||||||
@Html.Partial("_ScopeListItem", scope)
|
<partial name="_ScopeListItem" model="scope"/>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -49,7 +49,7 @@
|
|||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
@foreach (var scope in Model.ResourceScopes)
|
@foreach (var scope in Model.ResourceScopes)
|
||||||
{
|
{
|
||||||
@Html.Partial("_ScopeListItem", scope)
|
<partial name="_ScopeListItem" model="scope"/>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
@if (SignInManager.IsSignedIn(User))
|
@if (SignInManager.IsSignedIn(User))
|
||||||
{
|
{
|
||||||
<form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right">
|
<form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
<li>
|
<li>
|
||||||
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
|
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
|
||||||
|
56
src/Services/Identity/Identity.API/azds.yaml
Normal file
56
src/Services/Identity/Identity.API/azds.yaml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/identity-api
|
||||||
|
set:
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- inf.yaml
|
||||||
|
- app.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: Dockerfile.develop
|
||||||
|
args:
|
||||||
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
container:
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command:
|
||||||
|
- dotnet
|
||||||
|
- run
|
||||||
|
- --no-restore
|
||||||
|
- --no-build
|
||||||
|
- --no-launch-profile
|
||||||
|
- -c
|
||||||
|
- ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
iterate:
|
||||||
|
processesToKill:
|
||||||
|
- dotnet
|
||||||
|
- vsdbg
|
||||||
|
buildCommands:
|
||||||
|
- - dotnet
|
||||||
|
- build
|
||||||
|
- --no-restore
|
||||||
|
- -c
|
||||||
|
- ${BUILD_CONFIGURATION:-Debug}
|
1
src/Services/Identity/Identity.API/values.dev.yaml
Normal file
1
src/Services/Identity/Identity.API/values.dev.yaml
Normal file
@ -0,0 +1 @@
|
|||||||
|
enableDevspaces: "true"
|
17
src/Services/Location/Locations.API/Dockerfile.develop
Normal file
17
src/Services/Location/Locations.API/Dockerfile.develop
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
FROM microsoft/dotnet:2.2-sdk
|
||||||
|
ARG BUILD_CONFIGURATION=Debug
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Development
|
||||||
|
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY ["src/Services/Location/Locations.API/Locations.API.csproj", "src/Services/Location/Locations.API/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBus/EventBus.csproj", "src/BuildingBlocks/EventBus/EventBus/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj", "src/BuildingBlocks/EventBus/EventBusRabbitMQ/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj", "src/BuildingBlocks/EventBus/EventBusServiceBus/"]
|
||||||
|
RUN dotnet restore src/Services/Location/Locations.API/Locations.API.csproj -nowarn:msb3202,nu1503
|
||||||
|
COPY . .
|
||||||
|
WORKDIR "/src/src/Services/Location/Locations.API"
|
||||||
|
RUN dotnet build --no-restore -c $BUILD_CONFIGURATION
|
||||||
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"]
|
@ -77,7 +77,8 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API
|
|||||||
|
|
||||||
var factory = new ConnectionFactory()
|
var factory = new ConnectionFactory()
|
||||||
{
|
{
|
||||||
HostName = Configuration["EventBusConnection"]
|
HostName = Configuration["EventBusConnection"],
|
||||||
|
DispatchConsumersAsync = true
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"]))
|
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"]))
|
||||||
|
56
src/Services/Location/Locations.API/azds.yaml
Normal file
56
src/Services/Location/Locations.API/azds.yaml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
kind: helm-release
|
||||||
|
apiVersion: 1.1
|
||||||
|
build:
|
||||||
|
context: ..\..\..\..
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
install:
|
||||||
|
chart: ../../../../k8s/helm/locations-api
|
||||||
|
set:
|
||||||
|
replicaCount: 1
|
||||||
|
image:
|
||||||
|
tag: $(tag)
|
||||||
|
pullPolicy: Never
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: traefik-azds
|
||||||
|
hosts:
|
||||||
|
- $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
inf:
|
||||||
|
k8s:
|
||||||
|
dns: $(spacePrefix)eshop$(hostSuffix)
|
||||||
|
values:
|
||||||
|
- values.dev.yaml?
|
||||||
|
- secrets.dev.yaml?
|
||||||
|
- inf.yaml
|
||||||
|
- app.yaml
|
||||||
|
configurations:
|
||||||
|
develop:
|
||||||
|
build:
|
||||||
|
useGitIgnore: true
|
||||||
|
dockerfile: Dockerfile.develop
|
||||||
|
args:
|
||||||
|
BUILD_CONFIGURATION: ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
container:
|
||||||
|
sync:
|
||||||
|
- '**/Pages/**'
|
||||||
|
- '**/Views/**'
|
||||||
|
- '**/wwwroot/**'
|
||||||
|
- '!**/*.{sln,csproj}'
|
||||||
|
command:
|
||||||
|
- dotnet
|
||||||
|
- run
|
||||||
|
- --no-restore
|
||||||
|
- --no-build
|
||||||
|
- --no-launch-profile
|
||||||
|
- -c
|
||||||
|
- ${BUILD_CONFIGURATION:-Debug}
|
||||||
|
iterate:
|
||||||
|
processesToKill:
|
||||||
|
- dotnet
|
||||||
|
- vsdbg
|
||||||
|
buildCommands:
|
||||||
|
- - dotnet
|
||||||
|
- build
|
||||||
|
- --no-restore
|
||||||
|
- -c
|
||||||
|
- ${BUILD_CONFIGURATION:-Debug}
|
3
src/Services/Location/Locations.API/values.dev.yaml
Normal file
3
src/Services/Location/Locations.API/values.dev.yaml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
tls: []
|
@ -17,6 +17,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.App" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="2.2.0" />
|
||||||
<PackageReference Include="xunit" Version="2.4.1" />
|
<PackageReference Include="xunit" Version="2.4.1" />
|
||||||
|
18
src/Services/Marketing/Marketing.API/Dockerfile.develop
Normal file
18
src/Services/Marketing/Marketing.API/Dockerfile.develop
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
FROM microsoft/dotnet:2.2-sdk
|
||||||
|
ARG BUILD_CONFIGURATION=Debug
|
||||||
|
ENV ASPNETCORE_ENVIRONMENT=Development
|
||||||
|
ENV DOTNET_USE_POLLING_FILE_WATCHER=true
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
COPY ["src/Services/Marketing/Marketing.API/Marketing.API.csproj", "src/Services/Marketing/Marketing.API/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBus/EventBus.csproj", "src/BuildingBlocks/EventBus/EventBus/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.csproj", "src/BuildingBlocks/EventBus/EventBusRabbitMQ/"]
|
||||||
|
COPY ["src/BuildingBlocks/EventBus/EventBusServiceBus/EventBusServiceBus.csproj", "src/BuildingBlocks/EventBus/EventBusServiceBus/"]
|
||||||
|
COPY ["src/BuildingBlocks/WebHostCustomization/WebHost.Customization/WebHost.Customization.csproj", "src/BuildingBlocks/WebHostCustomization/WebHost.Customization/"]
|
||||||
|
RUN dotnet restore src/Services/Marketing/Marketing.API/Marketing.API.csproj -nowarn:msb3202,nu1503
|
||||||
|
COPY . .
|
||||||
|
WORKDIR "/src/src/Services/Marketing/Marketing.API"
|
||||||
|
RUN dotnet build --no-restore -c $BUILD_CONFIGURATION
|
||||||
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--no-build", "--no-launch-profile", "-c", "$BUILD_CONFIGURATION", "--"]
|
@ -101,7 +101,8 @@
|
|||||||
|
|
||||||
var factory = new ConnectionFactory()
|
var factory = new ConnectionFactory()
|
||||||
{
|
{
|
||||||
HostName = Configuration["EventBusConnection"]
|
HostName = Configuration["EventBusConnection"],
|
||||||
|
DispatchConsumersAsync = true
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"]))
|
if (!string.IsNullOrEmpty(Configuration["EventBusUserName"]))
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user