|
@@ -158,6 +158,19 @@ var PullImageErrNotFound = fmt.Errorf("Requested image not found")
|
|
|
|
|
|
|
|
var PullImageErrUnauthorized = fmt.Errorf("Could not pull image: unauthorized")
|
|
var PullImageErrUnauthorized = fmt.Errorf("Could not pull image: unauthorized")
|
|
|
|
|
|
|
|
|
|
+// CheckIfImageExists checks if the image exists in the registry
|
|
|
|
|
+func (a *Agent) CheckIfImageExists(image string) error {
|
|
|
|
|
+ encodedRegistryAuth, err := a.getEncodedRegistryAuth(image)
|
|
|
|
|
+
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ _, err = a.client.DistributionInspect(context.Background(), image, encodedRegistryAuth)
|
|
|
|
|
+
|
|
|
|
|
+ return err
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// PullImage pulls an image specified by the image string
|
|
// PullImage pulls an image specified by the image string
|
|
|
func (a *Agent) PullImage(image string) error {
|
|
func (a *Agent) PullImage(image string) error {
|
|
|
opts, err := a.getPullOptions(image)
|
|
opts, err := a.getPullOptions(image)
|
|
@@ -219,17 +232,30 @@ func (a *Agent) getPullOptions(image string) (types.ImagePullOptions, error) {
|
|
|
return types.ImagePullOptions{}, nil
|
|
return types.ImagePullOptions{}, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ authConfigEncoded, err := a.getEncodedRegistryAuth(image)
|
|
|
|
|
+
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return types.ImagePullOptions{}, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return types.ImagePullOptions{
|
|
|
|
|
+ RegistryAuth: authConfigEncoded,
|
|
|
|
|
+ Platform: "linux/amd64",
|
|
|
|
|
+ }, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (a *Agent) getEncodedRegistryAuth(image string) (string, error) {
|
|
|
// get using server url
|
|
// get using server url
|
|
|
serverURL, err := GetServerURLFromTag(image)
|
|
serverURL, err := GetServerURLFromTag(image)
|
|
|
|
|
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return types.ImagePullOptions{}, err
|
|
|
|
|
|
|
+ return "", err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
user, secret, err := a.authGetter.GetCredentials(serverURL)
|
|
user, secret, err := a.authGetter.GetCredentials(serverURL)
|
|
|
|
|
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return types.ImagePullOptions{}, err
|
|
|
|
|
|
|
+ return "", err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
var authConfig = types.AuthConfig{
|
|
var authConfig = types.AuthConfig{
|
|
@@ -239,12 +265,8 @@ func (a *Agent) getPullOptions(image string) (types.ImagePullOptions, error) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
authConfigBytes, _ := json.Marshal(authConfig)
|
|
authConfigBytes, _ := json.Marshal(authConfig)
|
|
|
- authConfigEncoded := base64.URLEncoding.EncodeToString(authConfigBytes)
|
|
|
|
|
|
|
|
|
|
- return types.ImagePullOptions{
|
|
|
|
|
- RegistryAuth: authConfigEncoded,
|
|
|
|
|
- Platform: "linux/amd64",
|
|
|
|
|
- }, nil
|
|
|
|
|
|
|
+ return base64.URLEncoding.EncodeToString(authConfigBytes), nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (a *Agent) getPushOptions(image string) (types.ImagePushOptions, error) {
|
|
func (a *Agent) getPushOptions(image string) (types.ImagePushOptions, error) {
|