Add terraform state registry (#36710)
Adds terraform/opentofu state registry with locking. Implements: https://github.com/go-gitea/gitea/issues/33644. I also checked [encrypted state](https://opentofu.org/docs/language/state/encryption), it works out of the box. Docs PR: https://gitea.com/gitea/docs/pulls/357 --------- Co-authored-by: Andras Elso <elso.andras@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
26
templates/package/content/terraform.tmpl
Normal file
26
templates/package/content/terraform.tmpl
Normal file
@@ -0,0 +1,26 @@
|
||||
{{if eq .PackageDescriptor.Package.Type "terraform"}}
|
||||
<h4 class="ui top attached header">{{ctx.Locale.Tr "packages.installation"}}</h4>
|
||||
<div class="ui attached segment">
|
||||
<div class="ui form">
|
||||
<div class="field">
|
||||
<label>{{svg "octicon-code"}} {{ctx.Locale.Tr "packages.terraform.install"}}</label>
|
||||
<div class="markup"><pre class="code-block"><code>terraform {
|
||||
backend "http" {
|
||||
address = "{{ctx.AppFullLink}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/terraform/state/{{$.PackageDescriptor.Package.Name}}""
|
||||
lock_address = "{{ctx.AppFullLink}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/terraform/state/{{$.PackageDescriptor.Package.Name}}/lock"
|
||||
unlock_address = "{{ctx.AppFullLink}}/api/packages/{{$.PackageDescriptor.Owner.Name}}/terraform/state/{{$.PackageDescriptor.Package.Name}}/lock"
|
||||
lock_method = "POST"
|
||||
unlock_method = "DELETE"
|
||||
}
|
||||
}</code></pre></div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>{{svg "octicon-terminal"}} {{ctx.Locale.Tr "packages.terraform.install2"}}</label>
|
||||
<div class="markup"><pre class="code-block"><code>terraform init -migrate-state</code></pre></div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label>{{ctx.Locale.Tr "packages.registry.documentation" "Terraform" "https://docs.gitea.com/usage/packages/terraform"}}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
41
templates/package/metadata/terraform.tmpl
Normal file
41
templates/package/metadata/terraform.tmpl
Normal file
@@ -0,0 +1,41 @@
|
||||
{{if eq .PackageDescriptor.Package.Type "terraform"}}
|
||||
{{$data := $.PackageVersionViewData}}
|
||||
{{if $data.IsLatestVersion}}
|
||||
<div class="divider"></div>
|
||||
<div class="item tw-flex tw-flex-col tw-gap-2">
|
||||
<div>
|
||||
<strong>{{ctx.Locale.Tr "packages.terraform.lock_status"}}</strong>
|
||||
</div>
|
||||
<div>
|
||||
{{if $data.TerraformLock}}
|
||||
<div class="flex-text-block">
|
||||
{{svg "octicon-lock" 16 "tw-text-red"}}
|
||||
<span>{{ctx.Locale.Tr "packages.terraform.locked_by" $data.TerraformLock.Who}}</span>
|
||||
</div>
|
||||
<div class="tw-text-xs tw-ml-6 tw-break-anywhere">
|
||||
{{DateUtils.TimeSince $data.TerraformLock.Created}} ({{$data.TerraformLock.Operation}})
|
||||
</div>
|
||||
{{if .CanWritePackages}}
|
||||
<div>
|
||||
<form action="{{.PackageDescriptor.VersionWebLink}}/terraform/unlock" method="post">
|
||||
<button class="ui tiny button tw-w-full">{{ctx.Locale.Tr "packages.terraform.unlock"}}</button>
|
||||
</form>
|
||||
</div>
|
||||
{{end}}
|
||||
{{else}}
|
||||
<div class="flex-text-block">
|
||||
{{svg "octicon-unlock" 16 "tw-text-green"}}
|
||||
<span>{{ctx.Locale.Tr "packages.terraform.unlocked"}}</span>
|
||||
</div>
|
||||
{{if .CanWritePackages}}
|
||||
<div>
|
||||
<form action="{{.PackageDescriptor.VersionWebLink}}/terraform/lock" method="post">
|
||||
<button class="ui tiny button tw-w-full">{{ctx.Locale.Tr "packages.terraform.lock"}}</button>
|
||||
</form>
|
||||
</div>
|
||||
{{end}}
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
{{end}}
|
||||
@@ -33,6 +33,7 @@
|
||||
{{template "package/content/rpm" .}}
|
||||
{{template "package/content/rubygems" .}}
|
||||
{{template "package/content/swift" .}}
|
||||
{{template "package/content/terraform" .}}
|
||||
{{template "package/content/vagrant" .}}
|
||||
</div>
|
||||
<div class="ui segment packages-content-right">
|
||||
@@ -64,6 +65,7 @@
|
||||
{{template "package/metadata/rpm" .}}
|
||||
{{template "package/metadata/rubygems" .}}
|
||||
{{template "package/metadata/swift" .}}
|
||||
{{template "package/metadata/terraform" .}}
|
||||
{{template "package/metadata/vagrant" .}}
|
||||
{{if not (and (eq .PackageDescriptor.Package.Type "container") .PackageDescriptor.Metadata.Manifests)}}
|
||||
<div class="item">{{svg "octicon-database"}} {{FileSize .PackageDescriptor.CalculateBlobSize}}</div>
|
||||
|
||||
@@ -3,12 +3,14 @@
|
||||
<div role="main" aria-label="{{.Title}}" class="page-content organization packages">
|
||||
{{template "org/header" .}}
|
||||
<div class="ui container">
|
||||
{{template "base/alert" .}}
|
||||
{{template "package/shared/view" .}}
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div role="main" aria-label="{{.Title}}" class="page-content user profile packages">
|
||||
<div class="ui container">
|
||||
{{template "base/alert" .}}
|
||||
<div class="ui stackable grid">
|
||||
<div class="ui four wide column">
|
||||
{{template "shared/user/profile_big_avatar" .}}
|
||||
|
||||
1
templates/swagger/v1_json.tmpl
generated
1
templates/swagger/v1_json.tmpl
generated
@@ -3835,6 +3835,7 @@
|
||||
"rpm",
|
||||
"rubygems",
|
||||
"swift",
|
||||
"terraform",
|
||||
"vagrant"
|
||||
],
|
||||
"type": "string",
|
||||
|
||||
Reference in New Issue
Block a user