data/:label API stores extra data for a deployment

This commit is contained in:
Dr Nic Williams 2015-08-27 21:06:28 -07:00
parent e123fd88a1
commit f31d730e50
6 changed files with 55 additions and 11 deletions

View File

@ -2,6 +2,7 @@
api=${api:-"http://localhost:3000"}
set -e
set -x
for bosh in $(ls upload/fixtures/bosh*.json); do
@ -15,8 +16,8 @@ for boshdeployment in $(ls upload/fixtures/deployment-*.json); do
done
for data in $(ls upload/fixtures/data*.json); do
reallyuuid=$(cat $data | jq -r ".reallyuuid")
deployment_name=$(cat $data | jq -r ".deployment_name")
deployment_name=$(cat $data | jq -r ".deploymentname")
label=$(cat $data | jq -r ".label")
curl ${api}/upload/${reallyuuid}/deployments/${deployment_name}/data/${label} \
-v -X POST -u admin:admin -d "$(cat $boshdeployment)"
-v -X POST -u admin:admin -d "$(cat $data)"
done

View File

@ -36,6 +36,22 @@ type Deployment struct {
Version string
}
CloudConfig string
ExtraData ExtraData
}
// ExtraData is uploaded data about a running Deployment
type ExtraData map[string]*DeploymentData
// DeploymentData describes extra data about a running Deployment
type DeploymentData struct {
ReallyUUID string
DeploymentName string
Label string
Data []struct {
Indicator string
Value string
Label string
}
}
// UpdateBOSH constructs a BOSH from the uploaded BOSH data
@ -62,10 +78,22 @@ func (bosh *BOSH) UpdateDeployment(uploadedDeployment *upload.BOSHDeployment) {
Releases: uploadedDeployment.Releases,
Stemcells: uploadedDeployment.Stemcells,
CloudConfig: uploadedDeployment.CloudConfig,
ExtraData: ExtraData{},
}
bosh.Deployments[deployment.Name] = deployment
}
// UpdateDeploymentData adds/updates addition data about a BOSH deployment in action
func (deployment *Deployment) UpdateDeploymentData(uploadedData *upload.DeploymentData) {
data := &DeploymentData{
ReallyUUID: uploadedData.ReallyUUID,
DeploymentName: uploadedData.DeploymentName,
Label: uploadedData.Label,
Data: uploadedData.Data,
}
deployment.ExtraData[data.Label] = data
}
// NewDeploymentsPerBOSH constructs a new mapping of Deployments to each BOSH
func NewDeploymentsPerBOSH() DeploymentsPerBOSH {
return DeploymentsPerBOSH{}

17
main.go
View File

@ -59,14 +59,21 @@ func updateDeployment(params martini.Params, uploadedDeployment upload.BOSHDeplo
return 200, ""
}
func updateDeploymentExtraData(params martini.Params, extraData upload.ExtraData) (int, string) {
func updateDeploymentExtraData(params martini.Params, data upload.DeploymentData) (int, string) {
reallyUUID := params["reallyuuid"]
deploymentName := params["name"]
extraLabel := params["label"]
// bosh := db[reallyUUID]
bosh := db[reallyUUID]
if bosh == nil {
return 404, fmt.Sprintf("unknown UUID `%s'", reallyUUID)
}
deployment := bosh.Deployments[deploymentName]
if deployment == nil {
return 404, fmt.Sprintf("unknown deployment name `%s'", deploymentName)
}
fmt.Println(reallyUUID, deploymentName, extraLabel)
fmt.Printf("%#v\n", data)
deployment.UpdateDeploymentData(&data)
return 200, ""
}
@ -102,7 +109,7 @@ func runWebserver(c *cli.Context) {
m.Get("/db", getDatabase)
m.Post("/upload", binding.Json(upload.BOSH{}), updateBOSH)
m.Post("/upload/:reallyuuid/deployments/:name", binding.Json(upload.BOSHDeployment{}), updateDeployment)
m.Post("/upload/:reallyuuid/deployments/:name/data/:label", binding.Json(upload.ExtraData{}), updateDeploymentExtraData)
m.Post("/upload/:reallyuuid/deployments/:name/data/:label", binding.Json(upload.DeploymentData{}), updateDeploymentExtraData)
m.Run()
}

View File

@ -1,6 +1,6 @@
{
"reallyuuid": "10.10.10.11-uuid-aws-bosh-production",
"deployment_name": "cf-aws-prod",
"deploymentname": "cf-aws-prod",
"label": "backups-rds",
"data": [
{

View File

@ -1,6 +1,6 @@
{
"reallyuuid": "10.10.10.11-uuid-aws-bosh-production",
"deployment_name": "cf-aws-prod",
"deploymentname": "cf-aws-prod",
"label": "backups-nfs",
"data": [
{

View File

@ -25,6 +25,14 @@ type BOSHDeployment struct {
CloudConfig string `form:"cloudconfig"`
}
// ExtraData captures some extra data about a deployment from a plugin
type ExtraData struct {
// DeploymentData captures some extra data about a deployment from a plugin
type DeploymentData struct {
ReallyUUID string `json:"reallyuuid"`
DeploymentName string `json:"deploymentname"`
Label string `json:"label"`
Data []struct {
Indicator string
Value string
Label string
} `json:"data"`
}