Commit b8c81ed6 authored by Lukas Burgey's avatar Lukas Burgey

Initialize the repo with the scripts.go

parents
package scripts
import (
"encoding/json"
"log"
)
type (
// SSHKey of a user
SSHKey struct {
Name string `json:"name"`
Key string `json:"key"`
}
// Group a group of which User is a member of
Group struct {
Name string `json:"name"`
}
// UserInfo info about the user
UserInfo map[string]interface{}
// User describes the user info
User struct {
// TODO maybe just handover the raw userinfo
Email string `json:"email"`
// TODO maybe just handover the raw userinfo
//Groups []Group `json:"groups"`
UserInfo UserInfo `json:"userinfo"`
}
// Input of the deployment script
Input struct {
// StateTarget is the state which is to be reached by this deployment task
// StateTarget is either Deployed or NotDeployed
StateTarget State `json:"state_target"`
// User describes the user of this deployment task
User User `json:"user"`
// Key contains the ssh key of this deployment task
Key SSHKey `json:"key"`
// Questionnaire is an answered questionnaire
// Maps a question name to the answer of the user
// The keys (question names) *must* be identical to those of the Output.Questionnaire
// containing the questions
Questionnaire map[string]string `json:"questionnaire"`
}
// Output of the deployment script
Output struct {
// State of the deployment, after the script execution
// when State == Questionnaire then Output.Questionnaire *must* be set
// when State == Deployed then Output.Credentials *can* be set
State State `json:"state"`
// TODO use this correctly
// Message for the user
Msg string `json:"message"`
// Questionnaire requested by the script
// Ignored when State is not Questionnaire
// Maps a question name to a description of the question
Questionnaire map[string]string `json:"questionnaire"`
// Credentials for the user
// Ignored when State is not Deployed
// Maps a credential name to a credential value
Credentials map[string]string `json:"credentials"`
}
// State is a string enum
// The enum values for State are listed below
State string
)
const (
// Deployed value for State
Deployed State = "deployed"
// NotDeployed value for State
NotDeployed State = "not_deployed"
// Rejected value for State
// the user can never be deployed
Rejected State = "rejected"
// Failed value for State
// the deployment can be retried
Failed State = "failed"
// Questionnaire value for State
// the user has to fill the questionnaire
// with the questionnaire data the deployment can be retried
Questionnaire State = "questionnaire"
)
func (u User) String() string {
return u.Email
}
func (k SSHKey) String() string {
return k.Name
}
func (i Input) String() string {
iBytes, err := i.Marshal()
if err != nil {
log.Fatal(err)
}
return string(iBytes)
}
func (o Output) String() string {
oBytes, err := o.Marshal()
if err != nil {
log.Fatal(err)
}
return string(oBytes)
}
// Marshal encodes an Input as json
func (i Input) Marshal() (iBytes []byte, err error) {
iBytes, err = json.MarshalIndent(i, "", " ")
return
}
// Marshal encodes an Output as json
func (o Output) Marshal() (oBytes []byte, err error) {
oBytes, err = json.MarshalIndent(o, "", " ")
return
}
// UnmarshalInput decodes a json encoded input
func UnmarshalInput(inputBytes []byte) (i Input, err error) {
err = json.Unmarshal(inputBytes, &i)
return
}
// UnmarshalOutput decodes a json encoded output
func UnmarshalOutput(inputBytes []byte) (i Output, err error) {
err = json.Unmarshal(inputBytes, &i)
return
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment