generated from caicloud/golang-template-project
-
Notifications
You must be signed in to change notification settings - Fork 61
/
ormb.go
135 lines (113 loc) · 2.5 KB
/
ormb.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package ormb
import (
"os"
"path/filepath"
"github.com/kleveross/ormb/pkg/exporter"
"github.com/kleveross/ormb/pkg/oci"
"github.com/kleveross/ormb/pkg/oras"
"github.com/kleveross/ormb/pkg/saver"
)
// Interface is the interface to manage
// models with a remote registry.
type Interface interface {
Login(hostname, username, password string, insecureOpt bool) error
Push(refStr string) error
Pull(refStr string) error
Export(refStr, dst string) error
Save(src, refStr string) error
Tag(refStr, targetStr string) error
Remove(refStr string) error
Models() error
}
type ORMB struct {
client oras.Interface
saver saver.Interface
exporter exporter.Interface
}
// New creates a OCI-based ORMB client.
func New(opts ...oras.ClientOption) (Interface, error) {
c, err := oras.NewClient(opts...)
if err != nil {
return nil, err
}
return &ORMB{
client: c,
saver: saver.New(),
exporter: exporter.New(),
}, nil
}
func (o ORMB) Login(hostname, username, password string, insecureOpt bool) error {
return o.client.Login(hostname, username, password, insecureOpt)
}
func (o ORMB) Push(refStr string) error {
ref, err := oci.ParseReference(refStr)
if err != nil {
return err
}
return o.client.PushModel(ref)
}
func (o ORMB) Pull(refStr string) error {
ref, err := oci.ParseReference(refStr)
if err != nil {
return err
}
return o.client.PullModel(ref)
}
func (o ORMB) Tag(refStr, targetStr string) error {
ref, err := oci.ParseReference(refStr)
if err != nil {
return err
}
target, err := oci.ParseReference(targetStr)
if err != nil {
return err
}
return o.client.TagModel(ref, target)
}
func (o ORMB) Export(refStr, dst string) error {
path, err := filepath.Abs(dst)
if err != nil {
return err
}
err = os.MkdirAll(path, os.ModePerm)
if err != nil {
return err
}
ref, err := oci.ParseReference(refStr)
if err != nil {
return err
}
m, err := o.client.LoadModel(ref)
if err != nil {
return err
}
if _, err := o.exporter.Export(m, path); err != nil {
return err
}
return nil
}
func (o ORMB) Save(src, refStr string) error {
path, err := filepath.Abs(src)
if err != nil {
return err
}
ref, err := oci.ParseReference(refStr)
if err != nil {
return err
}
m, err := o.saver.Save(path)
if err != nil {
return err
}
return o.client.SaveModel(m, ref)
}
func (o ORMB) Remove(refStr string) error {
ref, err := oci.ParseReference(refStr)
if err != nil {
return err
}
return o.client.RemoveModel(ref)
}
func (o ORMB) Models() error {
return o.client.Models()
}