Giter Club home page Giter Club logo

radius's Introduction

Radius

Radius is a cloud-native application platform that enables developers and the platform engineers that support them to collaborate on delivering and managing cloud-native applications that follow organizational best practices for cost, operations and security, by default. Radius is an open-source project that supports deploying applications across private cloud, Microsoft Azure, and Amazon Web Services, with more cloud providers to come.

Radius is a Cloud Native Computing Foundation (CNCF) sandbox project.

Overview

The evolution of cloud computing has increased the speed of innovation for many companies, whether they are building 2 and 3-tier applications, or complex microservice-based applications. Cloud native technologies like Kubernetes have made it easier to build applications that can run anywhere. At the same time, many applications have become more complex, and managing them in the cloud increasingly difficult, as companies build cloud-native applications composed of interconnected services and deploy them to multiple public clouds and their private infrastructure. While Kubernetes is a key enabler, we see many organizations building abstractions over Kubernetes, usually focused on compute, to work around its limitations: Kubernetes has no formal definition of an application, it mingles infrastructure and application concepts and it is overwhelmingly complex. Developers also inevitably realize their applications require much more than Kubernetes, including support for dependencies like application programming interface (API) front ends, key/value stores, caches, and observability systems. Amidst these challenges for developers, their corporate IT counterparts also must enforce an ever-growing matrix of corporate standards, compliance, and security requirements, while enabling rapid application innovation.

Radius was designed to address these distinct but related challenges that arise across development and operations as companies continue their journey to cloud. Radius meets application teams where they are by supporting proven technologies like Kubernetes, existing infrastructure tools including Terraform and Bicep and by integrating with existing CI/CD systems like GitHub Actions. Radius supports multi-tier web-plus-data to complex microservice applications like eShop, a popular cloud reference application from Microsoft.

Key features of the Radius platform include:

  • Team Collaboration: Radius Applications and Environments allow developers to work with Operations on application definition and delivery.
  • Infrastructure Recipes: Swappable infrastructure that complies with organization best practices and IT policy be default.
  • Application Graph: Understand how services and infrastructure in an application are interconnected.
  • Cloud Neutral: Deploy across development, on-premises and cloud environments with a consistent experience.
  • Incremental Adoption: Integrate Radius into existing workflows and existing catalogs of Infrastructure-as-Code templates.

Release status

This is an early release of Radius which enables the community to learn about and experiment with the platform. Please let us know what you think and open Issues when you find bugs or want to request a new feature. Radius is not yet ready for production workloads.

Getting started

  1. Follow the getting started guide to install and try out Radius
  2. Visit the Tutorials and User Guides to learn more about Radius and start radifying your apps

Getting help

  • Have a question? - Visit our Discord server to post your question and we'll get back to you ASAP
  • ⚠️ Found an issue? - Refer to our Issues guide for instructions on filing a bug report
  • 💡 Have a proposal? - Refer to our Issues guide for instructions on filing a feature request

Community

We welcome your contributions and suggestions! One of the easiest ways to contribute is to participate in Issue discussions, chat on Discord server or the monthly community calls. For more information on the community engagement, developer and contributing guidelines and more, head over to the Radius community repo.

Contact us

Please visit our Discord server to contact us and we'll get back to you ASAP.

Community calls

Every month we host a community call to showcase new features, review upcoming milestones, and engage in a Q&A. All are welcome!

📞 Visit our community meetings page for upcoming dates and the meeting link.

Contributing to Radius

Visit Contributing for more information on how to contribute to Radius. To author Radius Recipes visit Author Custom Radius Recipes. To contribute to Radius documentation visit Radius documentation

Repositories

Radius is the main Radius repository. It contains all of Radius code and documentation. In addition, we have the below repositories.

Repo Description
Docs This repository contains the Radius documentation source for Radius.
Samples This repository contains the source code for quickstarts, reference apps, and tutorials for Radius.
Recipes This repo contains commonly used Recipe templates for Radius Environments.
Website This repository contains the source code for the Radius website.
Bicep This repository contains source code for Bicep, which is a DSL for deploying cloud resources types.
AWS Bicep Types This repository contains the tooling for Bicep support for AWS resource types.

Security

Please refer to our guide on Reporting security vulnerabilities

Code of conduct

Please refer to our Radius Community Code of Conduct

radius's People

Contributors

aaroncrawfis avatar aliu-pomme avatar amanbha avatar asilverman avatar bjoginapally avatar dependabot[bot] avatar emily-potyraj avatar farazmsiddiqi avatar gpltaylor avatar jkotalik avatar kachawla avatar karolz-ms avatar lakshmimsft avatar lechnerc77 avatar mhaveliwala1 avatar microsoftopensource avatar mishrapratikshya avatar nicolejms avatar nithyatsu avatar rynowak avatar shalabhms avatar shriraml-ms avatar sk593 avatar snehabandla avatar tcnghia avatar vinayada1 avatar vishwahiremat avatar willdavsmith avatar willtsai avatar ytimocin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

radius's Issues

Create tutorial content for Dapr microservices scenario

Create a tutorial style walkthrough of authoring radius assets and performing deployment of a Dapr microservices application.

The application should contain at least 3 compute resources

The application should use the "Dapr Managed State Store" and "Dapr Managed Pub/Sub" style

The application should have one of the components exposed to the internet for testing

It should be possible to go from zero knowledge of Radius, author the assets yourself and deploy a working application by following this tutorial.

When this is ready we'll share this with internal stakeholders for feedback

Add support for Azure keyvault

We should add support for key vault:

  • Ability to deploy a keyvault instance
  • Ability to store keys for a service (connection string) in keyvault via depends on
  • Ability to access keyvault via depends on

Error during deployment using new subscription

Tried a deployment using the newly created dev subscription and getting this error:-

Details=[{"code":"Conflict","message":"{\r\n "status": "failed",\r\n "error": {\r\n "code": "ResourceDeploymentFailure",\r\n "message": "The resource operation completed with terminal provisioning state 'failed'.",\r\n "details": [\r\n {\r\n "code": "DeploymentScriptOperationFailed",\r\n "message": "The client 'xxxxxx' with object id 'xxxxxx' does not have authorization to perform action 'Microsoft.ContainerInstance/register/action' over scope '/subscriptions/xxxxxxx' or the scope is invalid. If access was recently granted, please refresh your credentials."\r\n }\r\n ]\r\n }\r\n}"}]error encountered: Code="DeploymentFailed" Message="At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details."

Tried creating a new service principal but still see this.

rad --version

We should add a rad --version

This should output the build version (or EDGE) as well as the git SHA it's based on.

Ideally this would be plaintext not JSON, but using kubectl as an example of how detailed this could be (we don't need all of this).

Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.1", GitCommit:"c4d752765b3bbac2237bf87cf0b1c2e307844666", GitTreeState:"clean", BuildDate:"2020-12-19T07:38:38Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"darwin/amd64"}

Error in using kubectl during environment setup

Absolute madlad @msfussell managed to get kubectl to crash during the runtime setup process.

error encountered: Code="DeploymentFailed" Message="At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details." 



Details=[{​​​​​​​​"code":"Conflict","message":"{​​​​​​​​  \"status\": \"failed\",
  \"error\": {​​​​​​​​
    \"code\": \"ResourceDeploymentFailure\",
    \"message\": \"The resource operation completed with terminal provisioning state 'failed'.\",
    \"details\": [
      {​​​​​​​​
        \"code\": \"DeploymentScriptError\",
        \"message\": \"The provided script failed with multiple errors. First error:\\r\\n+ [[ 2 -ne 2 ]]. Please refer to https://aka.ms/DeploymentScriptsTroubleshoot for more deployment script information.\",
        \"details\": [
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ [[ 2 -ne 2 ]]\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ RESOURCE_GROUP=mfussellradius\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ CLUSTER_NAME=radius-aks-aqwwvi7bfe7v2\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ az aks get-credentials --name radius-aks-aqwwvi7bfe7v2 --resource-group mfussellradius\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"++ curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ KUBECTL_VERSION=v1.20.4\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.20.4/bin/linux/amd64/kubectl\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"% Total % Received % Xferd Average Speed Time Time Time Current\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"Dload Upload Total Spent Left Speed\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"100 38.3M 100 38.3M 0 0 65.1M 0 --:--:-- --:--:-- --:--:-- 65.1M\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ chmod +x ./kubectl\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ ./kubectl version --client\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"unexpected fault address 0x141c960\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"fatal error: fault\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"[signal SIGBUS: bus error code=0x2 addr=0x141c960 pc=0x141c960]\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"goroutine 1 [running, locked to thread]:\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.throw(0x1acd0cc, 0x5)\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/panic.go:1116 +0x72 fp=0xc00071fe00 sp=0xc00071fdd0 pc=0x437492\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.sigpanic()\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/signal_unix.go:739 +0x485 fp=0xc00071fe30 sp=0xc00071fe00 pc=0x44e025\"
          }​​​​​​​​,
          {​​​​​​​​
            \"code\": \"DeploymentScriptError\",
            \"message\":

kubectl crash during runtime installation

error encountered: Code="DeploymentFailed" Message="At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details." Details=[{"code":"Conflict","message":"{
  \"status\": \"failed\",
  \"error\": {
    \"code\": \"ResourceDeploymentFailure\",
    \"message\": \"The resource operation completed with terminal provisioning state 'failed'.\",
    \"details\": [
      {
        \"code\": \"DeploymentScriptError\",
        \"message\": \"The provided script failed with multiple errors. First error:\\r\\n+ [[ 2 -ne 2 ]]. Please refer to https://aka.ms/DeploymentScriptsTroubleshoot for more deployment script information.\",
        \"details\": [
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ [[ 2 -ne 2 ]]\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ RESOURCE_GROUP=rynowak-radius\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ CLUSTER_NAME=radius-aks-fvsjducqzd7sc\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ az aks get-credentials --name radius-aks-fvsjducqzd7sc --resource-group rynowak-radius\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"++ curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ KUBECTL_VERSION=v1.20.4\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.20.4/bin/linux/amd64/kubectl\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"% Total % Received % Xferd Average Speed Time Time Time Current\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"Dload Upload Total Spent Left Speed\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"18 38.3M 18 7342k 0 0 7299k 0 0:00:05 0:00:01 0:00:04 7320k\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"100 38.3M 100 38.3M 0 0 20.8M 0 0:00:01 0:00:01 --:--:-- 20.8M\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ chmod +x ./kubectl\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ ./kubectl version --client\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ bash\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"% Total % Received % Xferd Average Speed Time Time Time Current\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"Dload Upload Total Spent Left Speed\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"100 11238 100 11238 0 0 65719 0 --:--:-- --:--:-- --:--:-- 66105\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ helm version\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ /bin/bash -s 1.0.0-rc.2\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O -\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ dapr --version\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ helm repo add dapr https://dapr.github.io/helm-charts/\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ helm repo update\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ + ./kubectl apply -f -\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"cat\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ helm install dapr dapr/dapr --namespace dapr-system --version 1.0.0-rc.2\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"+ ./kubectl get pods -n dapr-system\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"unexpected fault address 0x14b8620\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"fatal error: fault\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"[signal SIGBUS: bus error code=0x2 addr=0x14b8620 pc=0x14b8620]\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"goroutine 1 [running, locked to thread]:\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.throw(0x1acd0cc, 0x5)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/panic.go:1116 +0x72 fp=0xc0006bfdd0 sp=0xc0006bfda0 pc=0x437492\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.sigpanic()\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/signal_unix.go:739 +0x485 fp=0xc0006bfe00 sp=0xc0006bfdd0 pc=0x44e025\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"k8s.io/kubernetes/vendor/k8s.io/client-go/scale/scheme.init()\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/workspace/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/client-go/scale/scheme/register.go:43 fp=0xc0006bfe08 sp=0xc0006bfe00 pc=0x14b8620\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.doInit(0x2885780)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:5652 +0x8a fp=0xc0006bfe38 sp=0xc0006bfe08 pc=0x446fca\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.doInit(0x2893140)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:5647 +0x57 fp=0xc0006bfe68 sp=0xc0006bfe38 pc=0x446f97\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.doInit(0x28979c0)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:5647 +0x57 fp=0xc0006bfe98 sp=0xc0006bfe68 pc=0x446f97\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.doInit(0x2892ce0)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:5647 +0x57 fp=0xc0006bfec8 sp=0xc0006bfe98 pc=0x446f97\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.doInit(0x2891c00)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:5647 +0x57 fp=0xc0006bfef8 sp=0xc0006bfec8 pc=0x446f97\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.doInit(0x2895b40)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:5647 +0x57 fp=0xc0006bff28 sp=0xc0006bfef8 pc=0x446f97\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.doInit(0x289a6a0)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:5647 +0x57 fp=0xc0006bff58 sp=0xc0006bff28 pc=0x446f97\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.doInit(0x288a980)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:5647 +0x57 fp=0xc0006bff88 sp=0xc0006bff58 pc=0x446f97\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.main()\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/proc.go:191 +0x1c5 fp=0xc0006bffe0 sp=0xc0006bff88 pc=0x439c45\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"runtime.goexit()\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/usr/local/go/src/runtime/asm_amd64.s:1374 +0x1 fp=0xc0006bffe8 sp=0xc0006bffe0 pc=0x46e101\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"goroutine 18 [chan receive]:\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"k8s.io/kubernetes/vendor/k8s.io/klog/v2.(*loggingT).flushDaemon(0x2a74040)\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/workspace/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/klog/v2/klog.go:1169 +0x8b\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"created by k8s.io/kubernetes/vendor/k8s.io/klog/v2.init.0\"
          },
          {
            \"code\": \"DeploymentScriptError\",
            \"message\": \"/workspace/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/vendor/k8s.io/klog/v2/klog.go:417 +0xdf\"
          }
        ]
      }
    ]
  }
}"}]

