{"id":24637943,"url":"https://github.com/upbound/platform-ref-azure","last_synced_at":"2026-01-29T12:09:52.876Z","repository":{"id":41828196,"uuid":"438854044","full_name":"upbound/platform-ref-azure","owner":"upbound","description":"Upbound's reference platform for Microsoft Azure services with Crossplane","archived":false,"fork":false,"pushed_at":"2025-03-17T23:30:36.000Z","size":1310,"stargazers_count":17,"open_issues_count":6,"forks_count":16,"subscribers_count":18,"default_branch":"main","last_synced_at":"2025-03-18T00:29:28.187Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/upbound.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-16T03:58:55.000Z","updated_at":"2025-03-10T12:48:02.000Z","dependencies_parsed_at":"2024-04-04T14:01:33.174Z","dependency_job_id":"d9c13ecc-8f24-482d-ae00-7ac8e6ff3cb1","html_url":"https://github.com/upbound/platform-ref-azure","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fplatform-ref-azure","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fplatform-ref-azure/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fplatform-ref-azure/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upbound%2Fplatform-ref-azure/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upbound","download_url":"https://codeload.github.com/upbound/platform-ref-azure/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244584452,"owners_count":20476549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-25T10:12:36.443Z","updated_at":"2026-01-29T12:09:52.869Z","avatar_url":"https://github.com/upbound.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Azure Reference Platform\n\nThis repository contains a reference Azure Platform Configuration for\n[Crossplane](https://crossplane.io/) built with [Upbound DevEx](https://docs.upbound.io/devex/). It's a great starting point for building\ninternal cloud platforms with Azure and offer a self-service API to your internal\ndevelopment teams.\n\nThis platform offers APIs for setting up fully configured AKS clusters\nwith secure networking, stateful cloud services (MySQL Database) that can securely\nconnect to the AKS clusters, an Observability Stack, and a GitOps\nSystem. All these components are built using cloud service tools from\nthe [Official Upbound Family Azure Provider](https://marketplace.upbound.io/providers/upbound/provider-family-azure).\nApp deployments can securely connect to the infrastructure they need using secrets\ndistributed directly to the app namespace.\n\n## Architecture\n\nThis platform uses **Upbound DevEx** with:\n- **Embedded KCL Functions**: Pipeline-mode compositions with embedded KCL functions instead of external patch-and-transform\n- **Test-Driven Development**: Comprehensive composition tests and e2e tests\n- **Strong Typing**: KCL models for type-safe resource definitions\n- **Modern Workflow**: `up project build`, `up test run`, and `up composition render` commands\n\n## Overview\n\nThis reference platform outlines a specialized API for generating an AKS cluster\n([Cluster](apis/clusters/definition.yaml)) that incorporates XRs from the specified configurations:\n\n* [upbound-configuration-app](https://github.com/upbound/configuration-app)\n* [upbound-configuration-azure-database](https://github.com/upbound/configuration-azure-database)\n* [upbound-configuration-azure-aks](https://github.com/upbound/configuration-azure-aks)\n* [upbound-configuration-azure-network](https://github.com/upbound/configuration-azure-network)\n* [upbound-configuration-gitops-flux](https://github.com/upbound/configuration-gitops-flux)\n* [upbound-configuration-observability-oss](https://github.com/upbound/configuration-observability-oss)\n\n```mermaid\ngraph LR;\n    MyApp(My App)---MyCluster(XR: my-cluster);\n    MyCluster---XRD1(XRD: Cluster);\n    MyApp---MyDB(XR: my-db);\n    MyDB---XRD2(XRD: SQLInstance);\n\t\tsubgraph Configuration:upbound/platform-ref-azure;\n\t    XRD1---Composition(AKS, Network, Services);\n\t    XRD2---Composition2(Composition);\n\t\tend\n\t\tsubgraph Provider:upbound/provider-azure\n\t    Composition---Network.MRs(MRs: ResourceGroup, VirtualNetwork, Subnet);\n\t    Composition---AKS.MRs(MRs: KubernetesCluster);\n\t    Composition2---Postgres.MRs(MRs: VirtualNetworkRule, Server);\n\t\tend\n\nstyle MyApp color:#000,fill:#e6e6e6,stroke:#000,stroke-width:2px\nstyle MyCluster color:#000,fill:#D68A82,stroke:#000,stroke-width:2px\nstyle MyDB color:#000,fill:#D68A82,stroke:#000,stroke-width:2px\nstyle Configuration:upbound/platform-ref-azure fill:#f1d16d,opacity:0.3\nstyle Provider:upbound/provider-azure fill:#81CABB,opacity:0.3\nstyle XRD1 color:#000,fill:#f1d16d,stroke:#000,stroke-width:2px,stroke-dasharray: 5 5\nstyle XRD2 color:#000,fill:#f1d16d,stroke:#000,stroke-width:2px,stroke-dasharray: 5 5\nstyle Composition color:#000,fill:#f1d16d,stroke:#000,stroke-width:2px\nstyle Composition2 color:#000,fill:#f1d16d,stroke:#000,stroke-width:2px\n\nstyle Network.MRs color:#000,fill:#81CABB,stroke:#000,stroke-width:2px\nstyle AKS.MRs color:#000,fill:#81CABB,stroke:#000,stroke-width:2px\nstyle Postgres.MRs color:#000,fill:#81CABB,stroke:#000,stroke-width:2px\n```\n\nLearn more about Composite Resources in the [Crossplane\nDocs](https://docs.crossplane.io/latest/composition/compositions/).\n\n## Quickstart\n\n### Installation\n\nInstall this platform from the [Upbound Marketplace](https://marketplace.upbound.io/configurations/upbound/platform-ref-azure/):\n\n```console\nup ctp configuration install xpkg.upbound.io/upbound/platform-ref-azure:v0.12.0\n```\n\n### Development Workflow\n\nThis platform uses **Upbound DevEx** for modern development:\n\n```console\n# Build the project and compile KCL functions\nup project build\n\n# Run composition tests\nup test run tests/*\n\n# Render compositions with examples\nup composition render apis/clusters/definition.yaml apis/clusters/composition.yaml examples/cluster-xr.yaml\n```\n\n## Using the Platform\n\nOnce installed, you can create platform resources using the provided examples:\n\n```console\n# Create a cluster with networking, observability, and GitOps\nkubectl apply -f examples/cluster-xr.yaml\n\n# Create a MySQL database\nkubectl apply -f examples/mysql-xr.yaml\n\n# Deploy a sample application\nkubectl apply -f examples/app-xr.yaml\n```\n\nMonitor deployment status:\n\n```console\nkubectl get composite,managed\n```\n\n### Accessing Your Application\n\nOnce your Ghost application is deployed, you can access it using one of these methods:\n\n#### Option 1: Via LoadBalancer (External IP)\n\nGet the AKS cluster kubeconfig and access Ghost:\n\n```bash\n# Get the kubeconfig from the AKS connection secret\nkubectl get secret \u003ccluster-id\u003e-akscluster -n default -o jsonpath='{.data.kubeconfig}' | base64 -d \u003e /tmp/aks-kubeconfig\n\n# Use the AKS kubeconfig to check Ghost service\nexport KUBECONFIG=/tmp/aks-kubeconfig\nkubectl get svc -n ghost -l app.kubernetes.io/name=ghost\nkubectl get pods -n ghost\n\n# Get the external IP\nEXTERNAL_IP=$(kubectl get svc -n ghost -l app.kubernetes.io/name=ghost -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')\necho \"Ghost Frontend: http://$EXTERNAL_IP\"\necho \"Ghost Admin: http://$EXTERNAL_IP/ghost\"\n```\n\nThen access:\n- **Frontend**: `http://\u003cEXTERNAL-IP\u003e` (Your blog)\n- **Admin**: `http://\u003cEXTERNAL-IP\u003e/ghost` (Admin interface)\n\nYou should see the Ghost admin login screen with \"Upbound Rocks!\" confirming your deployment:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/ghost-admin.png\" width=\"500\" alt=\"Ghost Admin Interface showing Upbound Rocks!\"\u003e\n\u003c/p\u003e\n\n#### Option 2: Via kubectl port-forward (No external IP needed)\n\n```bash\n# Get the kubeconfig\nkubectl get secret \u003ccluster-id\u003e-akscluster -n default -o jsonpath='{.data.kubeconfig}' | base64 -d \u003e /tmp/aks-kubeconfig\nexport KUBECONFIG=/tmp/aks-kubeconfig\n\n# Forward Ghost service to local port 8080\nkubectl port-forward -n ghost svc/$(kubectl get svc -n ghost -l app.kubernetes.io/name=ghost -o jsonpath='{.items[0].metadata.name}') 8080:80\n\n# Access in browser\nopen http://localhost:8080          # Frontend\nopen http://localhost:8080/ghost    # Admin interface\n```\n\n**Reset KUBECONFIG** when done:\n\n```bash\nunset KUBECONFIG\n# or\nexport KUBECONFIG=~/.kube/config\n```\n\n## Development\n\n### Testing\n\n```console\n# Run composition tests\nup test run tests/*\n\n# Run end-to-end tests\nup test run tests/* --e2e\n```\n\n### Building and Publishing\n\n```console\n# Build the project\nup project build\n\n# Deploy locally\nup project run\n```\n\nFor publishing to the marketplace, see the [Upbound documentation](https://docs.upbound.io/devex/).\n\n## Next Steps\n\n- Explore the [examples](examples/) directory for usage patterns\n- Check out the [Upbound DevEx documentation](https://docs.upbound.io/devex/) for advanced features\n- Join the [Crossplane Slack](https://slack.crossplane.io) community","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fupbound%2Fplatform-ref-azure","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fupbound%2Fplatform-ref-azure","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fupbound%2Fplatform-ref-azure/lists"}