You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

323 lines
13 KiB

  1. // Copyright 2019 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // https://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. // Code generated by gapic-generator. DO NOT EDIT.
  15. package containeranalysis
  16. import (
  17. "context"
  18. "math"
  19. "time"
  20. "github.com/golang/protobuf/proto"
  21. gax "github.com/googleapis/gax-go/v2"
  22. "google.golang.org/api/iterator"
  23. "google.golang.org/api/option"
  24. "google.golang.org/api/transport"
  25. containeranalysispb "google.golang.org/genproto/googleapis/devtools/containeranalysis/v1beta1"
  26. iampb "google.golang.org/genproto/googleapis/iam/v1"
  27. "google.golang.org/grpc"
  28. "google.golang.org/grpc/codes"
  29. "google.golang.org/grpc/metadata"
  30. )
  31. // ContainerAnalysisV1Beta1CallOptions contains the retry settings for each method of ContainerAnalysisV1Beta1Client.
  32. type ContainerAnalysisV1Beta1CallOptions struct {
  33. SetIamPolicy []gax.CallOption
  34. GetIamPolicy []gax.CallOption
  35. TestIamPermissions []gax.CallOption
  36. GetScanConfig []gax.CallOption
  37. ListScanConfigs []gax.CallOption
  38. UpdateScanConfig []gax.CallOption
  39. }
  40. func defaultContainerAnalysisV1Beta1ClientOptions() []option.ClientOption {
  41. return []option.ClientOption{
  42. option.WithEndpoint("containeranalysis.googleapis.com:443"),
  43. option.WithScopes(DefaultAuthScopes()...),
  44. }
  45. }
  46. func defaultContainerAnalysisV1Beta1CallOptions() *ContainerAnalysisV1Beta1CallOptions {
  47. retry := map[[2]string][]gax.CallOption{
  48. {"default", "idempotent"}: {
  49. gax.WithRetry(func() gax.Retryer {
  50. return gax.OnCodes([]codes.Code{
  51. codes.DeadlineExceeded,
  52. codes.Unavailable,
  53. }, gax.Backoff{
  54. Initial: 100 * time.Millisecond,
  55. Max: 60000 * time.Millisecond,
  56. Multiplier: 1.3,
  57. })
  58. }),
  59. },
  60. }
  61. return &ContainerAnalysisV1Beta1CallOptions{
  62. SetIamPolicy: retry[[2]string{"default", "non_idempotent"}],
  63. GetIamPolicy: retry[[2]string{"default", "non_idempotent"}],
  64. TestIamPermissions: retry[[2]string{"default", "non_idempotent"}],
  65. GetScanConfig: retry[[2]string{"default", "idempotent"}],
  66. ListScanConfigs: retry[[2]string{"default", "idempotent"}],
  67. UpdateScanConfig: retry[[2]string{"default", "non_idempotent"}],
  68. }
  69. }
  70. // ContainerAnalysisV1Beta1Client is a client for interacting with Container Analysis API.
  71. //
  72. // Methods, except Close, may be called concurrently. However, fields must not be modified concurrently with method calls.
  73. type ContainerAnalysisV1Beta1Client struct {
  74. // The connection to the service.
  75. conn *grpc.ClientConn
  76. // The gRPC API client.
  77. containerAnalysisV1Beta1Client containeranalysispb.ContainerAnalysisV1Beta1Client
  78. // The call options for this service.
  79. CallOptions *ContainerAnalysisV1Beta1CallOptions
  80. // The x-goog-* metadata to be sent with each request.
  81. xGoogMetadata metadata.MD
  82. }
  83. // NewContainerAnalysisV1Beta1Client creates a new container analysis v1 beta1 client.
  84. //
  85. // Retrieves analysis results of Cloud components such as Docker container
  86. // images. The Container Analysis API is an implementation of the
  87. // Grafeas (at grafeas.io) API.
  88. //
  89. // Analysis results are stored as a series of occurrences. An Occurrence
  90. // contains information about a specific analysis instance on a resource. An
  91. // occurrence refers to a Note. A note contains details describing the
  92. // analysis and is generally stored in a separate project, called a Provider.
  93. // Multiple occurrences can refer to the same note.
  94. //
  95. // For example, an SSL vulnerability could affect multiple images. In this case,
  96. // there would be one note for the vulnerability and an occurrence for each
  97. // image with the vulnerability referring to that note.
  98. func NewContainerAnalysisV1Beta1Client(ctx context.Context, opts ...option.ClientOption) (*ContainerAnalysisV1Beta1Client, error) {
  99. conn, err := transport.DialGRPC(ctx, append(defaultContainerAnalysisV1Beta1ClientOptions(), opts...)...)
  100. if err != nil {
  101. return nil, err
  102. }
  103. c := &ContainerAnalysisV1Beta1Client{
  104. conn: conn,
  105. CallOptions: defaultContainerAnalysisV1Beta1CallOptions(),
  106. containerAnalysisV1Beta1Client: containeranalysispb.NewContainerAnalysisV1Beta1Client(conn),
  107. }
  108. c.setGoogleClientInfo()
  109. return c, nil
  110. }
  111. // Connection returns the client's connection to the API service.
  112. func (c *ContainerAnalysisV1Beta1Client) Connection() *grpc.ClientConn {
  113. return c.conn
  114. }
  115. // Close closes the connection to the API service. The user should invoke this when
  116. // the client is no longer required.
  117. func (c *ContainerAnalysisV1Beta1Client) Close() error {
  118. return c.conn.Close()
  119. }
  120. // setGoogleClientInfo sets the name and version of the application in
  121. // the `x-goog-api-client` header passed on each request. Intended for
  122. // use by Google-written clients.
  123. func (c *ContainerAnalysisV1Beta1Client) setGoogleClientInfo(keyval ...string) {
  124. kv := append([]string{"gl-go", versionGo()}, keyval...)
  125. kv = append(kv, "gapic", versionClient, "gax", gax.Version, "grpc", grpc.Version)
  126. c.xGoogMetadata = metadata.Pairs("x-goog-api-client", gax.XGoogHeader(kv...))
  127. }
  128. // SetIamPolicy sets the access control policy on the specified note or occurrence.
  129. // Requires containeranalysis.notes.setIamPolicy or
  130. // containeranalysis.occurrences.setIamPolicy permission if the resource is
  131. // a note or an occurrence, respectively.
  132. //
  133. // The resource takes the format projects/[PROJECT_ID]/notes/[NOTE_ID] for
  134. // notes and projects/[PROJECT_ID]/occurrences/[OCCURRENCE_ID] for
  135. // occurrences.
  136. func (c *ContainerAnalysisV1Beta1Client) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  137. ctx = insertMetadata(ctx, c.xGoogMetadata)
  138. opts = append(c.CallOptions.SetIamPolicy[0:len(c.CallOptions.SetIamPolicy):len(c.CallOptions.SetIamPolicy)], opts...)
  139. var resp *iampb.Policy
  140. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  141. var err error
  142. resp, err = c.containerAnalysisV1Beta1Client.SetIamPolicy(ctx, req, settings.GRPC...)
  143. return err
  144. }, opts...)
  145. if err != nil {
  146. return nil, err
  147. }
  148. return resp, nil
  149. }
  150. // GetIamPolicy gets the access control policy for a note or an occurrence resource.
  151. // Requires containeranalysis.notes.setIamPolicy or
  152. // containeranalysis.occurrences.setIamPolicy permission if the resource is
  153. // a note or occurrence, respectively.
  154. //
  155. // The resource takes the format projects/[PROJECT_ID]/notes/[NOTE_ID] for
  156. // notes and projects/[PROJECT_ID]/occurrences/[OCCURRENCE_ID] for
  157. // occurrences.
  158. func (c *ContainerAnalysisV1Beta1Client) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest, opts ...gax.CallOption) (*iampb.Policy, error) {
  159. ctx = insertMetadata(ctx, c.xGoogMetadata)
  160. opts = append(c.CallOptions.GetIamPolicy[0:len(c.CallOptions.GetIamPolicy):len(c.CallOptions.GetIamPolicy)], opts...)
  161. var resp *iampb.Policy
  162. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  163. var err error
  164. resp, err = c.containerAnalysisV1Beta1Client.GetIamPolicy(ctx, req, settings.GRPC...)
  165. return err
  166. }, opts...)
  167. if err != nil {
  168. return nil, err
  169. }
  170. return resp, nil
  171. }
  172. // TestIamPermissions returns the permissions that a caller has on the specified note or
  173. // occurrence. Requires list permission on the project (for example,
  174. // containeranalysis.notes.list).
  175. //
  176. // The resource takes the format projects/[PROJECT_ID]/notes/[NOTE_ID] for
  177. // notes and projects/[PROJECT_ID]/occurrences/[OCCURRENCE_ID] for
  178. // occurrences.
  179. func (c *ContainerAnalysisV1Beta1Client) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest, opts ...gax.CallOption) (*iampb.TestIamPermissionsResponse, error) {
  180. ctx = insertMetadata(ctx, c.xGoogMetadata)
  181. opts = append(c.CallOptions.TestIamPermissions[0:len(c.CallOptions.TestIamPermissions):len(c.CallOptions.TestIamPermissions)], opts...)
  182. var resp *iampb.TestIamPermissionsResponse
  183. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  184. var err error
  185. resp, err = c.containerAnalysisV1Beta1Client.TestIamPermissions(ctx, req, settings.GRPC...)
  186. return err
  187. }, opts...)
  188. if err != nil {
  189. return nil, err
  190. }
  191. return resp, nil
  192. }
  193. // GetScanConfig gets the specified scan configuration.
  194. func (c *ContainerAnalysisV1Beta1Client) GetScanConfig(ctx context.Context, req *containeranalysispb.GetScanConfigRequest, opts ...gax.CallOption) (*containeranalysispb.ScanConfig, error) {
  195. ctx = insertMetadata(ctx, c.xGoogMetadata)
  196. opts = append(c.CallOptions.GetScanConfig[0:len(c.CallOptions.GetScanConfig):len(c.CallOptions.GetScanConfig)], opts...)
  197. var resp *containeranalysispb.ScanConfig
  198. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  199. var err error
  200. resp, err = c.containerAnalysisV1Beta1Client.GetScanConfig(ctx, req, settings.GRPC...)
  201. return err
  202. }, opts...)
  203. if err != nil {
  204. return nil, err
  205. }
  206. return resp, nil
  207. }
  208. // ListScanConfigs lists scan configurations for the specified project.
  209. func (c *ContainerAnalysisV1Beta1Client) ListScanConfigs(ctx context.Context, req *containeranalysispb.ListScanConfigsRequest, opts ...gax.CallOption) *ScanConfigIterator {
  210. ctx = insertMetadata(ctx, c.xGoogMetadata)
  211. opts = append(c.CallOptions.ListScanConfigs[0:len(c.CallOptions.ListScanConfigs):len(c.CallOptions.ListScanConfigs)], opts...)
  212. it := &ScanConfigIterator{}
  213. req = proto.Clone(req).(*containeranalysispb.ListScanConfigsRequest)
  214. it.InternalFetch = func(pageSize int, pageToken string) ([]*containeranalysispb.ScanConfig, string, error) {
  215. var resp *containeranalysispb.ListScanConfigsResponse
  216. req.PageToken = pageToken
  217. if pageSize > math.MaxInt32 {
  218. req.PageSize = math.MaxInt32
  219. } else {
  220. req.PageSize = int32(pageSize)
  221. }
  222. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  223. var err error
  224. resp, err = c.containerAnalysisV1Beta1Client.ListScanConfigs(ctx, req, settings.GRPC...)
  225. return err
  226. }, opts...)
  227. if err != nil {
  228. return nil, "", err
  229. }
  230. return resp.ScanConfigs, resp.NextPageToken, nil
  231. }
  232. fetch := func(pageSize int, pageToken string) (string, error) {
  233. items, nextPageToken, err := it.InternalFetch(pageSize, pageToken)
  234. if err != nil {
  235. return "", err
  236. }
  237. it.items = append(it.items, items...)
  238. return nextPageToken, nil
  239. }
  240. it.pageInfo, it.nextFunc = iterator.NewPageInfo(fetch, it.bufLen, it.takeBuf)
  241. it.pageInfo.MaxSize = int(req.PageSize)
  242. return it
  243. }
  244. // UpdateScanConfig updates the specified scan configuration.
  245. func (c *ContainerAnalysisV1Beta1Client) UpdateScanConfig(ctx context.Context, req *containeranalysispb.UpdateScanConfigRequest, opts ...gax.CallOption) (*containeranalysispb.ScanConfig, error) {
  246. ctx = insertMetadata(ctx, c.xGoogMetadata)
  247. opts = append(c.CallOptions.UpdateScanConfig[0:len(c.CallOptions.UpdateScanConfig):len(c.CallOptions.UpdateScanConfig)], opts...)
  248. var resp *containeranalysispb.ScanConfig
  249. err := gax.Invoke(ctx, func(ctx context.Context, settings gax.CallSettings) error {
  250. var err error
  251. resp, err = c.containerAnalysisV1Beta1Client.UpdateScanConfig(ctx, req, settings.GRPC...)
  252. return err
  253. }, opts...)
  254. if err != nil {
  255. return nil, err
  256. }
  257. return resp, nil
  258. }
  259. // ScanConfigIterator manages a stream of *containeranalysispb.ScanConfig.
  260. type ScanConfigIterator struct {
  261. items []*containeranalysispb.ScanConfig
  262. pageInfo *iterator.PageInfo
  263. nextFunc func() error
  264. // InternalFetch is for use by the Google Cloud Libraries only.
  265. // It is not part of the stable interface of this package.
  266. //
  267. // InternalFetch returns results from a single call to the underlying RPC.
  268. // The number of results is no greater than pageSize.
  269. // If there are no more results, nextPageToken is empty and err is nil.
  270. InternalFetch func(pageSize int, pageToken string) (results []*containeranalysispb.ScanConfig, nextPageToken string, err error)
  271. }
  272. // PageInfo supports pagination. See the google.golang.org/api/iterator package for details.
  273. func (it *ScanConfigIterator) PageInfo() *iterator.PageInfo {
  274. return it.pageInfo
  275. }
  276. // Next returns the next result. Its second return value is iterator.Done if there are no more
  277. // results. Once Next returns Done, all subsequent calls will return Done.
  278. func (it *ScanConfigIterator) Next() (*containeranalysispb.ScanConfig, error) {
  279. var item *containeranalysispb.ScanConfig
  280. if err := it.nextFunc(); err != nil {
  281. return item, err
  282. }
  283. item = it.items[0]
  284. it.items = it.items[1:]
  285. return item, nil
  286. }
  287. func (it *ScanConfigIterator) bufLen() int {
  288. return len(it.items)
  289. }
  290. func (it *ScanConfigIterator) takeBuf() interface{} {
  291. b := it.items
  292. it.items = nil
  293. return b
  294. }