forked from containers/podman
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add podman manifest exists command with remote support. Signed-off-by: Paul Holzinger <[email protected]>
- Loading branch information
Paul Holzinger
authored and
Achilleas Tzenetopoulos
committed
Jan 26, 2021
1 parent
01e62c7
commit 496180d
Showing
14 changed files
with
276 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package manifest | ||
|
||
import ( | ||
"github.com/containers/podman/v2/cmd/podman/common" | ||
"github.com/containers/podman/v2/cmd/podman/registry" | ||
"github.com/containers/podman/v2/pkg/domain/entities" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var ( | ||
existsCmd = &cobra.Command{ | ||
Use: "exists MANIFEST", | ||
Short: "Check if a manifest list exists in local storage", | ||
Long: `If the manifest list exists in local storage, podman manifest exists exits with 0, otherwise the exit code will be 1.`, | ||
Args: cobra.ExactArgs(1), | ||
RunE: exists, | ||
ValidArgsFunction: common.AutocompleteImages, | ||
Example: "podman manifest exists mylist", | ||
} | ||
) | ||
|
||
func init() { | ||
registry.Commands = append(registry.Commands, registry.CliCommand{ | ||
Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode}, | ||
Command: existsCmd, | ||
Parent: manifestCmd, | ||
}) | ||
} | ||
|
||
func exists(cmd *cobra.Command, args []string) error { | ||
found, err := registry.ImageEngine().ManifestExists(registry.GetContext(), args[0]) | ||
if err != nil { | ||
return err | ||
} | ||
if !found.Value { | ||
registry.SetExitCode(1) | ||
} | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
% podman-manifest-exists(1) | ||
|
||
## NAME | ||
podman\-manifest\-exists - Check if the given manifest list exists in local storage | ||
|
||
## SYNOPSIS | ||
**podman manifest exists** *manifest* | ||
|
||
## DESCRIPTION | ||
**podman manifest exists** checks if a manifest list exists on local storage. Podman will | ||
return an exit code of `0` when the manifest is found. A `1` will be returned otherwise. | ||
An exit code of `125` indicates there was another issue. | ||
|
||
|
||
## OPTIONS | ||
|
||
#### **--help**, **-h** | ||
|
||
Print usage statement. | ||
|
||
## EXAMPLE | ||
|
||
Check if a manifest list called `list1` exists (the manifest list does actually exist). | ||
``` | ||
$ podman manifest exists list1 | ||
$ echo $? | ||
0 | ||
$ | ||
``` | ||
|
||
Check if an manifest called `mylist` exists (the manifest list does not actually exist). | ||
``` | ||
$ podman manifest exists mylist | ||
$ echo $? | ||
1 | ||
$ | ||
``` | ||
|
||
## SEE ALSO | ||
podman(1), podman-manifest-create(1), podman-manifest-remove(1) | ||
|
||
## HISTORY | ||
January 2021, Originally compiled by Paul Holzinger `<[email protected]>` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package manifests | ||
|
||
import ( | ||
"net/url" | ||
"reflect" | ||
"strconv" | ||
"strings" | ||
|
||
jsoniter "github.com/json-iterator/go" | ||
"github.com/pkg/errors" | ||
) | ||
|
||
/* | ||
This file is generated automatically by go generate. Do not edit. | ||
*/ | ||
|
||
// Changed | ||
func (o *ExistsOptions) Changed(fieldName string) bool { | ||
r := reflect.ValueOf(o) | ||
value := reflect.Indirect(r).FieldByName(fieldName) | ||
return !value.IsNil() | ||
} | ||
|
||
// ToParams | ||
func (o *ExistsOptions) ToParams() (url.Values, error) { | ||
params := url.Values{} | ||
if o == nil { | ||
return params, nil | ||
} | ||
json := jsoniter.ConfigCompatibleWithStandardLibrary | ||
s := reflect.ValueOf(o) | ||
if reflect.Ptr == s.Kind() { | ||
s = s.Elem() | ||
} | ||
sType := s.Type() | ||
for i := 0; i < s.NumField(); i++ { | ||
fieldName := sType.Field(i).Name | ||
if !o.Changed(fieldName) { | ||
continue | ||
} | ||
fieldName = strings.ToLower(fieldName) | ||
f := s.Field(i) | ||
if reflect.Ptr == f.Kind() { | ||
f = f.Elem() | ||
} | ||
switch f.Kind() { | ||
case reflect.Bool: | ||
params.Set(fieldName, strconv.FormatBool(f.Bool())) | ||
case reflect.String: | ||
params.Set(fieldName, f.String()) | ||
case reflect.Int, reflect.Int64: | ||
// f.Int() is always an int64 | ||
params.Set(fieldName, strconv.FormatInt(f.Int(), 10)) | ||
case reflect.Uint, reflect.Uint64: | ||
// f.Uint() is always an uint64 | ||
params.Set(fieldName, strconv.FormatUint(f.Uint(), 10)) | ||
case reflect.Slice: | ||
typ := reflect.TypeOf(f.Interface()).Elem() | ||
switch typ.Kind() { | ||
case reflect.String: | ||
sl := f.Slice(0, f.Len()) | ||
s, ok := sl.Interface().([]string) | ||
if !ok { | ||
return nil, errors.New("failed to convert to string slice") | ||
} | ||
for _, val := range s { | ||
params.Add(fieldName, val) | ||
} | ||
default: | ||
return nil, errors.Errorf("unknown slice type %s", f.Kind().String()) | ||
} | ||
case reflect.Map: | ||
lowerCaseKeys := make(map[string][]string) | ||
iter := f.MapRange() | ||
for iter.Next() { | ||
lowerCaseKeys[iter.Key().Interface().(string)] = iter.Value().Interface().([]string) | ||
|
||
} | ||
s, err := json.MarshalToString(lowerCaseKeys) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
params.Set(fieldName, s) | ||
} | ||
} | ||
return params, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters