// UnmarshalJSON implements the json.Unmarshaler interface for deserializing the JSON // representation of an RC. func (rc *RC) UnmarshalJSON(b []byte) error { var rawRC RawRC if err := json.Unmarshal(b, &rawRC); err != nil { return err } m, err := pods.ManifestFromBytes([]byte(rawRC.Manifest)) if err != nil { return err } nodeSel, err := labels.Parse(rawRC.NodeSelector) if err != nil { return err } *rc = RC{ ID: rawRC.ID, Manifest: m, NodeSelector: nodeSel, PodLabels: rawRC.PodLabels, ReplicasDesired: rawRC.ReplicasDesired, Disabled: rawRC.Disabled, } return nil }
func (r RCtl) Create(manifestPath, nodeSelector string, podLabels map[string]string) { manifest, err := pods.ManifestFromPath(manifestPath) if err != nil { r.logger.WithErrorAndFields(err, logrus.Fields{ "manifest": manifestPath, }).Fatalln("Could not read pod manifest") } nodeSel, err := klabels.Parse(nodeSelector) if err != nil { r.logger.WithErrorAndFields(err, logrus.Fields{ "selector": nodeSelector, }).Fatalln("Could not parse node selector") } newRC, err := r.rcs.Create(manifest, nodeSel, klabels.Set(podLabels)) if err != nil { r.logger.WithError(err).Fatalln("Could not create replication controller in Consul") } r.logger.WithField("id", newRC.ID).Infoln("Created new replication controller") }