tfstated/pkg/webui/html/states.html
Julien Dessaux 8f17a3661e
Some checks failed
main / main (push) Failing after 20s
main / deploy (push) Has been skipped
main / publish (push) Has been skipped
chore(webui): prepare lock code for webui force unlock
#13
2025-05-02 00:26:32 +02:00

91 lines
3.1 KiB
HTML

{{ define "main" }}
<h1>States</h1>
<div class="flex-row" style="justify-content:space-between;">
<div style="min-width:240px;">
<p>TfStated is currently managing <strong>{{ len .States }}</strong> states.</p>
<p>Use this page to inspect the existing states.</p>
<p>You also have the option to upload a JSON state file in order to create a new state in TfStated. This is equivalent to using the <code>state push</code> command of OpenTofu/Terraform on a brand new state.</p>
</div>
<form action="/states" enctype="multipart/form-data" method="post">
<input name="csrf_token" type="hidden" value="{{ .Page.Session.Data.CsrfToken }}">
<fieldset>
<legend>New State</legend>
<div class="grid-2">
<label for="path">Path</label>
<input {{ if or .PathDuplicate .PathError }}class="error"{{ end }}
id="path"
name="path"
required
type="text"
value="{{ .Path }}">
<label for="file" style="min-width:120px;">JSON state file</label>
<input id="file"
name="file"
required
type="file">
</div>
{{ if .PathDuplicate }}
<span class="error">This path already exist.</span>
{{ else if .PathError }}
<span class="error">
Path needs to be a valid
<span class="tooltip">
absolute
<span class="tooltip-text">
URL path is considered absolute when it starts with a <code>/</code> character.
</span>
</span>
and
<span class="tooltip">
clean
<span class="tooltip-text">
A URL path is considered clean when it has no relative path elements like <code>../</code>, repeated <code>//</code> and when it does not end with a <code>/</code>.
</span>
</span>
URL path.
</span>
{{ end }}
<div style="align-self:stretch; display:flex; justify-content:flex-end;">
<button type="submit" value="submit">Upload and Create State</button>
</div>
</fieldset>
</form>
</div>
<article>
<table style="width:100%;">
<thead>
<tr>
<th>Path</th>
<th>Updated</th>
<th>Locked</th>
</tr>
</thead>
<tbody>
{{ range .States }}
<tr>
<td><a href="/states/{{ .Id }}">{{ .Path }}</a></td>
<td>{{ .Updated }}</td>
<td style="text-align:center;">
{{ if eq .Lock nil }}
unlocked
{{ else }}
<span class="tooltip">
<strong>locked</strong>
<span class="tooltip-text">
<strong>Created: </strong>{{ .Lock.Created }}<br>
<strong>Id: </strong>{{ .Lock.Id }}<br>
<strong>Info: </strong>{{ .Lock.Info }}<br>
<strong>Operation: </strong>{{ .Lock.Operation }}<br>
<strong>Path: </strong>{{ .Lock.Path }}<br>
<strong>Version: </strong>{{ .Lock.Version }}<br>
<strong>Who: </strong>{{ .Lock.Who }}
</span>
</span>
{{ end }}
</td>
</tr>
{{ end }}
</tbody>
</table>
</article>
{{ end }}