Fission supportability: Add dump command to dump information for debugging (#754)

* Add v1 support tool proposal
* Fission supportability: Add dump command to dump information for debugging
This commit is contained in:
Ta-Ching Chen
2018-09-19 14:35:51 +08:00
committed by GitHub
parent a86c9431d3
commit 6b49c194ca
25 changed files with 1397 additions and 609 deletions
+29 -28
View File
@@ -17,6 +17,7 @@ import (
"github.com/fission/fission"
"github.com/fission/fission/crd"
"github.com/fission/fission/fission/log"
"github.com/fission/fission/fission/util"
"github.com/fission/fission/v1"
)
@@ -51,11 +52,11 @@ func getV1URL(serverUrl string) string {
func get(url string) []byte {
resp, err := http.Get(url)
checkErr(err, "get fission v0.1 state")
util.CheckErr(err, "get fission v0.1 state")
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
checkErr(err, "reading server response")
util.CheckErr(err, "reading server response")
if resp.StatusCode != 200 {
log.Fatal(fmt.Sprintf("Failed to fetch fission v0.1 state: %v", string(body)))
@@ -70,7 +71,7 @@ func (nr *nameRemapper) trackName(old string) {
maxLen := 63
ok, err := regexp.MatchString(kubeNameRegex, old)
checkErr(err, "match name regexp")
util.CheckErr(err, "match name regexp")
if ok && len(old) < maxLen {
// no rename
nr.oldToNew[old] = old
@@ -82,17 +83,17 @@ func (nr *nameRemapper) trackName(old string) {
// remove disallowed
inv, err := regexp.Compile("[^-a-z0-9]")
checkErr(err, "compile regexp")
util.CheckErr(err, "compile regexp")
newName = string(inv.ReplaceAll([]byte(newName), []byte("-")))
// trim leading non-alphabetic
leadingnonalpha, err := regexp.Compile("^[^a-z]+")
checkErr(err, "compile regexp")
util.CheckErr(err, "compile regexp")
newName = string(leadingnonalpha.ReplaceAll([]byte(newName), []byte{}))
// trim trailing
trailing, err := regexp.Compile("[^a-z0-9]+$")
checkErr(err, "compile regexp")
util.CheckErr(err, "compile regexp")
newName = string(trailing.ReplaceAll([]byte(newName), []byte{}))
// truncate to length
@@ -125,32 +126,32 @@ func upgradeDumpV1State(v1url string, filename string) {
fmt.Println("Getting environments")
resp := get(v1url + "/environments")
err := json.Unmarshal(resp, &v1state.Environments)
checkErr(err, "parse server response")
util.CheckErr(err, "parse server response")
fmt.Println("Getting watches")
resp = get(v1url + "/watches")
err = json.Unmarshal(resp, &v1state.Watches)
checkErr(err, "parse server response")
util.CheckErr(err, "parse server response")
fmt.Println("Getting routes")
resp = get(v1url + "/triggers/http")
err = json.Unmarshal(resp, &v1state.HTTPTriggers)
checkErr(err, "parse server response")
util.CheckErr(err, "parse server response")
fmt.Println("Getting message queue triggers")
resp = get(v1url + "/triggers/messagequeue")
err = json.Unmarshal(resp, &v1state.Mqtriggers)
checkErr(err, "parse server response")
util.CheckErr(err, "parse server response")
fmt.Println("Getting time triggers")
resp = get(v1url + "/triggers/time")
err = json.Unmarshal(resp, &v1state.TimeTriggers)
checkErr(err, "parse server response")
util.CheckErr(err, "parse server response")
fmt.Println("Getting function list")
resp = get(v1url + "/functions")
err = json.Unmarshal(resp, &v1state.Functions)
checkErr(err, "parse server response")
util.CheckErr(err, "parse server response")
// we have to change names that are disallowed in kubernetes
nr := nameRemapper{
@@ -199,7 +200,7 @@ func upgradeDumpV1State(v1url string, filename string) {
// unmarshal
err = json.Unmarshal(resp, &f)
checkErr(err, "parse server response")
util.CheckErr(err, "parse server response")
// load into a map to remove duplicates
funcs[f.Metadata] = f
@@ -216,14 +217,14 @@ func upgradeDumpV1State(v1url string, filename string) {
// serialize v1state
out, err := json.MarshalIndent(v1state, "", " ")
checkErr(err, "serialize v0.1 state")
util.CheckErr(err, "serialize v0.1 state")
// dump to file fission-v01-state.json
if len(filename) == 0 {
filename = "fission-v01-state.json"
}
err = ioutil.WriteFile(filename, out, 0644)
checkErr(err, "write file")
util.CheckErr(err, "write file")
fmt.Printf("Done: Saved %v functions, %v HTTP triggers, %v watches, %v message queue triggers, %v time triggers.\n",
len(v1state.Functions), len(v1state.HTTPTriggers), len(v1state.Watches), len(v1state.Mqtriggers), len(v1state.TimeTriggers))
@@ -249,7 +250,7 @@ func upgradeDumpState(c *cli.Context) error {
// check v1
resp, err := http.Get(u + "/environments")
checkErr(err, "reach fission server")
util.CheckErr(err, "reach fission server")
if resp.StatusCode == http.StatusNotFound {
msg := fmt.Sprintf("Server %v isn't a v1 Fission server. Use --server to point at a pre-0.2.x Fission server.", u)
log.Fatal(msg)
@@ -266,14 +267,14 @@ func upgradeRestoreState(c *cli.Context) error {
}
contents, err := ioutil.ReadFile(filename)
checkErr(err, fmt.Sprintf("open file %v", filename))
util.CheckErr(err, fmt.Sprintf("open file %v", filename))
var v1state V1FissionState
err = json.Unmarshal(contents, &v1state)
checkErr(err, "parse dumped v1 state")
util.CheckErr(err, "parse dumped v1 state")
// create a regular v2 client
client := getClient(c.GlobalString("server"))
client := util.GetApiClient(c.GlobalString("server"))
// create functions
for _, f := range v1state.Functions {
@@ -284,9 +285,9 @@ func upgradeRestoreState(c *cli.Context) error {
// write function to file
tmpfile, err := ioutil.TempFile("", pkgName)
checkErr(err, "create temporary file")
util.CheckErr(err, "create temporary file")
code, err := base64.StdEncoding.DecodeString(f.Code)
checkErr(err, "decode base64 function contents")
util.CheckErr(err, "decode base64 function contents")
tmpfile.Write(code)
tmpfile.Sync()
tmpfile.Close()
@@ -310,7 +311,7 @@ func upgradeRestoreState(c *cli.Context) error {
},
Spec: pkgSpec,
})
checkErr(err, fmt.Sprintf("create package %v", pkgName))
util.CheckErr(err, fmt.Sprintf("create package %v", pkgName))
_, err = client.FunctionCreate(&crd.Function{
Metadata: *crdMetadataFromV1Metadata(&f.Metadata, v1state.NameChanges),
Spec: fission.FunctionSpec{
@@ -324,7 +325,7 @@ func upgradeRestoreState(c *cli.Context) error {
},
},
})
checkErr(err, fmt.Sprintf("create function %v", v1state.NameChanges[f.Metadata.Name]))
util.CheckErr(err, fmt.Sprintf("create function %v", v1state.NameChanges[f.Metadata.Name]))
}
@@ -339,7 +340,7 @@ func upgradeRestoreState(c *cli.Context) error {
},
},
})
checkErr(err, fmt.Sprintf("create environment %v", e.Metadata.Name))
util.CheckErr(err, fmt.Sprintf("create environment %v", e.Metadata.Name))
}
// create httptriggers
@@ -352,7 +353,7 @@ func upgradeRestoreState(c *cli.Context) error {
FunctionReference: *functionRefFromV1Metadata(&t.Function, v1state.NameChanges),
},
})
checkErr(err, fmt.Sprintf("create http trigger %v", t.Metadata.Name))
util.CheckErr(err, fmt.Sprintf("create http trigger %v", t.Metadata.Name))
}
// create mqtriggers
@@ -366,7 +367,7 @@ func upgradeRestoreState(c *cli.Context) error {
ResponseTopic: t.ResponseTopic,
},
})
checkErr(err, fmt.Sprintf("create http trigger %v", t.Metadata.Name))
util.CheckErr(err, fmt.Sprintf("create http trigger %v", t.Metadata.Name))
}
// create time triggers
@@ -378,7 +379,7 @@ func upgradeRestoreState(c *cli.Context) error {
Cron: t.Cron,
},
})
checkErr(err, fmt.Sprintf("create time trigger %v", t.Metadata.Name))
util.CheckErr(err, fmt.Sprintf("create time trigger %v", t.Metadata.Name))
}
// create watches
@@ -391,7 +392,7 @@ func upgradeRestoreState(c *cli.Context) error {
FunctionReference: *functionRefFromV1Metadata(&t.Function, v1state.NameChanges),
},
})
checkErr(err, fmt.Sprintf("create kubernetes watch trigger %v", t.Metadata.Name))
util.CheckErr(err, fmt.Sprintf("create kubernetes watch trigger %v", t.Metadata.Name))
}
return nil