Skip to content

Commit ff7eb6e

Browse files
committed
General infra reliability improvements
1 parent 6c53b4c commit ff7eb6e

File tree

7 files changed

+41
-19
lines changed

7 files changed

+41
-19
lines changed

deploy/Pulumi.local.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ config:
33
mcp-registry:provider: local
44
mcp-registry:githubClientId: Iv23licy3GSiM9Km5jtd
55
mcp-registry:githubClientSecret: 0e8db54879b02c29adef51795586f3c510a9341d
6+
mcp-registry:jwtPrivateKey: bb2c6b424005acd5df47a9e2c87f446def86dd740c888ea3efb825b23f7ef47c
67
encryptionsalt: v1:ijIHaqhbXVA=:v1:7voX1Kv+Bunz33iN:fyVHMOhlGIymzJ+ILgUBy3ExTwUUnA==

deploy/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Pre-requisites:
1111
- Access to a Kubernetes cluster via kubeconfig. You can run a cluster locally with [minikube](https://minikube.sigs.k8s.io/docs/start/).
1212

1313
1. Ensure your kubeconfig is configured at the cluster you want to use. For minikube, run `minikube start && minikube tunnel`.
14-
2. Run `make local-up` to deploy the stack. Run this again if the first attempt fails.
14+
2. Run `make local-up` to deploy the stack.
1515
3. Access the repository via the ingress load balancer. You can find its external IP with `kubectl get svc ingress-nginx-controller -n ingress-nginx`. Then run `curl -H "Host: local.registry.modelcontextprotocol.io" -k https://<EXTERNAL-IP>/v0/ping` to check that the service is up.
1616

1717
#### To change config

deploy/pkg/k8s/cert_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func SetupCertManager(ctx *pulumi.Context, cluster *providers.ProviderInfo) erro
6969
},
7070
},
7171
},
72-
}, pulumi.Provider(cluster.Provider), pulumi.DependsOn([]pulumi.Resource{certManager}))
72+
}, pulumi.Provider(cluster.Provider), pulumi.DependsOnInputs(certManager.Ready))
7373
if err != nil {
7474
return err
7575
}

deploy/pkg/k8s/deploy.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func DeployAll(ctx *pulumi.Context, cluster *providers.ProviderInfo, environment
1616
}
1717

1818
// Setup ingress controller
19-
err = SetupIngressController(ctx, cluster, environment)
19+
ingressNginx, err := SetupIngressController(ctx, cluster, environment)
2020
if err != nil {
2121
return nil, err
2222
}
@@ -28,7 +28,7 @@ func DeployAll(ctx *pulumi.Context, cluster *providers.ProviderInfo, environment
2828
}
2929

3030
// Deploy MCP Registry
31-
service, err = DeployMCPRegistry(ctx, cluster, environment, pgCluster)
31+
service, err = DeployMCPRegistry(ctx, cluster, environment, ingressNginx, pgCluster)
3232
if err != nil {
3333
return nil, err
3434
}

deploy/pkg/k8s/ingress.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
)
1414

1515
// SetupIngressController sets up the NGINX Ingress Controller
16-
func SetupIngressController(ctx *pulumi.Context, cluster *providers.ProviderInfo, environment string) error {
16+
func SetupIngressController(ctx *pulumi.Context, cluster *providers.ProviderInfo, environment string) (*helm.Chart, error) {
1717
conf := config.New(ctx, "mcp-registry")
1818
provider := conf.Get("provider")
1919
if provider == "" {
@@ -27,7 +27,7 @@ func SetupIngressController(ctx *pulumi.Context, cluster *providers.ProviderInfo
2727
},
2828
}, pulumi.Provider(cluster.Provider))
2929
if err != nil {
30-
return err
30+
return nil, err
3131
}
3232

3333
// Install NGINX Ingress Controller
@@ -60,7 +60,7 @@ func SetupIngressController(ctx *pulumi.Context, cluster *providers.ProviderInfo
6060
},
6161
}, pulumi.Provider(cluster.Provider))
6262
if err != nil {
63-
return err
63+
return nil, err
6464
}
6565

6666
// Extract ingress IPs from the Helm chart's controller service
@@ -90,5 +90,5 @@ func SetupIngressController(ctx *pulumi.Context, cluster *providers.ProviderInfo
9090
})
9191
ctx.Export("ingressIps", ingressIps)
9292

93-
return nil
93+
return ingressNginx, nil
9494
}

deploy/pkg/k8s/postgres.go

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package k8s
22

