2024-11-21 16:21:25 +00:00
|
|
|
|
package resources
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"fmt"
|
|
|
|
|
"net/url"
|
|
|
|
|
|
|
|
|
|
"github.com/databricks/cli/libs/log"
|
|
|
|
|
"github.com/databricks/databricks-sdk-go"
|
|
|
|
|
"github.com/databricks/databricks-sdk-go/marshal"
|
|
|
|
|
"github.com/databricks/databricks-sdk-go/service/apps"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type App struct {
|
|
|
|
|
// This represents the id which is the name of the app that can be used
|
|
|
|
|
// as a reference in other resources. This value is returned by terraform.
|
2024-12-05 14:40:34 +00:00
|
|
|
|
// This equals to app name and added for symmetry with other resources.
|
2024-11-21 16:21:25 +00:00
|
|
|
|
ID string `json:"id,omitempty" bundle:"readonly"`
|
|
|
|
|
|
|
|
|
|
// SourceCodePath is a required field used by DABs to point databricks app source code
|
|
|
|
|
// on local disk and use it to point to this source code in the app deployment
|
|
|
|
|
SourceCodePath string `json:"source_code_path"`
|
|
|
|
|
|
|
|
|
|
// Config is an optional field which allows configuring the app following Databricks app configuration format like in app.yml.
|
|
|
|
|
// When this field is set, DABs read the configuration set in this field and write
|
|
|
|
|
// it to app.yml in the root of the source code folder in Databricks workspace.
|
2024-12-05 14:40:34 +00:00
|
|
|
|
// If there’s app.yml defined locally, DABs will raise an error.
|
2024-11-21 16:21:25 +00:00
|
|
|
|
Config map[string]interface{} `json:"config,omitempty"`
|
|
|
|
|
|
|
|
|
|
Permissions []Permission `json:"permissions,omitempty"`
|
|
|
|
|
ModifiedStatus ModifiedStatus `json:"modified_status,omitempty" bundle:"internal"`
|
|
|
|
|
URL string `json:"url,omitempty" bundle:"internal"`
|
|
|
|
|
|
|
|
|
|
*apps.App
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) UnmarshalJSON(b []byte) error {
|
|
|
|
|
return marshal.Unmarshal(b, a)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a App) MarshalJSON() ([]byte, error) {
|
|
|
|
|
return marshal.Marshal(a)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) Exists(ctx context.Context, w *databricks.WorkspaceClient, name string) (bool, error) {
|
|
|
|
|
_, err := w.Apps.GetByName(ctx, name)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Debugf(ctx, "app %s does not exist", name)
|
|
|
|
|
return false, err
|
|
|
|
|
}
|
|
|
|
|
return true, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) TerraformResourceName() string {
|
2024-12-02 15:04:46 +00:00
|
|
|
|
return "databricks_app"
|
2024-11-21 16:21:25 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) InitializeURL(baseURL url.URL) {
|
|
|
|
|
if a.ID == "" {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
baseURL.Path = fmt.Sprintf("apps/%s", a.ID)
|
|
|
|
|
a.URL = baseURL.String()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) GetName() string {
|
|
|
|
|
return a.Name
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) GetURL() string {
|
|
|
|
|
return a.URL
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) IsNil() bool {
|
|
|
|
|
return a.App == nil
|
|
|
|
|
}
|