2023-08-07 19:13:26 +00:00
// Copyright 2022 Woodpecker Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2022-09-05 04:01:14 +00:00
package kubernetes
import (
2023-12-19 03:53:52 +00:00
"context"
2022-09-05 04:01:14 +00:00
"strings"
2023-12-19 03:53:52 +00:00
"github.com/rs/zerolog/log"
2022-09-05 04:01:14 +00:00
v1 "k8s.io/api/core/v1"
2023-12-19 03:53:52 +00:00
"k8s.io/apimachinery/pkg/api/errors"
2022-09-05 04:01:14 +00:00
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
2024-01-15 02:59:08 +00:00
func mkPersistentVolumeClaim ( config * config , name string ) ( * v1 . PersistentVolumeClaim , error ) {
_storageClass := & config . StorageClass
if config . StorageClass == "" {
2022-09-05 04:01:14 +00:00
_storageClass = nil
}
var accessMode v1 . PersistentVolumeAccessMode
2024-01-15 02:59:08 +00:00
if config . StorageRwx {
2022-09-05 04:01:14 +00:00
accessMode = v1 . ReadWriteMany
} else {
accessMode = v1 . ReadWriteOnce
}
2023-12-19 03:53:52 +00:00
volumeName , err := volumeName ( name )
2023-03-21 19:00:45 +00:00
if err != nil {
return nil , err
}
pvc := & v1 . PersistentVolumeClaim {
2022-09-05 04:01:14 +00:00
ObjectMeta : metav1 . ObjectMeta {
2023-03-21 19:00:45 +00:00
Name : volumeName ,
2024-01-15 02:59:08 +00:00
Namespace : config . Namespace ,
2022-09-05 04:01:14 +00:00
} ,
Spec : v1 . PersistentVolumeClaimSpec {
AccessModes : [ ] v1 . PersistentVolumeAccessMode { accessMode } ,
StorageClassName : _storageClass ,
fix(deps): update golang (packages) (#2958)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
|
[github.com/caddyserver/certmagic](https://togithub.com/caddyserver/certmagic)
| require | minor | `v0.19.2` -> `v0.20.0` |
| [github.com/expr-lang/expr](https://togithub.com/expr-lang/expr) |
require | patch | `v1.15.6` -> `v1.15.7` |
| [github.com/google/uuid](https://togithub.com/google/uuid) | require |
minor | `v1.4.0` -> `v1.5.0` |
|
[github.com/jellydator/ttlcache/v3](https://togithub.com/jellydator/ttlcache)
| require | patch | `v3.1.0` -> `v3.1.1` |
| [github.com/mattn/go-sqlite3](https://togithub.com/mattn/go-sqlite3) |
require | patch | `v1.14.18` -> `v1.14.19` |
| [github.com/xanzy/go-gitlab](https://togithub.com/xanzy/go-gitlab) |
require | minor | `v0.94.0` -> `v0.95.2` |
| [google.golang.org/grpc](https://togithub.com/grpc/grpc-go) | require
| minor | `v1.59.0` -> `v1.60.0` |
| [k8s.io/api](https://togithub.com/kubernetes/api) | require | minor |
`v0.28.4` -> `v0.29.0` |
| [k8s.io/apimachinery](https://togithub.com/kubernetes/apimachinery) |
require | minor | `v0.28.4` -> `v0.29.0` |
| [k8s.io/client-go](https://togithub.com/kubernetes/client-go) |
require | minor | `v0.28.4` -> `v0.29.0` |
---
### Release Notes
<details>
<summary>caddyserver/certmagic
(github.com/caddyserver/certmagic)</summary>
###
[`v0.20.0`](https://togithub.com/caddyserver/certmagic/releases/tag/v0.20.0)
[Compare
Source](https://togithub.com/caddyserver/certmagic/compare/v0.19.2...v0.20.0)
This release vastly improves storage cleaning as well improving a few
smaller things. There is a minor breaking change as we get ever closer
to v1.0.
- :warning: The `DecisionFunc` for On-Demand TLS now takes a
`context.Context` value as its first argument. The context carries the
`ClientHelloInfo` value (keyed by `ClientHelloInfoCtxKey`) for logging
purposes.
- Storage cleaning is now synchronized across the cluster, including
process restarts. The state of cleaning expired certificates and OCSP
staples is written to storage, and distributed locking is used to ensure
that only 1 instance does it at a time. This greatly reduces costs for
expensive storage backends! Cleaning is also done less often when the
process is frequently restarted because the state is written to storage,
so it is not forgotten after shutting down.
- `.home.arpa` is now considered an internal suffix.
- Backoff timings have been tuned based on real-world experience.
#### What's Changed
- README: Add hint about NextProtos for certmagic.TLS by
[@​oliverpool](https://togithub.com/oliverpool) in
[https://github.com/caddyserver/certmagic/pull/251](https://togithub.com/caddyserver/certmagic/pull/251)
- Bump golang.org/x/net from 0.11.0 to 0.17.0 by
[@​dependabot](https://togithub.com/dependabot) in
[https://github.com/caddyserver/certmagic/pull/253](https://togithub.com/caddyserver/certmagic/pull/253)
- Optionally pass the context argument down to the OnDemand decision
func by [@​ankon](https://togithub.com/ankon) in
[https://github.com/caddyserver/certmagic/pull/255](https://togithub.com/caddyserver/certmagic/pull/255)
- Retain the error stack if `checkIfCertShouldBeObtained` returns an
error by [@​ankon](https://togithub.com/ankon) in
[https://github.com/caddyserver/certmagic/pull/256](https://togithub.com/caddyserver/certmagic/pull/256)
- Add OCSP stapling unit tests by
[@​kenjenkins](https://togithub.com/kenjenkins) in
[https://github.com/caddyserver/certmagic/pull/259](https://togithub.com/caddyserver/certmagic/pull/259)
#### New Contributors
- [@​oliverpool](https://togithub.com/oliverpool) made their first
contribution in
[https://github.com/caddyserver/certmagic/pull/251](https://togithub.com/caddyserver/certmagic/pull/251)
**Full Changelog**:
https://github.com/caddyserver/certmagic/compare/v0.19.2...v0.20.0
</details>
<details>
<summary>expr-lang/expr (github.com/expr-lang/expr)</summary>
###
[`v1.15.7`](https://togithub.com/expr-lang/expr/releases/tag/v1.15.7)
[Compare
Source](https://togithub.com/expr-lang/expr/compare/v1.15.6...v1.15.7)
**Expr** is a Go-centric expression language designed to deliver dynamic
configurations with unparalleled accuracy, safety, and speed.
##### In this release:
- Fixed commutative property for comparison between a value and a
pointer. ([#​490](https://togithub.com/expr-lang/expr/issues/490))
- Checker: forbid accessing built-ins and custom functions from `$env`.
([#​495](https://togithub.com/expr-lang/expr/issues/495))
- Enhanced the number parser to include support for parsing hexadecimal,
binary, and octal literals.
([#​483](https://togithub.com/expr-lang/expr/issues/483))
- Added `GetSource()` method to `vm.Program`.
([#​491](https://togithub.com/expr-lang/expr/issues/491))
</details>
<details>
<summary>google/uuid (github.com/google/uuid)</summary>
### [`v1.5.0`](https://togithub.com/google/uuid/releases/tag/v1.5.0)
[Compare
Source](https://togithub.com/google/uuid/compare/v1.4.0...v1.5.0)
##### Features
- Validate UUID without creating new UUID
([#​141](https://togithub.com/google/uuid/issues/141))
([9ee7366](https://togithub.com/google/uuid/commit/9ee7366e66c9ad96bab89139418a713dc584ae29))
</details>
<details>
<summary>jellydator/ttlcache
(github.com/jellydator/ttlcache/v3)</summary>
###
[`v3.1.1`](https://togithub.com/jellydator/ttlcache/releases/tag/v3.1.1)
[Compare
Source](https://togithub.com/jellydator/ttlcache/compare/v3.1.0...v3.1.1)
Fix a bug in the `Range` method that causes a panic when the cache is
empty
</details>
<details>
<summary>mattn/go-sqlite3 (github.com/mattn/go-sqlite3)</summary>
###
[`v1.14.19`](https://togithub.com/mattn/go-sqlite3/compare/v1.14.18...v1.14.19)
[Compare
Source](https://togithub.com/mattn/go-sqlite3/compare/v1.14.18...v1.14.19)
</details>
<details>
<summary>xanzy/go-gitlab (github.com/xanzy/go-gitlab)</summary>
###
[`v0.95.2`](https://togithub.com/xanzy/go-gitlab/compare/v0.95.1...v0.95.2)
[Compare
Source](https://togithub.com/xanzy/go-gitlab/compare/v0.95.1...v0.95.2)
###
[`v0.95.1`](https://togithub.com/xanzy/go-gitlab/compare/v0.95.0...v0.95.1)
[Compare
Source](https://togithub.com/xanzy/go-gitlab/compare/v0.95.0...v0.95.1)
###
[`v0.95.0`](https://togithub.com/xanzy/go-gitlab/compare/v0.94.0...v0.95.0)
[Compare
Source](https://togithub.com/xanzy/go-gitlab/compare/v0.94.0...v0.95.0)
</details>
<details>
<summary>grpc/grpc-go (google.golang.org/grpc)</summary>
### [`v1.60.0`](https://togithub.com/grpc/grpc-go/releases/tag/v1.60.0):
Release 1.60.0
[Compare
Source](https://togithub.com/grpc/grpc-go/compare/v1.59.0...v1.60.0)
### Security
- credentials/tls: if not set, set TLS MinVersion to 1.2 and
CipherSuites according to supported suites not forbidden by RFC7540.
- This is a behavior change to bring us into better alignment with RFC
7540.
### API Changes
- resolver: remove deprecated and experimental
`ClientConn.NewServiceConfig`
([#​6784](https://togithub.com/grpc/grpc-go/issues/6784))
- client: remove deprecated `grpc.WithServiceConfig` `DialOption`
([#​6800](https://togithub.com/grpc/grpc-go/issues/6800))
### Bug Fixes
- client: fix race that could cause a deadlock while entering idle mode
and receiving a name resolver update
([#​6804](https://togithub.com/grpc/grpc-go/issues/6804))
- client: always enable TCP keepalives with OS defaults
([#​6834](https://togithub.com/grpc/grpc-go/issues/6834))
- credentials/alts: fix a bug preventing ALTS from connecting to the
metadata server if the default scheme is overridden
([#​6686](https://togithub.com/grpc/grpc-go/issues/6686))
- Special Thanks: [@​mjamaloney](https://togithub.com/mjamaloney)
### Behavior Changes
- server: Do not return from Stop() or GracefulStop() until all
resources are released
([#​6489](https://togithub.com/grpc/grpc-go/issues/6489))
- Special Thanks: [@​fho](https://togithub.com/fho)
### Documentation
- codes: clarify that only codes defined by this package are valid and
that users should not cast other values to `codes.Code`
([#​6701](https://togithub.com/grpc/grpc-go/issues/6701))
</details>
<details>
<summary>kubernetes/api (k8s.io/api)</summary>
###
[`v0.29.0`](https://togithub.com/kubernetes/api/compare/v0.28.4...v0.29.0)
[Compare
Source](https://togithub.com/kubernetes/api/compare/v0.28.4...v0.29.0)
</details>
<details>
<summary>kubernetes/apimachinery (k8s.io/apimachinery)</summary>
###
[`v0.29.0`](https://togithub.com/kubernetes/apimachinery/compare/v0.28.4...v0.29.0)
[Compare
Source](https://togithub.com/kubernetes/apimachinery/compare/v0.28.4...v0.29.0)
</details>
<details>
<summary>kubernetes/client-go (k8s.io/client-go)</summary>
###
[`v0.29.0`](https://togithub.com/kubernetes/client-go/compare/v0.28.4...v0.29.0)
[Compare
Source](https://togithub.com/kubernetes/client-go/compare/v0.28.4...v0.29.0)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "before 4am" (UTC), Automerge -
"before 4am" (UTC).
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/woodpecker-ci/woodpecker).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy45My4xIiwidXBkYXRlZEluVmVyIjoiMzcuOTMuMSIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Robert Kaussow <mail@thegeeklab.de>
2023-12-17 13:37:26 +00:00
Resources : v1 . VolumeResourceRequirements {
2022-09-05 04:01:14 +00:00
Requests : v1 . ResourceList {
2024-01-15 02:59:08 +00:00
v1 . ResourceStorage : resource . MustParse ( config . VolumeSize ) ,
2022-09-05 04:01:14 +00:00
} ,
} ,
} ,
}
2023-03-21 19:00:45 +00:00
return pvc , nil
2022-09-05 04:01:14 +00:00
}
2023-12-19 03:53:52 +00:00
func volumeName ( name string ) ( string , error ) {
return dnsName ( strings . Split ( name , ":" ) [ 0 ] )
}
func volumeMountPath ( name string ) string {
s := strings . Split ( name , ":" )
if len ( s ) > 1 {
return s [ 1 ]
}
return s [ 0 ]
}
func startVolume ( ctx context . Context , engine * kube , name string ) ( * v1 . PersistentVolumeClaim , error ) {
2024-01-15 02:59:08 +00:00
engineConfig := engine . getConfig ( )
pvc , err := mkPersistentVolumeClaim ( engineConfig , name )
2023-12-19 03:53:52 +00:00
if err != nil {
return nil , err
}
2024-01-11 18:17:07 +00:00
log . Trace ( ) . Msgf ( "creating volume: %s" , pvc . Name )
2024-01-15 02:59:08 +00:00
return engine . client . CoreV1 ( ) . PersistentVolumeClaims ( engineConfig . Namespace ) . Create ( ctx , pvc , metav1 . CreateOptions { } )
2023-12-19 03:53:52 +00:00
}
func stopVolume ( ctx context . Context , engine * kube , name string , deleteOpts metav1 . DeleteOptions ) error {
pvcName , err := volumeName ( name )
if err != nil {
return err
}
2024-01-11 18:17:07 +00:00
log . Trace ( ) . Str ( "name" , pvcName ) . Msg ( "deleting volume" )
2023-12-19 03:53:52 +00:00
err = engine . client . CoreV1 ( ) . PersistentVolumeClaims ( engine . config . Namespace ) . Delete ( ctx , pvcName , deleteOpts )
if errors . IsNotFound ( err ) {
// Don't abort on 404 errors from k8s, they most likely mean that the pod hasn't been created yet, usually because pipeline was canceled before running all steps.
2024-01-11 18:17:07 +00:00
log . Trace ( ) . Err ( err ) . Msgf ( "unable to delete service %s" , pvcName )
2023-12-19 03:53:52 +00:00
return nil
}
return err
}