rad env delete should tell you the resource group name when it prompts you

When the CLI is going to prompt you to delete, it should include the resource group name in the output.

Current:

➜ rad env delete azure
Using config file: /Users/ryan/.rad/config.yaml
Resource group associated with the environment will be deleted. Continue deleting? [y/n]? y
Deleting resource group rynowak-radius
Waiting for delete to complete...

Proposed:

➜ rad env delete azure
Using config file: /Users/ryan/.rad/config.yaml
Resource group 'rynowak-radius' will be deleted. Continue deleting? [y/n]? y
Deleting resource group rynowak-radius
Waiting for delete to complete...

Create hosting of our assets in a publicly-accessible location

We need to produce the following assets from a build:

  • ARM template for environment setup
  • Runtime configuration script for environment setup (installs Dapr into Kubernetes)
  • Container image for control plane
  • CLI binary

All of these resources need to be hosted somewhere public. YES the container image does as well.

Currently we use a storage account elbowassests in the incubations subscription for this - we should be using a dedicated subscription, and one of the rejected names (elbow) should not appear in the URL 🤣

We should also implement some kind of basic URL-based versioning scheme here. When we hand external users the CLI we want it to use a stable version of all of the assets, not a floating version.

Improve error logging for failed deployments

Right now when we have a failure during application deployment, the error message printed will be like:

deploying application...Code="DeploymentFailed" Message="At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details." Details=

[{"code":"BadRequest","message":"{\r\n  \"error\": {\r\n    \"code\": \"DownstreamEndpointError\",\r\n    \"message\": \"The resource provider 'radius' received a non-success response 'BadRequest' from the downstream endpoint for the request 'PUT' on 'Applications/frontend-backend/Deployments/implicit'. Please refer to additional info for details.\",\r\n    \"details\": [\r\n      {\r\n        \"code\": \"Downstream\",\r\n        \"message\": \"{\\\"error\\\":{\\\"code\\\":\\\"\\\",\\\"message\\\":\\\"multiple errors: error applying workload resource map[] backend: failed to create typed patch object: .spec.ports: element 0: associative list with keys has an element that omits key field \\\\\\\"protocol\\\\\\\",error applying workload resource map[] frontend: failed to create typed patch object: .spec.ports: element 0: associative list with keys has an element that omits key field \\\\\\\"protocol\\\\\\\"\\\",\\\"target\\\":\\\"\\\"}}\"\r\n      }\r\n    ]\r\n  }\r\n}"}]

Yeah, that's right the message is a JSON string, with lots of extra encoding of quotes and newlines. It's really hard to read, and so far when team members have seen these error messages they haven't really tried to read/understand them.

We should unescape these errors and pretty-print them. This will help users report high quality issues.

AB#1128

Create tutorial content for LOB webapp scenario

Create a tutorial style walkthrough of deployment a LOB style web application using cosmosdb mongo and a containerized web front-end, accessible from the internet.

It should be possible to go from zero-knowledge of Radius to deploying a working application.

We'll share this tutorial and have internal stakeholders use the product and give feedback.

AB#7051

Deployment tests need to update the rad RP

We have integration tests for deployment now, but they have the limitation that don't deploy any changes to the RP. This is problematic because it means we don't have any guarantees about what build of the RP is running when do the tests. It might be the latest build, or it might not 🤷

We should update these tests to build the RP image, and push it somewhere, and then trigger an update on the web site.

Add management operations for applications to CLI

We need to add management operations to the rad CLI. Currently you can deploy and application and the CLI has no opinion of how you can interact with it, and you have to get out kubectl.

Importantly - we need these operations to be backed by ARM - they should use the ARM protocol and talk to our control-plane for all of this data, not directly to a Kubernetes cluster unless 100% necessary. This allows us to build the same experiences for our data types regardless of whether they are cloud data resources or compute resources.

