| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package api
- import (
- "encoding/json"
- "fmt"
- "net/http"
- "net/url"
- "github.com/porter-dev/porter/internal/forms"
- "github.com/porter-dev/porter/internal/kubernetes"
- "github.com/porter-dev/porter/internal/kubernetes/domain"
- )
- // HandleCreateProjectCluster creates a new cluster
- func (app *App) HandleCreateDNSRecord(w http.ResponseWriter, r *http.Request) {
- vals, err := url.ParseQuery(r.URL.RawQuery)
- if err != nil {
- app.handleErrorFormDecoding(err, ErrReleaseDecode, w)
- return
- }
- // get the filter options
- form := &forms.CreateDomainForm{
- K8sForm: &forms.K8sForm{
- OutOfClusterConfig: &kubernetes.OutOfClusterConfig{
- Repo: app.Repo,
- DigitalOceanOAuth: app.DOConf,
- },
- },
- }
- form.PopulateK8sOptionsFromQueryParams(vals, app.Repo.Cluster)
- if err := json.NewDecoder(r.Body).Decode(form); err != nil {
- app.handleErrorFormDecoding(err, ErrUserDecode, w)
- return
- }
- // validate the form
- if err := app.validator.Struct(form); err != nil {
- app.handleErrorFormValidation(err, ErrK8sValidate, w)
- return
- }
- // create a new agent
- var agent *kubernetes.Agent
- if app.ServerConf.IsTesting {
- agent = app.TestAgents.K8sAgent
- } else {
- agent, err = kubernetes.GetAgentOutOfClusterConfig(form.OutOfClusterConfig)
- }
- endpoint, found, err := domain.GetNGINXIngressServiceIP(agent.Clientset)
- if !found {
- app.handleErrorInternal(fmt.Errorf("target cluster does not have nginx ingress"), w)
- return
- }
- createDomain := domain.CreateDNSRecordConfig{
- ReleaseName: form.ReleaseName,
- RootDomain: app.ServerConf.AppRootDomain,
- Endpoint: endpoint,
- }
- record := createDomain.NewDNSRecordForEndpoint()
- record, err = app.Repo.DNSRecord.CreateDNSRecord(record)
- if err != nil {
- app.handleErrorDataWrite(err, w)
- return
- }
- // launch provisioning destruction pod
- inClusterAgent, err := kubernetes.GetAgentInClusterConfig()
- if err != nil {
- app.handleErrorDataRead(err, w)
- return
- }
- _record := domain.DNSRecord(*record)
- err = _record.CreateDomain(inClusterAgent.Clientset)
- if err != nil {
- app.handleErrorInternal(err, w)
- }
- w.WriteHeader(http.StatusCreated)
- if err := json.NewEncoder(w).Encode(record.Externalize()); err != nil {
- app.handleErrorFormDecoding(err, ErrK8sDecode, w)
- return
- }
- }
|