github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/pkg/domain/infra/abi/secrets.go (about) 1 package abi 2 3 import ( 4 "context" 5 "io" 6 "io/ioutil" 7 "path/filepath" 8 9 "github.com/hanks177/podman/v4/pkg/domain/entities" 10 "github.com/hanks177/podman/v4/pkg/domain/utils" 11 "github.com/pkg/errors" 12 ) 13 14 func (ic *ContainerEngine) SecretCreate(ctx context.Context, name string, reader io.Reader, options entities.SecretCreateOptions) (*entities.SecretCreateReport, error) { 15 data, _ := ioutil.ReadAll(reader) 16 secretsPath := ic.Libpod.GetSecretsStorageDir() 17 manager, err := ic.Libpod.SecretsManager() 18 if err != nil { 19 return nil, err 20 } 21 22 // set defaults from config for the case they are not set by an upper layer 23 // (-> i.e. tests that talk directly to the api) 24 cfg, err := ic.Libpod.GetConfigNoCopy() 25 if err != nil { 26 return nil, err 27 } 28 if options.Driver == "" { 29 options.Driver = cfg.Secrets.Driver 30 } 31 if len(options.DriverOpts) == 0 { 32 options.DriverOpts = cfg.Secrets.Opts 33 } 34 if options.DriverOpts == nil { 35 options.DriverOpts = make(map[string]string) 36 } 37 38 if options.Driver == "file" { 39 if _, ok := options.DriverOpts["path"]; !ok { 40 options.DriverOpts["path"] = filepath.Join(secretsPath, "filedriver") 41 } 42 } 43 44 secretID, err := manager.Store(name, data, options.Driver, options.DriverOpts) 45 if err != nil { 46 return nil, err 47 } 48 return &entities.SecretCreateReport{ 49 ID: secretID, 50 }, nil 51 } 52 53 func (ic *ContainerEngine) SecretInspect(ctx context.Context, nameOrIDs []string) ([]*entities.SecretInfoReport, []error, error) { 54 manager, err := ic.Libpod.SecretsManager() 55 if err != nil { 56 return nil, nil, err 57 } 58 errs := make([]error, 0, len(nameOrIDs)) 59 reports := make([]*entities.SecretInfoReport, 0, len(nameOrIDs)) 60 for _, nameOrID := range nameOrIDs { 61 secret, err := manager.Lookup(nameOrID) 62 if err != nil { 63 if errors.Cause(err).Error() == "no such secret" { 64 errs = append(errs, err) 65 continue 66 } else { 67 return nil, nil, errors.Wrapf(err, "error inspecting secret %s", nameOrID) 68 } 69 } 70 report := &entities.SecretInfoReport{ 71 ID: secret.ID, 72 CreatedAt: secret.CreatedAt, 73 UpdatedAt: secret.CreatedAt, 74 Spec: entities.SecretSpec{ 75 Name: secret.Name, 76 Driver: entities.SecretDriverSpec{ 77 Name: secret.Driver, 78 Options: secret.DriverOptions, 79 }, 80 }, 81 } 82 reports = append(reports, report) 83 } 84 85 return reports, errs, nil 86 } 87 88 func (ic *ContainerEngine) SecretList(ctx context.Context, opts entities.SecretListRequest) ([]*entities.SecretInfoReport, error) { 89 manager, err := ic.Libpod.SecretsManager() 90 if err != nil { 91 return nil, err 92 } 93 secretList, err := manager.List() 94 if err != nil { 95 return nil, err 96 } 97 report := make([]*entities.SecretInfoReport, 0, len(secretList)) 98 for _, secret := range secretList { 99 result, err := utils.IfPassesSecretsFilter(secret, opts.Filters) 100 if err != nil { 101 return nil, err 102 } 103 if result { 104 reportItem := entities.SecretInfoReport{ 105 ID: secret.ID, 106 CreatedAt: secret.CreatedAt, 107 UpdatedAt: secret.CreatedAt, 108 Spec: entities.SecretSpec{ 109 Name: secret.Name, 110 Driver: entities.SecretDriverSpec{ 111 Name: secret.Driver, 112 Options: secret.DriverOptions, 113 }, 114 }, 115 } 116 report = append(report, &reportItem) 117 } 118 } 119 return report, nil 120 } 121 122 func (ic *ContainerEngine) SecretRm(ctx context.Context, nameOrIDs []string, options entities.SecretRmOptions) ([]*entities.SecretRmReport, error) { 123 var ( 124 err error 125 toRemove []string 126 reports = []*entities.SecretRmReport{} 127 ) 128 manager, err := ic.Libpod.SecretsManager() 129 if err != nil { 130 return nil, err 131 } 132 toRemove = nameOrIDs 133 if options.All { 134 allSecrs, err := manager.List() 135 if err != nil { 136 return nil, err 137 } 138 for _, secr := range allSecrs { 139 toRemove = append(toRemove, secr.ID) 140 } 141 } 142 for _, nameOrID := range toRemove { 143 deletedID, err := manager.Delete(nameOrID) 144 if err == nil || errors.Cause(err).Error() == "no such secret" { 145 reports = append(reports, &entities.SecretRmReport{ 146 Err: err, 147 ID: deletedID, 148 }) 149 continue 150 } else { 151 return nil, err 152 } 153 } 154 155 return reports, nil 156 }