Whomever does this work should start with a design proposal for how we're going to surface the concepts as ARM resources/operations.

For this checkpoint we need:

Applications:

  • List
  • Get (show details)
  • Delete

Components:

  • List
  • Get (show details)

Deployments:

  • List
  • Get (show details)
  • Delete

It's ok for now if the amount of detail is small. We don't need to convey the status of containers/pods in this checkpoint. That is covered by a future work item.

Add support for CosmosDB & SQL (Mongo) to control plane

Summary

We have some support for CosmosDB (Mongo) in the control plane - we also want to add the SQL variant as well.

There's some confusion about this because we got the wrong branding for the existing features. It's currently azure.com/CosmosDocumentDB but that's not the right terminology - Cosmos Document DB refers to the product as a whole, not just the Mongo support.

Description

Some notes about what we need to do (at a minimum).

  • Correct the branding of CosmosDB Mongo (suggested: azure.com/CosmosDBMongo)
  • Define MSSQL as a new binding type in the RP (suggested: microsoft.com/SQL) supporting connection strings
  • Add a new component type in the RP for CosmosDB SQL (suggested: azure.com/CosmosDBSQL) supporting the microsoft.com/SQL binding
  • Add integration test and how-to example
  • Add types to rad-bicep (ask @rynowak to help) - do this once the initial PR is merged

AB#961

Shared Radius environments

We've mostly been testing in isolation but we need to think about the UX for multiple people sharing access to the same environment.

For example would we want init to be able to attach to an existing environment?

Would we want a separate command for that?

This should result in (at a minimum) new content in the docs explaining how this works.

Gracefully handle environment deployment failure

Currently we don't update config if environment deployment fails halfway, but leave the resources created as is. This prevents user from listing and deleting the env resources from rad cli. Example below -

Env deployment failed due to internal error from AKS, which eventually did succeed, but rad cli doesn't recognize it since config wasn't updated.

Validating Subscription...
Deploying Environment...
Code="DeploymentFailed" Message="At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details." Details=[{"code":"Conflict","message":"{\r\n  \"status\": \"Failed\",\r\n  \"error\": {\r\n    \"code\": \"ResourceDeploymentFailure\",\r\n    \"message\": \"The resource operation completed with terminal provisioning state 'Failed'.\",\r\n    \"details\": [\r\n      {\r\n        \"code\": \"ReconcileEtcdBackupBlobStorageError\",\r\n        \"message\": \"AKS encountered an internal error while attempting the requested Creating operation. AKS will continuously retry the requested operation until successful or a retry timeout is hit. Check back to see if the operation requires resubmission. Correlation ID: 13f7d19a-3e62-4504-b5ee-67f68f67eaa0, Operation ID: ef6ddb72-3b6d-466d-8dc6-a6c2d3511ac7, Timestamp: 2021-03-16T04:03:14Z.\"\r\n      }\r\n    ]\r\n  }\r\n}"}]
exit status 1

Error deploying container

This is something that broke in the move as part of a rewrite of the service building code

deploying application...Code="DeploymentFailed" Message="At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details." Details=

[{"code":"BadRequest","message":"{
  \"error\": {
    \"code\": \"DownstreamEndpointError\",
    \"message\": \"The resource provider 'radius' received a non-success response 'BadRequest' from the downstream endpoint for the request 'PUT' on 'Applications/frontend-backend/Deployments/implicit'. Please refer to additional info for details.\",
    \"details\": [
      {
        \"code\": \"Downstream\",
        \"message\": \"{\\\"error\\\":{\\\"code\\\":\\\"\\\",\\\"message\\\":\\\"multiple errors: error applying workload resource map[] backend: failed to create typed patch object: .spec.ports: element 0: associative list with keys has an element that omits key field \\\\\\\"protocol\\\\\\\",error applying workload resource map[] frontend: failed to create typed patch object: .spec.ports: element 0: associative list with keys has an element that omits key field \\\\\\\"protocol\\\\\\\"\\\",\\\"target\\\":\\\"\\\"}}\"
      }
    ]
  }
}"}]

Command line experience with missing args isn't great

Running a rad command and failing to supply an argument results in a kinda lame experience:

radius on  main via 🐹 v1.16
➜ rad env delete
Using config file: /Users/ryan/.rad/config.yaml
accepts 1 arg(s), received 0

