|
|
@@ -0,0 +1,74 @@
|
|
|
+package ds_sdk
|
|
|
+
|
|
|
+import (
|
|
|
+ "git.sxidc.com/service-supports/ds-sdk/client"
|
|
|
+)
|
|
|
+
|
|
|
+var sdkInstance *SDK
|
|
|
+
|
|
|
+func InitInstance(token string, baseUrl string, namespace string, opts ...Option) error {
|
|
|
+ sdk, err := New(token, baseUrl, namespace, opts...)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ sdkInstance = sdk
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func GetInstance() *SDK {
|
|
|
+ return sdkInstance
|
|
|
+}
|
|
|
+
|
|
|
+type SDK struct {
|
|
|
+ options *Options
|
|
|
+ client *client.Client
|
|
|
+}
|
|
|
+
|
|
|
+func New(token string, baseUrl string, namespace string, opts ...Option) (*SDK, error) {
|
|
|
+ options := &Options{
|
|
|
+ token: token,
|
|
|
+ baseUrl: baseUrl,
|
|
|
+ namespace: namespace,
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, opt := range opts {
|
|
|
+ opt(options)
|
|
|
+ }
|
|
|
+
|
|
|
+ c := client.New(options.timeout)
|
|
|
+
|
|
|
+ namespaceInfos, err := c.GetNamespaces(token, baseUrl, namespace)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if namespaceInfos == nil || len(namespaceInfos) == 0 {
|
|
|
+ err := c.CreateNamespace(token, baseUrl, namespace)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, dataSourceOption := range options.dataSourceMap {
|
|
|
+ dataSourceInfos, err := c.GetDataSources(token, baseUrl, namespace,
|
|
|
+ dataSourceOption.Name, dataSourceOption.Type)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if dataSourceInfos == nil || len(dataSourceInfos) == 0 {
|
|
|
+ err := c.CreateDataSource(token, baseUrl, namespace,
|
|
|
+ dataSourceOption.Name, dataSourceOption.Type, dataSourceOption.Spec)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return &SDK{
|
|
|
+ options: options,
|
|
|
+ client: c,
|
|
|
+ }, nil
|
|
|
+}
|