33
import (
44
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/apiextensions"
5+
corev1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/core/v1"
56
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/helm/v3"
67
metav1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1"
78
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
@@ -11,20 +12,36 @@ import (
1112

1213
// DeployPostgresDatabases deploys the CloudNative PostgreSQL operator and PostgreSQL cluster
1314
func DeployPostgresDatabases(ctx *pulumi.Context, cluster *providers.ProviderInfo, environment string) (*apiextensions.CustomResource, error) {
15+
// Create cnpg-system namespace
16+
cnpgNamespace, err := corev1.NewNamespace(ctx, "cnpg-system", &corev1.NamespaceArgs{
17+
Metadata: &metav1.ObjectMetaArgs{
18+
Name: pulumi.String("cnpg-system"),
19+
},
20+
}, pulumi.Provider(cluster.Provider))
21+
if err != nil {
22+
return nil, err
23+
}
24+
1425
// Install cloudnative-pg Helm chart
1526
cloudNativePG, err := helm.NewChart(ctx, "cloudnative-pg", helm.ChartArgs{
1627
Chart: pulumi.String("cloudnative-pg"),
1728
Version: pulumi.String("v0.26.0"),
1829
FetchArgs: helm.FetchArgs{
1930
Repo: pulumi.String("https://cloudnative-pg.github.io/charts"),
2031
},
21-
Namespace: pulumi.String("cnpg-system"),
32+
Namespace: cnpgNamespace.Metadata.Name().Elem(),
33+
Values: pulumi.Map{
34+
"webhooks": pulumi.Map{
35+
"replicaCount": pulumi.Int(1),
36+
},
37+
},
2238
}, pulumi.Provider(cluster.Provider))
2339
if err != nil {
2440
return nil, err
2541
}
2642

27-
// Create PostgreSQL cluster
43+
// Create PostgreSQL cluster with proper timeout handling
44+
// Note: This may fail on first run until CloudNativePG operator is fully ready
2845
pgCluster, err := apiextensions.NewCustomResource(ctx, "registry-pg", &apiextensions.CustomResourceArgs{
2946
ApiVersion: pulumi.String("postgresql.cnpg.io/v1"),
3047
Kind: pulumi.String("Cluster"),
@@ -36,15 +53,15 @@ func DeployPostgresDatabases(ctx *pulumi.Context, cluster *providers.ProviderInf
3653
"environment": pulumi.String(environment),
3754
},
3855
},
39-
OtherFields: map[string]interface{}{
40-
"spec": map[string]interface{}{
56+
OtherFields: map[string]any{
57+
"spec": map[string]any{
4158
"instances": 1,
42-
"storage": map[string]interface{}{
59+
"storage": map[string]any{
4360
"size": "50Gi",
4461
},
4562
},
4663
},
47-
}, pulumi.Provider(cluster.Provider), pulumi.DependsOn([]pulumi.Resource{cloudNativePG}))
64+
}, pulumi.Provider(cluster.Provider), pulumi.DependsOnInputs(cloudNativePG.Ready))
4865
if err != nil {
4966
return nil, err
5067
}

deploy/pkg/k8s/registry.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import (
44
"os/exec"
55
"strings"
66

7-
v1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/apps/v1"
87
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/apiextensions"
8+
v1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/apps/v1"
99
corev1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/core/v1"
10+
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/helm/v3"
1011
metav1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1"
1112
networkingv1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/networking/v1"
1213
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
@@ -27,7 +28,7 @@ func getGitCommitHash() string {
2728
}
2829

2930
// DeployMCPRegistry deploys the MCP Registry to the Kubernetes cluster
30-
func DeployMCPRegistry(ctx *pulumi.Context, cluster *providers.ProviderInfo, environment string, pgCluster *apiextensions.CustomResource) (*corev1.Service, error) {
31+
func DeployMCPRegistry(ctx *pulumi.Context, cluster *providers.ProviderInfo, environment string, ingressNginx *helm.Chart, pgCluster *apiextensions.CustomResource) (*corev1.Service, error) {
3132
conf := config.New(ctx, "mcp-registry")
3233
githubClientId := conf.Require("githubClientId")
3334

@@ -95,8 +96,11 @@ func DeployMCPRegistry(ctx *pulumi.Context, cluster *providers.ProviderInfo, env
9596
Name: pulumi.String("MCP_REGISTRY_DATABASE_URL"),
9697
ValueFrom: &corev1.EnvVarSourceArgs{
9798
SecretKeyRef: &corev1.SecretKeySelectorArgs{
98-
Name: pgCluster.Metadata.Name().ApplyT(func(name string) string {
99-
return name + "-app"
99+
Name: pgCluster.Metadata.Name().ApplyT(func(name *string) string {
100+
if name == nil {
101+
return "registry-pg-app"
102+
}
103+
return *name + "-app"
100104
}).(pulumi.StringOutput),
101105
Key: pulumi.String("uri"),
102106
},
@@ -235,7 +239,7 @@ func DeployMCPRegistry(ctx *pulumi.Context, cluster *providers.ProviderInfo, env
235239
return rules
236240
}).(networkingv1.IngressRuleArrayOutput),
237241
},
238-
}, pulumi.Provider(cluster.Provider))
242+
}, pulumi.Provider(cluster.Provider), pulumi.DependsOnInputs(ingressNginx.Ready))
239243
if err != nil {
240244
return nil, err
241245
}

0 commit comments

Comments
 (0)