I'm supposed to put in an environment name, but if I didn't work on radius I'd have no idea 😆. I think we probably have this issue everywhere we use positional args in the CLI.

Create a single integration test for environment setup

Add an integration test for rad env init azure that can run nightly

The rationale for doing this nightly is that it's going to be slow (6-10 minutes) and we don't make changes to this area often. Basically we want to create a test that runs frequently enough so that we can know if this becomes unreliable and needs hardening.

It will be possible to queue on demand through the UI as well.

Migrate website to App Services

Static web apps isn't scaling with our requirement for 50+ users. We need to replat to App Service and setup auth to the Teams group.

Test env/setup improvements

Current end to end test runs use hardcoded cluster names in the code and share the dev subscription. To make it more reliable and less prone to manual deletes etc, we should use a separate test subscription and let the test run aks list to retrieve a cluster from the pool.

Also, would be good to automate creating the clusters in the test if none exists (will make the tests run longer but still better than letting it fail to manually create the cluster).

Implement a Radius devcontainer

This could become the easiest way for people to engage with Radius and try it out.

We'd still want the Radius VS Code extension - we can't really solve that with a dev container 😭

The idea is that we'd have the CI publish an image that's set up with:

  • az CLI
  • kubectl (for now)
  • rad CLI

This way there's no need to install anything other than the VSCode extension - you just open the container and do a tutorial there.

This could scale up if we build more kinds of samples - basically build a repo with the apps in them, and give uses the whole experience including making changes to the code. These could each be their own container.

Improve getting started for WSL

We need to walk through the process and make sure the docs cover all of the relevant things for WSL.

This needs to include:

  • Listing WSL as an option
  • How to install CLI on WSL (should be same as other OSes)
  • How to install VSCode extension on WSL (requires an extra step)

AB#1190

Improve VS Code Extension docs

We should make the VS Code extension pop from our docs, and make it clear that it's highly recommended.

  • We don't make the case that you should get the VSCode extension
  • Right now the fact that we have an extension at all is buried in the CLI docs. We should make a dedicated page and sequence it after the CLI in instructions.
  • We don't provide clear instructions about how to install it (double-clicking a VSIX doesn't work).

Implement basic environment management (list, delete, switch) in CLI

Using the CLI it should be possible to:

  • store a list of saved environments
  • remove environments
    • deleting the environment's resources
    • just remove it from the list without deleting resources
  • switch between environments (set the current environment used for other commands)

This exists in a really basic form, but we need to review what's there, add tests where it matters and make sure the structure has the right design.

Service principal generation makes rad init env azure non-idempotent

It's not possible to run rad init env azure over and over for the same resource group because AKS does not support changing service principals once created. We generate the service principal ID with a uuid right now, so it's always random.

Ultimately this means that when creating an environment fails, you cannot retry.

We should see if this can be fixed, either by generating stable service principal IDs or by detecting existing AKS instances.

Create a single integration test for application deployment

We should:

  • Centrally maintain a radius environment for automated tests
  • Add a test via gh actions that deploys and then deletes an application
  • This should run on every PR and commit
  • Commits to master should update the version of the control plane image to ensure that's what is tested

Over time we'll add more components and validations to this test to include more surface area. To start with, it's ok if this is very simple (two containers).

Figure out invoking az CLI from radius on windows

According to reports, the AZ CLI might install with a filename like az.cmd. We currently look for az.exe which may not be correct.

We should implement fallback logic and/or test this on a clean windows VM and see what gets installed.

Smarter logic for kubernetes versioning

The rad CLI will use the version hardcoded in our ARM template when creating an environment. Tagging as bug, because it results in environment setup not working depending on the location you choose when creating a resource group.

This is problematic because:

  • The version support is different from region to region
  • The version support changes over time

We should update the CLI to query the available versions in a region and select the default.

If we get requests to allow the user to configure the version in the future, then we can address that at that time.

`rad env delete` should delete all applications and environment based on tags

Currently delete environment deletes the resource group the environment belongs to, while it is unlikely that a customer would reuse a resource group across environments, there is nothing that prevents them from using an existing resource group during environment creation. We should revisit if we want to delete based on tags instead of entire resource group or make it a strict 1-1 mapping between resource group and environment.

AB#994

rad env init azure does not work on the OCTO tenant

When @AaronCrawfis was trying to set up an environment we ran into an authentication error using the OCTO AD/Azure tenant.

We haven't done testing of this kind, we need to understand is this is a limitation we can solve or not, and either provide a clearer error or fix the issue.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.