| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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"
- )
- // HandleCreateDNSRecord creates a new DNS record
- 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
- }
- _record := domain.DNSRecord(*record)
- err = _record.CreateDomain(app.IngressAgent.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
- }
- }
|