chore: work save
This commit is contained in:
parent
3e3f13d36d
commit
9752d63f7e
19 changed files with 1003 additions and 209 deletions
23
.github/actions/build/action.yaml
vendored
23
.github/actions/build/action.yaml
vendored
|
|
@ -4,14 +4,31 @@ description: "Build pipeline"
|
|||
inputs:
|
||||
go-version:
|
||||
description: "Go version to install"
|
||||
default: '1.25'
|
||||
required: true
|
||||
golang-cilint-version:
|
||||
description: "Golangci-lint version to install"
|
||||
default: "2.7.2"
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Install Go ${{ inputs.go-version }}
|
||||
uses: actions/setup-go@v5
|
||||
uses: actions/setup-go@v6
|
||||
with:
|
||||
go-version: ${{ inputs.go-version }}
|
||||
- name: Install project tools and dependencies
|
||||
check-latest: true
|
||||
go-version-file: 'go.mod'
|
||||
|
||||
# - name: Run golangci-lint
|
||||
# uses: golangci/golangci-lint-action@v9
|
||||
# with:
|
||||
# version: ${{ inputs.golang-cilint-version }}
|
||||
|
||||
- name: Install needed tools
|
||||
shell: bash
|
||||
run: make project-tools
|
||||
run: |
|
||||
set -e
|
||||
go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@${{ inputs.golang-cilint-version }}
|
||||
go install github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs@v0.24.0
|
||||
|
|
|
|||
136
.github/workflows/publish.yaml
vendored
136
.github/workflows/publish.yaml
vendored
|
|
@ -13,7 +13,7 @@ env:
|
|||
CODE_COVERAGE_ARTIFACT_NAME: "code-coverage"
|
||||
|
||||
jobs:
|
||||
main:
|
||||
prep:
|
||||
name: prepare
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
|
|
@ -22,6 +22,11 @@ jobs:
|
|||
contents: read # Required to checkout repository.
|
||||
pull-requests: write # Required to add PR comment.
|
||||
steps:
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
apt-get -qq -y update
|
||||
apt-get -qq -y install unzip zip
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
|
|
@ -46,15 +51,15 @@ jobs:
|
|||
# - run: echo ${{ steps.plan.outputs.exitcode }}
|
||||
|
||||
# Run plan by default, or apply on merge.
|
||||
- uses: op5dev/tf-via-pr@v13
|
||||
with:
|
||||
working-directory: path/to/directory
|
||||
command: ${{ github.event_name == 'push' && 'apply' || 'plan' }}
|
||||
arg-lock: ${{ github.event_name == 'push' }}
|
||||
arg-backend-config: env/dev.tfbackend
|
||||
arg-var-file: env/dev.tfvars
|
||||
arg-workspace: dev-use1
|
||||
plan-encrypt: ${{ secrets.PASSPHRASE }}
|
||||
# - uses: op5dev/tf-via-pr@v13
|
||||
# with:
|
||||
# working-directory: path/to/directory
|
||||
# command: ${{ github.event_name == 'push' && 'apply' || 'plan' }}
|
||||
# arg-lock: ${{ github.event_name == 'push' }}
|
||||
# arg-backend-config: env/dev.tfbackend
|
||||
# arg-var-file: env/dev.tfvars
|
||||
# arg-workspace: dev-use1
|
||||
# plan-encrypt: ${{ secrets.PASSPHRASE }}
|
||||
|
||||
# - name: "Ensure docs are up-to-date"
|
||||
# if: ${{ github.event_name == 'pull_request' }}
|
||||
|
|
@ -65,15 +70,15 @@ jobs:
|
|||
# if: ${{ github.event_name == 'pull_request' }}
|
||||
# run: go mod tidy
|
||||
|
||||
- name: golangci-lint
|
||||
uses: golangci/golangci-lint-action@v9
|
||||
with:
|
||||
version: v2.7
|
||||
args: --config=golang-ci.yaml --allow-parallel-runners --timeout=5m
|
||||
# - name: golangci-lint
|
||||
# uses: golangci/golangci-lint-action@v9
|
||||
# with:
|
||||
# version: v2.7
|
||||
# args: --config=golang-ci.yaml --allow-parallel-runners --timeout=5m
|
||||
|
||||
# - name: Lint
|
||||
# run: make lint
|
||||
|
||||
|
||||
# - name: Test
|
||||
# run: make test
|
||||
|
||||
|
|
@ -99,9 +104,9 @@ jobs:
|
|||
|
||||
code_coverage:
|
||||
name: "Code coverage report"
|
||||
if: github.event_name == 'pull_request' # Do not run when workflow is triggered by push to main branch
|
||||
if: github.event_name == 'pull_request' || (github.event_name == 'push' && contains(github.ref, 'refs/tags/'))
|
||||
runs-on: ubuntu-latest
|
||||
needs: main
|
||||
needs: prep
|
||||
permissions:
|
||||
contents: read
|
||||
actions: read # to download code coverage results from "main" job
|
||||
|
|
@ -116,20 +121,87 @@ jobs:
|
|||
root-package: 'tfregistry.sysops.stackit.rocks/mhenselin/stackitprivatepreview'
|
||||
|
||||
publish:
|
||||
name: "Publish artifact"
|
||||
name: "Publish provider"
|
||||
# if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
||||
if: github.event_name == 'push'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read # Required to identify workflow run.
|
||||
checks: write # Required to add status summary.
|
||||
contents: read # Required to checkout repository.
|
||||
pull-requests: write # Required to add PR comment.
|
||||
steps:
|
||||
- name: Set up S3cmd cli tool
|
||||
uses: s3-actions/s3cmd@v2.0.1
|
||||
with:
|
||||
provider: aws # default is linode
|
||||
region: 'eu01'
|
||||
access_key: ${{ secrets.S3_ACCESS_KEY }}
|
||||
secret_key: ${{ secrets.S3_SECRET_KEY }}
|
||||
|
||||
- name: Interact with object storage
|
||||
- name: Install needed tools
|
||||
run: |
|
||||
s3cmd ls
|
||||
# s3cmd sync --recursive --acl-public dist s3://awesome.blog/
|
||||
# s3cmd put dist/style.css --mime-type 'text/css' --acl-public s3://awesome.blog/style.css
|
||||
s3cmd info s3://awesome.blog
|
||||
apt-get -y -qq update
|
||||
apt-get -y -qq install jq python3 python3-pip python-is-python3 s3cmd git make wget
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install Go ${{ env.GO_VERSION }}
|
||||
uses: actions/setup-go@v6
|
||||
with:
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- name: Install go tools
|
||||
run: |
|
||||
go install golang.org/x/tools/cmd/goimports@latest
|
||||
go install github.com/hashicorp/terraform-plugin-codegen-framework/cmd/tfplugingen-framework@latest
|
||||
go install github.com/hashicorp/terraform-plugin-codegen-openapi/cmd/tfplugingen-openapi@latest
|
||||
|
||||
- uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin' # See 'Supported distributions' for available options
|
||||
java-version: '21'
|
||||
|
||||
- name: Run build pkg directory
|
||||
run: |
|
||||
go run cmd/main.go build
|
||||
|
||||
- name: Set up s3cfg
|
||||
run: |
|
||||
cat <<'EOF' >> ~/.s3cfg
|
||||
[default]
|
||||
host_base = https://object.storage.eu01.onstackit.cloud
|
||||
host_bucket = https://%(bucket).object.storage.eu01.onstackit.cloud
|
||||
check_ssl_certificate = False
|
||||
access_key = ${{ secrets.S3_ACCESS_KEY }}
|
||||
secret_key = ${{ secrets.S3_SECRET_KEY }}
|
||||
EOF
|
||||
|
||||
- name: Import GPG key
|
||||
run: |
|
||||
gpg --import private.key
|
||||
|
||||
- name: Run GoReleaser
|
||||
id: goreleaser
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GPG_FINGERPRINT: ${{ secrets.GPG_FINGERPRINT }}
|
||||
uses: goreleaser/goreleaser-action@v6
|
||||
with:
|
||||
args: release --skip publish --clean --snapshot
|
||||
|
||||
- name: Prepare key file
|
||||
run: |
|
||||
echo $(echo ${{ secrets.KEY_FILE_B64 }} | base64 -d) >public_key.pem
|
||||
|
||||
- name: Prepare provider directory structure
|
||||
run: |
|
||||
VERSION=$(jq -c .version < dist/metadata.json)
|
||||
go run main.go \
|
||||
-ns=mhenselin \
|
||||
-p=stackitprivatepreview \
|
||||
-r=terraform-provider-stackitprivatepreview \
|
||||
-d=tfregistry.sysops.stackit.rocks \
|
||||
-gf=${{ secrets.GPG_FINGERPRINT }} \
|
||||
-gk=public_key.pem \
|
||||
-v=${VERSION}
|
||||
|
||||
- name: Publish provider to S3
|
||||
run: |
|
||||
set -e
|
||||
cd release/
|
||||
s3cmd put --recursive v1 s3://terraform-provider-privatepreview/
|
||||
s3cmd put --recursive .well-known s3://terraform-provider-privatepreview/
|
||||
|
|
|
|||
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -40,4 +40,6 @@ coverage.out
|
|||
coverage.html
|
||||
generated
|
||||
stackit-sdk-generator
|
||||
dist
|
||||
dist
|
||||
|
||||
.secrets
|
||||
|
|
|
|||
17
cmd/cmd/buildCmd.go
Normal file
17
cmd/cmd/buildCmd.go
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/mhenselin/terraform-provider-stackitprivatepreview/tools"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func NewBuildCmd() *cobra.Command {
|
||||
return &cobra.Command{
|
||||
Use: "build",
|
||||
Short: "Build the necessary boilerplate",
|
||||
Long: `...`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return tools.Build()
|
||||
},
|
||||
}
|
||||
}
|
||||
498
cmd/cmd/publishCmd.go
Normal file
498
cmd/cmd/publishCmd.go
Normal file
|
|
@ -0,0 +1,498 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
namespace string
|
||||
domain string
|
||||
providerName string
|
||||
distPath string
|
||||
repoName string
|
||||
version string
|
||||
gpgFingerprint string
|
||||
gpgPubKeyFile string
|
||||
)
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "publish",
|
||||
Short: "Publish terraform provider",
|
||||
Long: `...`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
return publish()
|
||||
},
|
||||
}
|
||||
|
||||
func init() { // nolint: gochecknoinits
|
||||
rootCmd.Flags().StringVarP(&namespace, "namespace", "n", "", "Namespace for the Terraform registry.")
|
||||
rootCmd.Flags().StringVarP(&domain, "domain", "d", "", "Domain for the Terraform registry.")
|
||||
rootCmd.Flags().StringVarP(&providerName, "providerName", "p", "", "ProviderName for the Terraform registry.")
|
||||
rootCmd.Flags().StringVarP(&distPath, "distPath", "x", "dist", "Dist Path for the Terraform registry.")
|
||||
rootCmd.Flags().StringVarP(&repoName, "repoName", "r", "", "RepoName for the Terraform registry.")
|
||||
rootCmd.Flags().StringVarP(&version, "version", "v", "", "Version for the Terraform registry.")
|
||||
rootCmd.Flags().StringVarP(&gpgFingerprint, "gpgFingerprint", "f", "", "GPG Fingerprint for the Terraform registry.")
|
||||
rootCmd.Flags().StringVarP(&gpgPubKeyFile, "gpgPubKeyFile", "k", "", "GPG PubKey file name for the Terraform registry.")
|
||||
|
||||
err := rootCmd.MarkFlagRequired("namespace")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = rootCmd.MarkFlagRequired("domain")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = rootCmd.MarkFlagRequired("providerName")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = rootCmd.MarkFlagRequired("gpgFingerprint")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = rootCmd.MarkFlagRequired("gpgPubKeyFile")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = rootCmd.MarkFlagRequired("repoName")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = rootCmd.MarkFlagRequired("version")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = rootCmd.MarkFlagRequired("gpgFingerprint")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = rootCmd.MarkFlagRequired("gpgPubKeyFile")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func NewPublishCmd() *cobra.Command {
|
||||
return rootCmd
|
||||
}
|
||||
|
||||
func publish() error {
|
||||
log.Println("📦 Packaging Terraform Provider for private registry...")
|
||||
|
||||
distPath = filepath.Clean(distPath) + "/"
|
||||
|
||||
// Create release dir - only the contents of this need to be uploaded to S3
|
||||
err := createDir("release")
|
||||
if err != nil {
|
||||
return fmt.Errorf("error creating 'release' dir: %s", err)
|
||||
}
|
||||
|
||||
// Create .wellKnown directory and terraform.json file
|
||||
err = wellKnown()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error creating '.wellKnown' dir: %s", err)
|
||||
}
|
||||
|
||||
// Create v1 directory
|
||||
err = provider(namespace, providerName, distPath, repoName, version, gpgFingerprint, gpgPubKeyFile, domain)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error creating 'v1' dir: %s", err)
|
||||
}
|
||||
|
||||
log.Println("📦 Packaged Terraform Provider for private registry.")
|
||||
return nil
|
||||
}
|
||||
|
||||
// This establishes the "API" as a TF provider by responding with the correct JSON payload, by using static files
|
||||
func wellKnown() error {
|
||||
log.Println("* Creating .well-known directory")
|
||||
|
||||
err := createDir("release/.well-known")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
terraformJson := []byte(`{"providers.v1": "/v1/providers/"}`)
|
||||
|
||||
log.Println(" - Writing to .well-known/terraform.json file")
|
||||
err = writeFile("release/.well-known/terraform.json", terraformJson)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// provider is the Terraform name
|
||||
// repoName is the Repository name
|
||||
func provider(namespace, provider, distPath, repoName, version, gpgFingerprint, gpgPubKeyFile, domain string) error {
|
||||
// Path to semantic version dir
|
||||
versionPath := providerDirs(namespace, provider, version)
|
||||
|
||||
// Files to create under v1/providers/[namespace]/[provider_name]
|
||||
err := createVersionsFile(namespace, provider, distPath, repoName, version)
|
||||
if err != nil {
|
||||
return err
|
||||
} // Creates version file one above download, which is why downloadPath isn't used
|
||||
|
||||
// Files/Directories to create under v1/providers/[namespace]/[provider_name]/[version]
|
||||
copyShaFiles(versionPath, distPath, repoName, version)
|
||||
downloadPath, err := createDownloadsDir(versionPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Create darwin, freebsd, linux, windows dirs
|
||||
err = createTargetDirs(*downloadPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Copy all zips
|
||||
err = copyBuildZips(*downloadPath, distPath, repoName, version)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Create all individual files for build targets and each architecture for the build targets
|
||||
err = createArchitectureFiles(namespace, provider, distPath, repoName, version, gpgFingerprint, gpgPubKeyFile, domain)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Create the directories with a path format v1/providers/[namespace]/[provider_name]/[version]
|
||||
func providerDirs(namespace, repoName, version string) string {
|
||||
log.Println("* Creating release/v1/providers/[namespace]/[repo]/[version] directories")
|
||||
|
||||
providerPathArr := [6]string{"release", "v1", "providers", namespace, repoName, version}
|
||||
|
||||
var currentPath string
|
||||
for _, v := range providerPathArr {
|
||||
currentPath = currentPath + v + "/"
|
||||
err := createDir(currentPath)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
return currentPath
|
||||
}
|
||||
|
||||
// Create the versions file under v1/providers/[namespace]/[provider_name]
|
||||
func createVersionsFile(namespace, provider, distPath, repoName, version string) error {
|
||||
log.Println("* Writing to release/v1/providers/[namespace]/[repo]/versions file")
|
||||
|
||||
versionPath := fmt.Sprintf("release/v1/providers/%s/%s/versions", namespace, provider)
|
||||
|
||||
shaSumContents, err := getShaSumContents(distPath, repoName, version)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Build the versions file...
|
||||
platforms := ""
|
||||
for _, line := range shaSumContents {
|
||||
fileName := line[1] // zip file name
|
||||
|
||||
// get os and arch from filename
|
||||
removeFileExtension := strings.Split(fileName, ".zip")
|
||||
fileNameSplit := strings.Split(removeFileExtension[0], "_")
|
||||
|
||||
// Get build target and architecture from the zip file name
|
||||
target := fileNameSplit[2]
|
||||
arch := fileNameSplit[3]
|
||||
|
||||
platforms += "{"
|
||||
platforms += fmt.Sprintf(`"os": "%s",`, target)
|
||||
platforms += fmt.Sprintf(`"arch": "%s"`, arch)
|
||||
platforms += "}"
|
||||
platforms += ","
|
||||
}
|
||||
platforms = strings.TrimRight(platforms, ",") // remove trailing comma, json does not allow
|
||||
|
||||
var versions = []byte(fmt.Sprintf(`
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"version": "%s",
|
||||
"protocols": [
|
||||
"4.0",
|
||||
"5.1",
|
||||
"6.0"
|
||||
],
|
||||
"platform": [
|
||||
%s
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
`, version, platforms))
|
||||
|
||||
err = writeFile(versionPath, versions)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func copyShaFiles(destPath, srcPath, repoName, version string) {
|
||||
log.Printf("* Copying SHA files in %s directory", srcPath)
|
||||
|
||||
// Copy files from srcPath
|
||||
shaSum := repoName + "_" + version + "_SHA256SUMS"
|
||||
shaSumPath := srcPath + "/" + shaSum
|
||||
|
||||
// _SHA256SUMS file
|
||||
_, err := copyFile(shaSumPath, destPath+shaSum)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
// _SHA256SUMS.sig file
|
||||
_, err = copyFile(shaSumPath+".sig", destPath+shaSum+".sig")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
func createDownloadsDir(destPath string) (*string, error) {
|
||||
log.Printf("* Creating download/ in %s directory", destPath)
|
||||
|
||||
downloadPath := path.Join(destPath, "download")
|
||||
|
||||
err := createDir(downloadPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &downloadPath, nil
|
||||
}
|
||||
|
||||
func createTargetDirs(destPath string) error {
|
||||
log.Printf("* Creating target dirs in %s directory", destPath)
|
||||
|
||||
targets := [4]string{"darwin", "freebsd", "linux", "windows"}
|
||||
|
||||
for _, v := range targets {
|
||||
err := createDir(destPath + v)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func copyBuildZips(destPath, distPath, repoName, version string) error {
|
||||
log.Println("* Copying build zips")
|
||||
|
||||
shaSumContents, err := getShaSumContents(distPath, repoName, version)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Loop through and copy each
|
||||
for _, v := range shaSumContents {
|
||||
zipName := v[1]
|
||||
zipSrcPath := distPath + zipName
|
||||
zipDestPath := destPath + zipName
|
||||
|
||||
log.Printf(" - Zip Source: %s", zipSrcPath)
|
||||
log.Printf(" - Zip Dest: %s", zipDestPath)
|
||||
|
||||
// Copy the zip
|
||||
_, err := copyFile(zipSrcPath, zipDestPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getShaSumContents(distPath, repoName, version string) ([][]string, error) {
|
||||
shaSumFileName := repoName + "_" + version + "_SHA256SUMS"
|
||||
shaSumPath := distPath + "/" + shaSumFileName
|
||||
|
||||
shaSumLine, err := readFile(shaSumPath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
buildsAndShaSums := [][]string{}
|
||||
|
||||
for _, line := range shaSumLine {
|
||||
lineSplit := strings.Split(line, " ")
|
||||
|
||||
row := []string{lineSplit[0], lineSplit[1]}
|
||||
buildsAndShaSums = append(buildsAndShaSums, row)
|
||||
}
|
||||
|
||||
// log.Println(buildsAndShaSums)
|
||||
|
||||
return buildsAndShaSums, nil
|
||||
}
|
||||
|
||||
// Create architecture files for each build target
|
||||
func createArchitectureFiles(namespace, provider, distPath, repoName, version, gpgFingerprint, gpgPubKeyFile, domain string) error {
|
||||
log.Println("* Creating architecture files in target directories")
|
||||
|
||||
// filename = terraform-provider-[provider]_0.0.1_darwin_amd64.zip - provider_name + version + target + architecture + .zip
|
||||
prefix := fmt.Sprintf("v1/providers/%s/%s/%s/", namespace, provider, version)
|
||||
pathPrefix := fmt.Sprintf("release/%s", prefix)
|
||||
urlPrefix := fmt.Sprintf("https://%s/%s", domain, prefix)
|
||||
|
||||
// download url = https://example.com/v1/providers/namespace/provider/0.0.1/download/terraform-provider_0.0.1_darwin_amd64.zip
|
||||
downloadUrlPrefix := urlPrefix + "download/"
|
||||
downloadPathPrefix := pathPrefix + "download/"
|
||||
|
||||
// shasums url = https://example.com/v1/providers/namespace/provider/0.0.1/terraform-provider_0.0.1_SHA256SUMS
|
||||
shasumsUrl := urlPrefix + fmt.Sprintf("%s_%s_SHA256SUMS", repoName, version)
|
||||
// shasums_signature_url = https://example.com/v1/providers/namespace/provider/0.0.1/terraform-provider_0.0.1_SHA256SUMS.sig
|
||||
shasumsSigUrl := shasumsUrl + ".sig"
|
||||
|
||||
shaSumContents, err := getShaSumContents(distPath, repoName, version)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Get contents of GPG key
|
||||
gpgFile, err := readFile(gpgPubKeyFile)
|
||||
if err != nil {
|
||||
log.Printf("Error reading '%s' file: %s", gpgPubKeyFile, err)
|
||||
}
|
||||
|
||||
// loop through every line and stick with \\n
|
||||
gpgAsciiPub := ""
|
||||
for _, line := range gpgFile {
|
||||
gpgAsciiPub = gpgAsciiPub + line + "\\n"
|
||||
}
|
||||
// log.Println(gpgAsciiPub)
|
||||
|
||||
for _, line := range shaSumContents {
|
||||
shasum := line[0] // shasum of the zip
|
||||
fileName := line[1] // zip file name
|
||||
|
||||
downloadUrl := downloadUrlPrefix + fileName
|
||||
|
||||
// get os and arch from filename
|
||||
removeFileExtension := strings.Split(fileName, ".zip")
|
||||
fileNameSplit := strings.Split(removeFileExtension[0], "_")
|
||||
|
||||
// Get build target and architecture from the zip file name
|
||||
target := fileNameSplit[2]
|
||||
arch := fileNameSplit[3]
|
||||
|
||||
// build filepath
|
||||
archFileName := downloadPathPrefix + target + "/" + arch
|
||||
|
||||
var architectureTemplate = []byte(fmt.Sprintf(`
|
||||
{
|
||||
"protocols": [
|
||||
"4.0",
|
||||
"5.1"
|
||||
],
|
||||
"os": "%s",
|
||||
"arch": "%s",
|
||||
"filename": "%s",
|
||||
"download_url": "%s",
|
||||
"shasums_url": "%s",
|
||||
"shasums_signature_url": "%s",
|
||||
"shasum": "%s",
|
||||
"signing_keys": {
|
||||
"gpg_public_keys": [
|
||||
{
|
||||
"key_id": "%s",
|
||||
"ascii_armor": "%s",
|
||||
"trust_signature": "",
|
||||
"source": "",
|
||||
"source_url": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
`, target, arch, fileName, downloadUrl, shasumsUrl, shasumsSigUrl, shasum, gpgFingerprint, gpgAsciiPub))
|
||||
|
||||
log.Printf(" - Arch file: %s", archFileName)
|
||||
|
||||
err := writeFile(archFileName, architectureTemplate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func createDir(path string) error {
|
||||
log.Printf("* Creating %s directory", path)
|
||||
err := os.Mkdir(path, os.ModePerm)
|
||||
if errors.Is(err, fs.ErrExist) {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func copyFile(src, dst string) (int64, error) {
|
||||
sourceFileStat, err := os.Stat(src)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if !sourceFileStat.Mode().IsRegular() {
|
||||
return 0, fmt.Errorf("%s is not a regular file", src)
|
||||
}
|
||||
|
||||
source, err := os.Open(src)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer source.Close()
|
||||
|
||||
destination, err := os.Create(dst)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer destination.Close()
|
||||
nBytes, err := io.Copy(destination, source)
|
||||
return nBytes, err
|
||||
}
|
||||
|
||||
func readFile(filePath string) ([]string, error) {
|
||||
rFile, err := os.Open(filePath)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
fileScanner := bufio.NewScanner(rFile)
|
||||
fileScanner.Split(bufio.ScanLines)
|
||||
var fileLines []string
|
||||
|
||||
for fileScanner.Scan() {
|
||||
fileLines = append(fileLines, fileScanner.Text())
|
||||
}
|
||||
|
||||
rFile.Close()
|
||||
|
||||
return fileLines, nil
|
||||
}
|
||||
|
||||
func writeFile(fileName string, fileContents []byte) error {
|
||||
err := os.WriteFile(fileName, fileContents, 0644)
|
||||
return err
|
||||
}
|
||||
23
cmd/cmd/rootCmd.go
Normal file
23
cmd/cmd/rootCmd.go
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func NewRootCmd() *cobra.Command {
|
||||
return &cobra.Command{
|
||||
Use: "build-tools",
|
||||
Short: "...",
|
||||
Long: "...",
|
||||
SilenceErrors: true, // Error is beautified in a custom way before being printed
|
||||
SilenceUsage: true,
|
||||
DisableAutoGenTag: true,
|
||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
||||
err := cmd.Help()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
},
|
||||
}
|
||||
}
|
||||
34
cmd/main.go
34
cmd/main.go
|
|
@ -4,29 +4,23 @@ import (
|
|||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/mhenselin/terraform-provider-stackitprivatepreview/tools"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/mhenselin/terraform-provider-stackitprivatepreview/cmd/cmd"
|
||||
)
|
||||
|
||||
func NewRootCmd() *cobra.Command {
|
||||
cmd := &cobra.Command{
|
||||
Use: "builder",
|
||||
Short: "...",
|
||||
Long: "...",
|
||||
SilenceErrors: true, // Error is beautified in a custom way before being printed
|
||||
SilenceUsage: true,
|
||||
DisableAutoGenTag: true,
|
||||
RunE: func(_ *cobra.Command, _ []string) error {
|
||||
return tools.Build()
|
||||
},
|
||||
}
|
||||
cmd.SetOut(os.Stdout)
|
||||
return cmd
|
||||
}
|
||||
|
||||
func main() {
|
||||
cmd := NewRootCmd()
|
||||
err := cmd.Execute()
|
||||
rootCmd := cmd.NewRootCmd()
|
||||
//rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra.yaml)")
|
||||
//rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "author name for copyright attribution")
|
||||
//rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "name of license for the project")
|
||||
|
||||
rootCmd.SetOut(os.Stdout)
|
||||
|
||||
rootCmd.AddCommand(
|
||||
cmd.NewBuildCmd(),
|
||||
cmd.NewPublishCmd(),
|
||||
)
|
||||
|
||||
err := rootCmd.Execute()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,96 +0,0 @@
|
|||
|
||||
# This file contains all available configuration options
|
||||
# with their default values.
|
||||
|
||||
# options for analysis running
|
||||
run:
|
||||
# default concurrency is a available CPU number
|
||||
concurrency: 4
|
||||
|
||||
# timeout for analysis, e.g. 30s, 5m, default is 1m
|
||||
timeout: 5m
|
||||
linters-settings:
|
||||
goimports:
|
||||
# put imports beginning with prefix after 3rd-party packages;
|
||||
# it's a comma-separated list of prefixes
|
||||
local-prefixes: github.com/freiheit-com/nmww
|
||||
depguard:
|
||||
rules:
|
||||
main:
|
||||
list-mode: lax # Everything is allowed unless it is denied
|
||||
deny:
|
||||
- pkg: "github.com/stretchr/testify"
|
||||
desc: Do not use a testing framework
|
||||
misspell:
|
||||
# Correct spellings using locale preferences for US or UK.
|
||||
# Default is to use a neutral variety of English.
|
||||
# Setting locale to US will correct the British spelling of 'colour' to 'color'.
|
||||
locale: US
|
||||
# golint:
|
||||
# min-confidence: 0.8
|
||||
gosec:
|
||||
excludes:
|
||||
# Suppressions: (see https://github.com/securego/gosec#available-rules for details)
|
||||
- G104 # "Audit errors not checked" -> which we don't need and is a badly implemented version of errcheck
|
||||
- G102 # "Bind to all interfaces" -> since this is normal in k8s
|
||||
- G304 # "File path provided as taint input" -> too many false positives
|
||||
- G307 # "Deferring unsafe method "Close" on type "io.ReadCloser" -> false positive when calling defer resp.Body.Close()
|
||||
nakedret:
|
||||
max-func-lines: 0
|
||||
revive:
|
||||
ignore-generated-header: true
|
||||
severity: error
|
||||
# https://github.com/mgechev/revive
|
||||
rules:
|
||||
- name: errorf
|
||||
- name: context-as-argument
|
||||
- name: error-return
|
||||
- name: increment-decrement
|
||||
- name: indent-error-flow
|
||||
- name: superfluous-else
|
||||
- name: unused-parameter
|
||||
- name: unreachable-code
|
||||
- name: atomic
|
||||
- name: empty-lines
|
||||
- name: early-return
|
||||
gocritic:
|
||||
enabled-tags:
|
||||
- performance
|
||||
- style
|
||||
- experimental
|
||||
disabled-checks:
|
||||
- wrapperFunc
|
||||
- typeDefFirst
|
||||
- ifElseChain
|
||||
- dupImport # https://github.com/go-critic/go-critic/issues/845
|
||||
linters:
|
||||
enable:
|
||||
# https://golangci-lint.run/usage/linters/
|
||||
# default linters
|
||||
- gosimple
|
||||
- govet
|
||||
- ineffassign
|
||||
- staticcheck
|
||||
- typecheck
|
||||
- unused
|
||||
# additional linters
|
||||
- errorlint
|
||||
- gochecknoinits
|
||||
- gocritic
|
||||
- gofmt
|
||||
- goimports
|
||||
- gosec
|
||||
- misspell
|
||||
- nakedret
|
||||
- revive
|
||||
- depguard
|
||||
- bodyclose
|
||||
- sqlclosecheck
|
||||
- wastedassign
|
||||
- forcetypeassert
|
||||
- errcheck
|
||||
disable:
|
||||
- noctx # false positive: finds errors with http.NewRequest that dont make sense
|
||||
- unparam # false positives
|
||||
issues:
|
||||
exclude-use-default: false
|
||||
|
|
@ -410,8 +410,7 @@ type Key struct {
|
|||
// This date is set when a key is pending deletion and refers to the scheduled date of deletion
|
||||
DeletionDate KeyGetDeletionDateAttributeType `json:"deletionDate,omitempty"`
|
||||
// A user chosen description to distinguish multiple keys.
|
||||
// REQUIRED
|
||||
Description KeyGetDescriptionAttributeType `json:"description" required:"true"`
|
||||
Description KeyGetDescriptionAttributeType `json:"description,omitempty"`
|
||||
// The display name to distinguish multiple keys.
|
||||
// REQUIRED
|
||||
DisplayName KeyGetDisplayNameAttributeType `json:"displayName" required:"true"`
|
||||
|
|
@ -439,13 +438,12 @@ type _Key Key
|
|||
// This constructor will assign default values to properties that have it defined,
|
||||
// and makes sure properties required by API are set, but the set of arguments
|
||||
// will change when the set of required properties is changed
|
||||
func NewKey(accessScope KeyGetAccessScopeArgType, algorithm KeyGetAlgorithmArgType, backend KeyGetBackendArgType, createdAt KeyGetCreatedAtArgType, description KeyGetDescriptionArgType, displayName KeyGetDisplayNameArgType, id KeyGetIdArgType, importOnly KeygetImportOnlyArgType, keyRingId KeyGetKeyRingIdArgType, protection KeyGetProtectionArgType, purpose KeyGetPurposeArgType, state KeyGetStateArgType) *Key {
|
||||
func NewKey(accessScope KeyGetAccessScopeArgType, algorithm KeyGetAlgorithmArgType, backend KeyGetBackendArgType, createdAt KeyGetCreatedAtArgType, displayName KeyGetDisplayNameArgType, id KeyGetIdArgType, importOnly KeygetImportOnlyArgType, keyRingId KeyGetKeyRingIdArgType, protection KeyGetProtectionArgType, purpose KeyGetPurposeArgType, state KeyGetStateArgType) *Key {
|
||||
this := Key{}
|
||||
setKeyGetAccessScopeAttributeType(&this.AccessScope, accessScope)
|
||||
setKeyGetAlgorithmAttributeType(&this.Algorithm, algorithm)
|
||||
setKeyGetBackendAttributeType(&this.Backend, backend)
|
||||
setKeyGetCreatedAtAttributeType(&this.CreatedAt, createdAt)
|
||||
setKeyGetDescriptionAttributeType(&this.Description, description)
|
||||
setKeyGetDisplayNameAttributeType(&this.DisplayName, displayName)
|
||||
setKeyGetIdAttributeType(&this.Id, id)
|
||||
setKeygetImportOnlyAttributeType(&this.ImportOnly, importOnly)
|
||||
|
|
@ -562,19 +560,25 @@ func (o *Key) SetDeletionDate(v KeyGetDeletionDateRetType) {
|
|||
setKeyGetDeletionDateAttributeType(&o.DeletionDate, v)
|
||||
}
|
||||
|
||||
// GetDescription returns the Description field value
|
||||
func (o *Key) GetDescription() (ret KeyGetDescriptionRetType) {
|
||||
ret, _ = o.GetDescriptionOk()
|
||||
return ret
|
||||
// GetDescription returns the Description field value if set, zero value otherwise.
|
||||
func (o *Key) GetDescription() (res KeyGetDescriptionRetType) {
|
||||
res, _ = o.GetDescriptionOk()
|
||||
return
|
||||
}
|
||||
|
||||
// GetDescriptionOk returns a tuple with the Description field value
|
||||
// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
|
||||
// and a boolean to check if the value has been set.
|
||||
func (o *Key) GetDescriptionOk() (ret KeyGetDescriptionRetType, ok bool) {
|
||||
return getKeyGetDescriptionAttributeTypeOk(o.Description)
|
||||
}
|
||||
|
||||
// SetDescription sets field value
|
||||
// HasDescription returns a boolean if a field has been set.
|
||||
func (o *Key) HasDescription() bool {
|
||||
_, ok := o.GetDescriptionOk()
|
||||
return ok
|
||||
}
|
||||
|
||||
// SetDescription gets a reference to the given string and assigns it to the Description field.
|
||||
func (o *Key) SetDescription(v KeyGetDescriptionRetType) {
|
||||
setKeyGetDescriptionAttributeType(&o.Description, v)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -234,8 +234,7 @@ type KeyRing struct {
|
|||
// REQUIRED
|
||||
CreatedAt KeyRingGetCreatedAtAttributeType `json:"createdAt" required:"true"`
|
||||
// A user chosen description to distinguish multiple key rings.
|
||||
// REQUIRED
|
||||
Description KeyRingGetDescriptionAttributeType `json:"description" required:"true"`
|
||||
Description KeyRingGetDescriptionAttributeType `json:"description,omitempty"`
|
||||
// The display name to distinguish multiple key rings.
|
||||
// REQUIRED
|
||||
DisplayName KeyRingGetDisplayNameAttributeType `json:"displayName" required:"true"`
|
||||
|
|
@ -253,10 +252,9 @@ type _KeyRing KeyRing
|
|||
// This constructor will assign default values to properties that have it defined,
|
||||
// and makes sure properties required by API are set, but the set of arguments
|
||||
// will change when the set of required properties is changed
|
||||
func NewKeyRing(createdAt KeyRingGetCreatedAtArgType, description KeyRingGetDescriptionArgType, displayName KeyRingGetDisplayNameArgType, id KeyRingGetIdArgType, state KeyRingGetStateArgType) *KeyRing {
|
||||
func NewKeyRing(createdAt KeyRingGetCreatedAtArgType, displayName KeyRingGetDisplayNameArgType, id KeyRingGetIdArgType, state KeyRingGetStateArgType) *KeyRing {
|
||||
this := KeyRing{}
|
||||
setKeyRingGetCreatedAtAttributeType(&this.CreatedAt, createdAt)
|
||||
setKeyRingGetDescriptionAttributeType(&this.Description, description)
|
||||
setKeyRingGetDisplayNameAttributeType(&this.DisplayName, displayName)
|
||||
setKeyRingGetIdAttributeType(&this.Id, id)
|
||||
setKeyRingGetStateAttributeType(&this.State, state)
|
||||
|
|
@ -288,19 +286,25 @@ func (o *KeyRing) SetCreatedAt(v KeyRingGetCreatedAtRetType) {
|
|||
setKeyRingGetCreatedAtAttributeType(&o.CreatedAt, v)
|
||||
}
|
||||
|
||||
// GetDescription returns the Description field value
|
||||
func (o *KeyRing) GetDescription() (ret KeyRingGetDescriptionRetType) {
|
||||
ret, _ = o.GetDescriptionOk()
|
||||
return ret
|
||||
// GetDescription returns the Description field value if set, zero value otherwise.
|
||||
func (o *KeyRing) GetDescription() (res KeyRingGetDescriptionRetType) {
|
||||
res, _ = o.GetDescriptionOk()
|
||||
return
|
||||
}
|
||||
|
||||
// GetDescriptionOk returns a tuple with the Description field value
|
||||
// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
|
||||
// and a boolean to check if the value has been set.
|
||||
func (o *KeyRing) GetDescriptionOk() (ret KeyRingGetDescriptionRetType, ok bool) {
|
||||
return getKeyRingGetDescriptionAttributeTypeOk(o.Description)
|
||||
}
|
||||
|
||||
// SetDescription sets field value
|
||||
// HasDescription returns a boolean if a field has been set.
|
||||
func (o *KeyRing) HasDescription() bool {
|
||||
_, ok := o.GetDescriptionOk()
|
||||
return ok
|
||||
}
|
||||
|
||||
// SetDescription gets a reference to the given string and assigns it to the Description field.
|
||||
func (o *KeyRing) SetDescription(v KeyRingGetDescriptionRetType) {
|
||||
setKeyRingGetDescriptionAttributeType(&o.Description, v)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -407,8 +407,7 @@ type WrappingKey struct {
|
|||
// REQUIRED
|
||||
CreatedAt WrappingKeyGetCreatedAtAttributeType `json:"createdAt" required:"true"`
|
||||
// A user chosen description to distinguish multiple wrapping keys.
|
||||
// REQUIRED
|
||||
Description WrappingKeyGetDescriptionAttributeType `json:"description" required:"true"`
|
||||
Description WrappingKeyGetDescriptionAttributeType `json:"description,omitempty"`
|
||||
// The display name to distinguish multiple wrapping keys.
|
||||
// REQUIRED
|
||||
DisplayName WrappingKeyGetDisplayNameAttributeType `json:"displayName" required:"true"`
|
||||
|
|
@ -438,13 +437,12 @@ type _WrappingKey WrappingKey
|
|||
// This constructor will assign default values to properties that have it defined,
|
||||
// and makes sure properties required by API are set, but the set of arguments
|
||||
// will change when the set of required properties is changed
|
||||
func NewWrappingKey(accessScope WrappingKeyGetAccessScopeArgType, algorithm WrappingKeyGetAlgorithmArgType, backend WrappingKeyGetBackendArgType, createdAt WrappingKeyGetCreatedAtArgType, description WrappingKeyGetDescriptionArgType, displayName WrappingKeyGetDisplayNameArgType, expiresAt WrappingKeyGetExpiresAtArgType, id WrappingKeyGetIdArgType, keyRingId WrappingKeyGetKeyRingIdArgType, protection WrappingKeyGetProtectionArgType, purpose WrappingKeyGetPurposeArgType, state WrappingKeyGetStateArgType) *WrappingKey {
|
||||
func NewWrappingKey(accessScope WrappingKeyGetAccessScopeArgType, algorithm WrappingKeyGetAlgorithmArgType, backend WrappingKeyGetBackendArgType, createdAt WrappingKeyGetCreatedAtArgType, displayName WrappingKeyGetDisplayNameArgType, expiresAt WrappingKeyGetExpiresAtArgType, id WrappingKeyGetIdArgType, keyRingId WrappingKeyGetKeyRingIdArgType, protection WrappingKeyGetProtectionArgType, purpose WrappingKeyGetPurposeArgType, state WrappingKeyGetStateArgType) *WrappingKey {
|
||||
this := WrappingKey{}
|
||||
setWrappingKeyGetAccessScopeAttributeType(&this.AccessScope, accessScope)
|
||||
setWrappingKeyGetAlgorithmAttributeType(&this.Algorithm, algorithm)
|
||||
setWrappingKeyGetBackendAttributeType(&this.Backend, backend)
|
||||
setWrappingKeyGetCreatedAtAttributeType(&this.CreatedAt, createdAt)
|
||||
setWrappingKeyGetDescriptionAttributeType(&this.Description, description)
|
||||
setWrappingKeyGetDisplayNameAttributeType(&this.DisplayName, displayName)
|
||||
setWrappingKeyGetExpiresAtAttributeType(&this.ExpiresAt, expiresAt)
|
||||
setWrappingKeyGetIdAttributeType(&this.Id, id)
|
||||
|
|
@ -536,19 +534,25 @@ func (o *WrappingKey) SetCreatedAt(v WrappingKeyGetCreatedAtRetType) {
|
|||
setWrappingKeyGetCreatedAtAttributeType(&o.CreatedAt, v)
|
||||
}
|
||||
|
||||
// GetDescription returns the Description field value
|
||||
func (o *WrappingKey) GetDescription() (ret WrappingKeyGetDescriptionRetType) {
|
||||
ret, _ = o.GetDescriptionOk()
|
||||
return ret
|
||||
// GetDescription returns the Description field value if set, zero value otherwise.
|
||||
func (o *WrappingKey) GetDescription() (res WrappingKeyGetDescriptionRetType) {
|
||||
res, _ = o.GetDescriptionOk()
|
||||
return
|
||||
}
|
||||
|
||||
// GetDescriptionOk returns a tuple with the Description field value
|
||||
// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise
|
||||
// and a boolean to check if the value has been set.
|
||||
func (o *WrappingKey) GetDescriptionOk() (ret WrappingKeyGetDescriptionRetType, ok bool) {
|
||||
return getWrappingKeyGetDescriptionAttributeTypeOk(o.Description)
|
||||
}
|
||||
|
||||
// SetDescription sets field value
|
||||
// HasDescription returns a boolean if a field has been set.
|
||||
func (o *WrappingKey) HasDescription() bool {
|
||||
_, ok := o.GetDescriptionOk()
|
||||
return ok
|
||||
}
|
||||
|
||||
// SetDescription gets a reference to the given string and assigns it to the Description field.
|
||||
func (o *WrappingKey) SetDescription(v WrappingKeyGetDescriptionRetType) {
|
||||
setWrappingKeyGetDescriptionAttributeType(&o.Description, v)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,26 @@ func setGetInstanceResponseGetBackupScheduleAttributeType(arg *GetInstanceRespon
|
|||
type GetInstanceResponseGetBackupScheduleArgType = string
|
||||
type GetInstanceResponseGetBackupScheduleRetType = string
|
||||
|
||||
/*
|
||||
types and functions for connectionInfo
|
||||
*/
|
||||
|
||||
// isModel
|
||||
type GetInstanceResponseGetConnectionInfoAttributeType = *InstanceConnectionInfo
|
||||
type GetInstanceResponseGetConnectionInfoArgType = InstanceConnectionInfo
|
||||
type GetInstanceResponseGetConnectionInfoRetType = InstanceConnectionInfo
|
||||
|
||||
func getGetInstanceResponseGetConnectionInfoAttributeTypeOk(arg GetInstanceResponseGetConnectionInfoAttributeType) (ret GetInstanceResponseGetConnectionInfoRetType, ok bool) {
|
||||
if arg == nil {
|
||||
return ret, false
|
||||
}
|
||||
return *arg, true
|
||||
}
|
||||
|
||||
func setGetInstanceResponseGetConnectionInfoAttributeType(arg *GetInstanceResponseGetConnectionInfoAttributeType, val GetInstanceResponseGetConnectionInfoRetType) {
|
||||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for encryption
|
||||
*/
|
||||
|
|
@ -267,6 +287,8 @@ type GetInstanceResponse struct {
|
|||
// The schedule for on what time and how often the database backup will be created. The schedule is written as a cron schedule.
|
||||
// REQUIRED
|
||||
BackupSchedule GetInstanceResponseGetBackupScheduleAttributeType `json:"backupSchedule" required:"true"`
|
||||
// REQUIRED
|
||||
ConnectionInfo GetInstanceResponseGetConnectionInfoAttributeType `json:"connectionInfo" required:"true"`
|
||||
Encryption GetInstanceResponseGetEncryptionAttributeType `json:"encryption,omitempty"`
|
||||
// The id of the instance flavor.
|
||||
// REQUIRED
|
||||
|
|
@ -303,9 +325,10 @@ type _GetInstanceResponse GetInstanceResponse
|
|||
// This constructor will assign default values to properties that have it defined,
|
||||
// and makes sure properties required by API are set, but the set of arguments
|
||||
// will change when the set of required properties is changed
|
||||
func NewGetInstanceResponse(backupSchedule GetInstanceResponseGetBackupScheduleArgType, flavorId GetInstanceResponseGetFlavorIdArgType, id GetInstanceResponseGetIdArgType, isDeletable GetInstanceResponsegetIsDeletableArgType, name GetInstanceResponseGetNameArgType, network GetInstanceResponseGetNetworkArgType, replicas GetInstanceResponseGetReplicasArgType, retentionDays GetInstanceResponseGetRetentionDaysArgType, status GetInstanceResponseGetStatusArgType, storage GetInstanceResponseGetStorageArgType, version GetInstanceResponseGetVersionArgType) *GetInstanceResponse {
|
||||
func NewGetInstanceResponse(backupSchedule GetInstanceResponseGetBackupScheduleArgType, connectionInfo GetInstanceResponseGetConnectionInfoArgType, flavorId GetInstanceResponseGetFlavorIdArgType, id GetInstanceResponseGetIdArgType, isDeletable GetInstanceResponsegetIsDeletableArgType, name GetInstanceResponseGetNameArgType, network GetInstanceResponseGetNetworkArgType, replicas GetInstanceResponseGetReplicasArgType, retentionDays GetInstanceResponseGetRetentionDaysArgType, status GetInstanceResponseGetStatusArgType, storage GetInstanceResponseGetStorageArgType, version GetInstanceResponseGetVersionArgType) *GetInstanceResponse {
|
||||
this := GetInstanceResponse{}
|
||||
setGetInstanceResponseGetBackupScheduleAttributeType(&this.BackupSchedule, backupSchedule)
|
||||
setGetInstanceResponseGetConnectionInfoAttributeType(&this.ConnectionInfo, connectionInfo)
|
||||
setGetInstanceResponseGetFlavorIdAttributeType(&this.FlavorId, flavorId)
|
||||
setGetInstanceResponseGetIdAttributeType(&this.Id, id)
|
||||
setGetInstanceResponsegetIsDeletableAttributeType(&this.IsDeletable, isDeletable)
|
||||
|
|
@ -344,6 +367,23 @@ func (o *GetInstanceResponse) SetBackupSchedule(v GetInstanceResponseGetBackupSc
|
|||
setGetInstanceResponseGetBackupScheduleAttributeType(&o.BackupSchedule, v)
|
||||
}
|
||||
|
||||
// GetConnectionInfo returns the ConnectionInfo field value
|
||||
func (o *GetInstanceResponse) GetConnectionInfo() (ret GetInstanceResponseGetConnectionInfoRetType) {
|
||||
ret, _ = o.GetConnectionInfoOk()
|
||||
return ret
|
||||
}
|
||||
|
||||
// GetConnectionInfoOk returns a tuple with the ConnectionInfo field value
|
||||
// and a boolean to check if the value has been set.
|
||||
func (o *GetInstanceResponse) GetConnectionInfoOk() (ret GetInstanceResponseGetConnectionInfoRetType, ok bool) {
|
||||
return getGetInstanceResponseGetConnectionInfoAttributeTypeOk(o.ConnectionInfo)
|
||||
}
|
||||
|
||||
// SetConnectionInfo sets field value
|
||||
func (o *GetInstanceResponse) SetConnectionInfo(v GetInstanceResponseGetConnectionInfoRetType) {
|
||||
setGetInstanceResponseGetConnectionInfoAttributeType(&o.ConnectionInfo, v)
|
||||
}
|
||||
|
||||
// GetEncryption returns the Encryption field value if set, zero value otherwise.
|
||||
func (o *GetInstanceResponse) GetEncryption() (res GetInstanceResponseGetEncryptionRetType) {
|
||||
res, _ = o.GetEncryptionOk()
|
||||
|
|
@ -542,6 +582,12 @@ func (o GetInstanceResponse) ToMap() (map[string]interface{}, error) {
|
|||
if val, ok := getGetInstanceResponseGetBackupScheduleAttributeTypeOk(o.BackupSchedule); ok {
|
||||
toSerialize["BackupSchedule"] = val
|
||||
}
|
||||
if val, ok := getGetInstanceResponseGetConnectionInfoAttributeTypeOk(o.ConnectionInfo); ok {
|
||||
toSerialize["ConnectionInfo"] = val
|
||||
}
|
||||
if val, ok := getGetInstanceResponseGetEncryptionAttributeTypeOk(o.Encryption); ok {
|
||||
toSerialize["Encryption"] = val
|
||||
}
|
||||
if val, ok := getGetInstanceResponseGetFlavorIdAttributeTypeOk(o.FlavorId); ok {
|
||||
toSerialize["FlavorId"] = val
|
||||
}
|
||||
|
|
|
|||
|
|
@ -354,6 +354,7 @@ type ApiGetVPNGatewayStatusRequest interface {
|
|||
}
|
||||
|
||||
type ApiListGatewayConnectionsRequest interface {
|
||||
LabelSelector(labelSelector map[string]string) ApiListGatewayConnectionsRequest
|
||||
Execute() (*ConnectionList, error)
|
||||
}
|
||||
|
||||
|
|
@ -1860,11 +1861,17 @@ func (a *APIClient) GetVPNGatewayStatusExecute(ctx context.Context, projectId st
|
|||
}
|
||||
|
||||
type ListGatewayConnectionsRequest struct {
|
||||
ctx context.Context
|
||||
apiService *DefaultApiService
|
||||
projectId string
|
||||
region Region
|
||||
gatewayName string
|
||||
ctx context.Context
|
||||
apiService *DefaultApiService
|
||||
projectId string
|
||||
region Region
|
||||
gatewayName string
|
||||
labelSelector *map[string]string
|
||||
}
|
||||
|
||||
func (r ListGatewayConnectionsRequest) LabelSelector(labelSelector map[string]string) ApiListGatewayConnectionsRequest {
|
||||
r.labelSelector = &labelSelector
|
||||
return r
|
||||
}
|
||||
|
||||
func (r ListGatewayConnectionsRequest) Execute() (*ConnectionList, error) {
|
||||
|
|
@ -1893,6 +1900,9 @@ func (r ListGatewayConnectionsRequest) Execute() (*ConnectionList, error) {
|
|||
localVarQueryParams := url.Values{}
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.labelSelector != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "label_selector", r.labelSelector, "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,26 @@ func setConnectiongetEnabledAttributeType(arg *ConnectiongetEnabledAttributeType
|
|||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for labels
|
||||
*/
|
||||
|
||||
// isContainer
|
||||
type ConnectionGetLabelsAttributeType = *map[string]string
|
||||
type ConnectionGetLabelsArgType = map[string]string
|
||||
type ConnectionGetLabelsRetType = map[string]string
|
||||
|
||||
func getConnectionGetLabelsAttributeTypeOk(arg ConnectionGetLabelsAttributeType) (ret ConnectionGetLabelsRetType, ok bool) {
|
||||
if arg == nil {
|
||||
return ret, false
|
||||
}
|
||||
return *arg, true
|
||||
}
|
||||
|
||||
func setConnectionGetLabelsAttributeType(arg *ConnectionGetLabelsAttributeType, val ConnectionGetLabelsRetType) {
|
||||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for localSubnets
|
||||
*/
|
||||
|
|
@ -142,6 +162,8 @@ func setConnectionGetTunnel2AttributeType(arg *ConnectionGetTunnel2AttributeType
|
|||
type Connection struct {
|
||||
// This flag decides whether this connection should be enabled or disabled
|
||||
Enabled ConnectiongetEnabledAttributeType `json:"enabled,omitempty"`
|
||||
// Map of custom labels. Key and values must be max 63 chars, start/end with alphanumeric.
|
||||
Labels ConnectionGetLabelsAttributeType `json:"labels,omitempty"`
|
||||
// List of local subnets (IPv4 CIDR).
|
||||
// REQUIRED
|
||||
LocalSubnets ConnectionGetLocalSubnetsAttributeType `json:"localSubnets" required:"true"`
|
||||
|
|
@ -204,6 +226,29 @@ func (o *Connection) SetEnabled(v ConnectiongetEnabledRetType) {
|
|||
setConnectiongetEnabledAttributeType(&o.Enabled, v)
|
||||
}
|
||||
|
||||
// GetLabels returns the Labels field value if set, zero value otherwise.
|
||||
func (o *Connection) GetLabels() (res ConnectionGetLabelsRetType) {
|
||||
res, _ = o.GetLabelsOk()
|
||||
return
|
||||
}
|
||||
|
||||
// GetLabelsOk returns a tuple with the Labels field value if set, nil otherwise
|
||||
// and a boolean to check if the value has been set.
|
||||
func (o *Connection) GetLabelsOk() (ret ConnectionGetLabelsRetType, ok bool) {
|
||||
return getConnectionGetLabelsAttributeTypeOk(o.Labels)
|
||||
}
|
||||
|
||||
// HasLabels returns a boolean if a field has been set.
|
||||
func (o *Connection) HasLabels() bool {
|
||||
_, ok := o.GetLabelsOk()
|
||||
return ok
|
||||
}
|
||||
|
||||
// SetLabels gets a reference to the given map[string]string and assigns it to the Labels field.
|
||||
func (o *Connection) SetLabels(v ConnectionGetLabelsRetType) {
|
||||
setConnectionGetLabelsAttributeType(&o.Labels, v)
|
||||
}
|
||||
|
||||
// GetLocalSubnets returns the LocalSubnets field value
|
||||
func (o *Connection) GetLocalSubnets() (ret ConnectionGetLocalSubnetsRetType) {
|
||||
ret, _ = o.GetLocalSubnetsOk()
|
||||
|
|
@ -294,6 +339,9 @@ func (o Connection) ToMap() (map[string]interface{}, error) {
|
|||
if val, ok := getConnectiongetEnabledAttributeTypeOk(o.Enabled); ok {
|
||||
toSerialize["Enabled"] = val
|
||||
}
|
||||
if val, ok := getConnectionGetLabelsAttributeTypeOk(o.Labels); ok {
|
||||
toSerialize["Labels"] = val
|
||||
}
|
||||
if val, ok := getConnectionGetLocalSubnetsAttributeTypeOk(o.LocalSubnets); ok {
|
||||
toSerialize["LocalSubnets"] = val
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,26 @@ func setConnectionRequestgetEnabledAttributeType(arg *ConnectionRequestgetEnable
|
|||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for labels
|
||||
*/
|
||||
|
||||
// isContainer
|
||||
type ConnectionRequestGetLabelsAttributeType = *map[string]string
|
||||
type ConnectionRequestGetLabelsArgType = map[string]string
|
||||
type ConnectionRequestGetLabelsRetType = map[string]string
|
||||
|
||||
func getConnectionRequestGetLabelsAttributeTypeOk(arg ConnectionRequestGetLabelsAttributeType) (ret ConnectionRequestGetLabelsRetType, ok bool) {
|
||||
if arg == nil {
|
||||
return ret, false
|
||||
}
|
||||
return *arg, true
|
||||
}
|
||||
|
||||
func setConnectionRequestGetLabelsAttributeType(arg *ConnectionRequestGetLabelsAttributeType, val ConnectionRequestGetLabelsRetType) {
|
||||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for localSubnets
|
||||
*/
|
||||
|
|
@ -142,6 +162,8 @@ func setConnectionRequestGetTunnel2AttributeType(arg *ConnectionRequestGetTunnel
|
|||
type ConnectionRequest struct {
|
||||
// This flag decides whether this connection should be enabled or disabled
|
||||
Enabled ConnectionRequestgetEnabledAttributeType `json:"enabled,omitempty"`
|
||||
// Map of custom labels. Key and values must be max 63 chars, start/end with alphanumeric.
|
||||
Labels ConnectionRequestGetLabelsAttributeType `json:"labels,omitempty"`
|
||||
// List of local subnets (IPv4 CIDR).
|
||||
// REQUIRED
|
||||
LocalSubnets ConnectionRequestGetLocalSubnetsAttributeType `json:"localSubnets" required:"true"`
|
||||
|
|
@ -204,6 +226,29 @@ func (o *ConnectionRequest) SetEnabled(v ConnectionRequestgetEnabledRetType) {
|
|||
setConnectionRequestgetEnabledAttributeType(&o.Enabled, v)
|
||||
}
|
||||
|
||||
// GetLabels returns the Labels field value if set, zero value otherwise.
|
||||
func (o *ConnectionRequest) GetLabels() (res ConnectionRequestGetLabelsRetType) {
|
||||
res, _ = o.GetLabelsOk()
|
||||
return
|
||||
}
|
||||
|
||||
// GetLabelsOk returns a tuple with the Labels field value if set, nil otherwise
|
||||
// and a boolean to check if the value has been set.
|
||||
func (o *ConnectionRequest) GetLabelsOk() (ret ConnectionRequestGetLabelsRetType, ok bool) {
|
||||
return getConnectionRequestGetLabelsAttributeTypeOk(o.Labels)
|
||||
}
|
||||
|
||||
// HasLabels returns a boolean if a field has been set.
|
||||
func (o *ConnectionRequest) HasLabels() bool {
|
||||
_, ok := o.GetLabelsOk()
|
||||
return ok
|
||||
}
|
||||
|
||||
// SetLabels gets a reference to the given map[string]string and assigns it to the Labels field.
|
||||
func (o *ConnectionRequest) SetLabels(v ConnectionRequestGetLabelsRetType) {
|
||||
setConnectionRequestGetLabelsAttributeType(&o.Labels, v)
|
||||
}
|
||||
|
||||
// GetLocalSubnets returns the LocalSubnets field value
|
||||
func (o *ConnectionRequest) GetLocalSubnets() (ret ConnectionRequestGetLocalSubnetsRetType) {
|
||||
ret, _ = o.GetLocalSubnetsOk()
|
||||
|
|
@ -294,6 +339,9 @@ func (o ConnectionRequest) ToMap() (map[string]interface{}, error) {
|
|||
if val, ok := getConnectionRequestgetEnabledAttributeTypeOk(o.Enabled); ok {
|
||||
toSerialize["Enabled"] = val
|
||||
}
|
||||
if val, ok := getConnectionRequestGetLabelsAttributeTypeOk(o.Labels); ok {
|
||||
toSerialize["Labels"] = val
|
||||
}
|
||||
if val, ok := getConnectionRequestGetLocalSubnetsAttributeTypeOk(o.LocalSubnets); ok {
|
||||
toSerialize["LocalSubnets"] = val
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,26 @@ func setCreateGatewayConnectionPayloadgetEnabledAttributeType(arg *CreateGateway
|
|||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for labels
|
||||
*/
|
||||
|
||||
// isContainer
|
||||
type CreateGatewayConnectionPayloadGetLabelsAttributeType = *map[string]string
|
||||
type CreateGatewayConnectionPayloadGetLabelsArgType = map[string]string
|
||||
type CreateGatewayConnectionPayloadGetLabelsRetType = map[string]string
|
||||
|
||||
func getCreateGatewayConnectionPayloadGetLabelsAttributeTypeOk(arg CreateGatewayConnectionPayloadGetLabelsAttributeType) (ret CreateGatewayConnectionPayloadGetLabelsRetType, ok bool) {
|
||||
if arg == nil {
|
||||
return ret, false
|
||||
}
|
||||
return *arg, true
|
||||
}
|
||||
|
||||
func setCreateGatewayConnectionPayloadGetLabelsAttributeType(arg *CreateGatewayConnectionPayloadGetLabelsAttributeType, val CreateGatewayConnectionPayloadGetLabelsRetType) {
|
||||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for localSubnets
|
||||
*/
|
||||
|
|
@ -142,6 +162,8 @@ func setCreateGatewayConnectionPayloadGetTunnel2AttributeType(arg *CreateGateway
|
|||
type CreateGatewayConnectionPayload struct {
|
||||
// This flag decides whether this connection should be enabled or disabled
|
||||
Enabled CreateGatewayConnectionPayloadgetEnabledAttributeType `json:"enabled,omitempty"`
|
||||
// Map of custom labels. Key and values must be max 63 chars, start/end with alphanumeric.
|
||||
Labels CreateGatewayConnectionPayloadGetLabelsAttributeType `json:"labels,omitempty"`
|
||||
// List of local subnets (IPv4 CIDR).
|
||||
// REQUIRED
|
||||
LocalSubnets CreateGatewayConnectionPayloadGetLocalSubnetsAttributeType `json:"localSubnets" required:"true"`
|
||||
|
|
@ -204,6 +226,29 @@ func (o *CreateGatewayConnectionPayload) SetEnabled(v CreateGatewayConnectionPay
|
|||
setCreateGatewayConnectionPayloadgetEnabledAttributeType(&o.Enabled, v)
|
||||
}
|
||||
|
||||
// GetLabels returns the Labels field value if set, zero value otherwise.
|
||||
func (o *CreateGatewayConnectionPayload) GetLabels() (res CreateGatewayConnectionPayloadGetLabelsRetType) {
|
||||
res, _ = o.GetLabelsOk()
|
||||
return
|
||||
}
|
||||
|
||||
// GetLabelsOk returns a tuple with the Labels field value if set, nil otherwise
|
||||
// and a boolean to check if the value has been set.
|
||||
func (o *CreateGatewayConnectionPayload) GetLabelsOk() (ret CreateGatewayConnectionPayloadGetLabelsRetType, ok bool) {
|
||||
return getCreateGatewayConnectionPayloadGetLabelsAttributeTypeOk(o.Labels)
|
||||
}
|
||||
|
||||
// HasLabels returns a boolean if a field has been set.
|
||||
func (o *CreateGatewayConnectionPayload) HasLabels() bool {
|
||||
_, ok := o.GetLabelsOk()
|
||||
return ok
|
||||
}
|
||||
|
||||
// SetLabels gets a reference to the given map[string]string and assigns it to the Labels field.
|
||||
func (o *CreateGatewayConnectionPayload) SetLabels(v CreateGatewayConnectionPayloadGetLabelsRetType) {
|
||||
setCreateGatewayConnectionPayloadGetLabelsAttributeType(&o.Labels, v)
|
||||
}
|
||||
|
||||
// GetLocalSubnets returns the LocalSubnets field value
|
||||
func (o *CreateGatewayConnectionPayload) GetLocalSubnets() (ret CreateGatewayConnectionPayloadGetLocalSubnetsRetType) {
|
||||
ret, _ = o.GetLocalSubnetsOk()
|
||||
|
|
@ -294,6 +339,9 @@ func (o CreateGatewayConnectionPayload) ToMap() (map[string]interface{}, error)
|
|||
if val, ok := getCreateGatewayConnectionPayloadgetEnabledAttributeTypeOk(o.Enabled); ok {
|
||||
toSerialize["Enabled"] = val
|
||||
}
|
||||
if val, ok := getCreateGatewayConnectionPayloadGetLabelsAttributeTypeOk(o.Labels); ok {
|
||||
toSerialize["Labels"] = val
|
||||
}
|
||||
if val, ok := getCreateGatewayConnectionPayloadGetLocalSubnetsAttributeTypeOk(o.LocalSubnets); ok {
|
||||
toSerialize["LocalSubnets"] = val
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,26 @@ func setUpdateGatewayConnectionPayloadgetEnabledAttributeType(arg *UpdateGateway
|
|||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for labels
|
||||
*/
|
||||
|
||||
// isContainer
|
||||
type UpdateGatewayConnectionPayloadGetLabelsAttributeType = *map[string]string
|
||||
type UpdateGatewayConnectionPayloadGetLabelsArgType = map[string]string
|
||||
type UpdateGatewayConnectionPayloadGetLabelsRetType = map[string]string
|
||||
|
||||
func getUpdateGatewayConnectionPayloadGetLabelsAttributeTypeOk(arg UpdateGatewayConnectionPayloadGetLabelsAttributeType) (ret UpdateGatewayConnectionPayloadGetLabelsRetType, ok bool) {
|
||||
if arg == nil {
|
||||
return ret, false
|
||||
}
|
||||
return *arg, true
|
||||
}
|
||||
|
||||
func setUpdateGatewayConnectionPayloadGetLabelsAttributeType(arg *UpdateGatewayConnectionPayloadGetLabelsAttributeType, val UpdateGatewayConnectionPayloadGetLabelsRetType) {
|
||||
*arg = &val
|
||||
}
|
||||
|
||||
/*
|
||||
types and functions for localSubnets
|
||||
*/
|
||||
|
|
@ -142,6 +162,8 @@ func setUpdateGatewayConnectionPayloadGetTunnel2AttributeType(arg *UpdateGateway
|
|||
type UpdateGatewayConnectionPayload struct {
|
||||
// This flag decides whether this connection should be enabled or disabled
|
||||
Enabled UpdateGatewayConnectionPayloadgetEnabledAttributeType `json:"enabled,omitempty"`
|
||||
// Map of custom labels. Key and values must be max 63 chars, start/end with alphanumeric.
|
||||
Labels UpdateGatewayConnectionPayloadGetLabelsAttributeType `json:"labels,omitempty"`
|
||||
// List of local subnets (IPv4 CIDR).
|
||||
// REQUIRED
|
||||
LocalSubnets UpdateGatewayConnectionPayloadGetLocalSubnetsAttributeType `json:"localSubnets" required:"true"`
|
||||
|
|
@ -204,6 +226,29 @@ func (o *UpdateGatewayConnectionPayload) SetEnabled(v UpdateGatewayConnectionPay
|
|||
setUpdateGatewayConnectionPayloadgetEnabledAttributeType(&o.Enabled, v)
|
||||
}
|
||||
|
||||
// GetLabels returns the Labels field value if set, zero value otherwise.
|
||||
func (o *UpdateGatewayConnectionPayload) GetLabels() (res UpdateGatewayConnectionPayloadGetLabelsRetType) {
|
||||
res, _ = o.GetLabelsOk()
|
||||
return
|
||||
}
|
||||
|
||||
// GetLabelsOk returns a tuple with the Labels field value if set, nil otherwise
|
||||
// and a boolean to check if the value has been set.
|
||||
func (o *UpdateGatewayConnectionPayload) GetLabelsOk() (ret UpdateGatewayConnectionPayloadGetLabelsRetType, ok bool) {
|
||||
return getUpdateGatewayConnectionPayloadGetLabelsAttributeTypeOk(o.Labels)
|
||||
}
|
||||
|
||||
// HasLabels returns a boolean if a field has been set.
|
||||
func (o *UpdateGatewayConnectionPayload) HasLabels() bool {
|
||||
_, ok := o.GetLabelsOk()
|
||||
return ok
|
||||
}
|
||||
|
||||
// SetLabels gets a reference to the given map[string]string and assigns it to the Labels field.
|
||||
func (o *UpdateGatewayConnectionPayload) SetLabels(v UpdateGatewayConnectionPayloadGetLabelsRetType) {
|
||||
setUpdateGatewayConnectionPayloadGetLabelsAttributeType(&o.Labels, v)
|
||||
}
|
||||
|
||||
// GetLocalSubnets returns the LocalSubnets field value
|
||||
func (o *UpdateGatewayConnectionPayload) GetLocalSubnets() (ret UpdateGatewayConnectionPayloadGetLocalSubnetsRetType) {
|
||||
ret, _ = o.GetLocalSubnetsOk()
|
||||
|
|
@ -294,6 +339,9 @@ func (o UpdateGatewayConnectionPayload) ToMap() (map[string]interface{}, error)
|
|||
if val, ok := getUpdateGatewayConnectionPayloadgetEnabledAttributeTypeOk(o.Enabled); ok {
|
||||
toSerialize["Enabled"] = val
|
||||
}
|
||||
if val, ok := getUpdateGatewayConnectionPayloadGetLabelsAttributeTypeOk(o.Labels); ok {
|
||||
toSerialize["Labels"] = val
|
||||
}
|
||||
if val, ok := getUpdateGatewayConnectionPayloadGetLocalSubnetsAttributeTypeOk(o.LocalSubnets); ok {
|
||||
toSerialize["LocalSubnets"] = val
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,6 +67,9 @@ func CreateInstanceWaitHandler(
|
|||
if s == nil || s.Id == nil || *s.Id != instanceId || s.Status == nil {
|
||||
return false, nil, nil
|
||||
}
|
||||
tflog.Debug(ctx, "waiting for instance ready", map[string]interface{}{
|
||||
"status": *s.Status,
|
||||
})
|
||||
switch *s.Status {
|
||||
default:
|
||||
return true, s, fmt.Errorf("instance with id %s has unexpected status %s", instanceId, *s.Status)
|
||||
|
|
@ -92,17 +95,19 @@ func CreateInstanceWaitHandler(
|
|||
if extendedTimeout < 3 {
|
||||
maxWait = maxWait + time.Minute*5
|
||||
extendedTimeout = extendedTimeout + 1
|
||||
if s.Network == nil || s.Network.InstanceAddress == nil {
|
||||
tflog.Warn(ctx, "Waiting for instance_address")
|
||||
return false, nil, nil
|
||||
}
|
||||
if s.Network.RouterAddress == nil {
|
||||
tflog.Warn(ctx, "Waiting for router_address")
|
||||
return false, nil, nil
|
||||
}
|
||||
if s.Status == nil {
|
||||
tflog.Warn(ctx, "Waiting for status")
|
||||
return false, nil, nil
|
||||
if *s.Network.AccessScope == "SNA" {
|
||||
ready := true
|
||||
if s.Network == nil || s.Network.InstanceAddress == nil {
|
||||
tflog.Warn(ctx, "Waiting for instance_address")
|
||||
ready = false
|
||||
}
|
||||
if s.Network.RouterAddress == nil {
|
||||
tflog.Warn(ctx, "Waiting for router_address")
|
||||
ready = false
|
||||
}
|
||||
if !ready {
|
||||
return false, nil, nil
|
||||
}
|
||||
}
|
||||
if s.IsDeletable == nil {
|
||||
tflog.Warn(ctx, "Waiting for is_deletable")
|
||||
|
|
@ -113,13 +118,15 @@ func CreateInstanceWaitHandler(
|
|||
instanceCreated = true
|
||||
instanceGetResponse = s
|
||||
case InstanceStateSuccess:
|
||||
if s.Network == nil || s.Network.InstanceAddress == nil {
|
||||
tflog.Warn(ctx, "Waiting for instance_address")
|
||||
return false, nil, nil
|
||||
}
|
||||
if s.Network.RouterAddress == nil {
|
||||
tflog.Info(ctx, "Waiting for router_address")
|
||||
return false, nil, nil
|
||||
if *s.Network.AccessScope == "SNA" {
|
||||
if s.Network == nil || s.Network.InstanceAddress == nil {
|
||||
tflog.Warn(ctx, "Waiting for instance_address")
|
||||
return false, nil, nil
|
||||
}
|
||||
if s.Network.RouterAddress == nil {
|
||||
tflog.Info(ctx, "Waiting for router_address")
|
||||
return false, nil, nil
|
||||
}
|
||||
}
|
||||
instanceCreated = true
|
||||
instanceGetResponse = s
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ func Build() error {
|
|||
if err = cmd.Wait(); err != nil {
|
||||
var exitErr *exec.ExitError
|
||||
if errors.As(err, &exitErr) {
|
||||
slog.Error("cmd.Wait", "code", exitErr.ExitCode())
|
||||
slog.Error("cmd.Wait", "code", exitErr.ExitCode(), "error", err, "stdout", stdOut.String(), "stderr", stdErr.String())
|
||||
return fmt.Errorf("%s", stdErr.String())
|
||||
}
|
||||
if err != nil {
|
||||
|
|
@ -486,7 +486,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
|
|||
if err = cmd2.Wait(); err != nil {
|
||||
var exitErr *exec.ExitError
|
||||
if errors.As(err, &exitErr) {
|
||||
slog.Error("cmd.Wait", "code", exitErr.ExitCode())
|
||||
slog.Error("cmd.Wait", "code", exitErr.ExitCode(), "error", err)
|
||||
return fmt.Errorf("%s", stdErr.String())
|
||||
}
|
||||
if err != nil {
|
||||
|
|
@ -528,7 +528,7 @@ func generateServiceFiles(rootDir, generatorDir string) error {
|
|||
if err = cmd3.Wait(); err != nil {
|
||||
var exitErr *exec.ExitError
|
||||
if errors.As(err, &exitErr) {
|
||||
slog.Error("cmd.Wait", "code", exitErr.ExitCode())
|
||||
slog.Error("cmd.Wait", "code", exitErr.ExitCode(), "error", err)
|
||||
return fmt.Errorf("%s", stdErr.String())
|
||||
}
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue