func marshalAndCreate(o interface{}, ns string, client kubectl.Runner) ([]byte, error) { var b bytes.Buffer if err := codec.JSON.Encode(&b).One(o); err != nil { return nil, err } data := b.Bytes() log.Debug("File: %s", string(data)) return client.Create(data, ns) }
// uploadManifests sends manifests to Kubectl in a particular order. func uploadManifests(c *chart.Chart, namespace string, client kubectl.Runner) error { // Install known kinds in a predictable order. for _, k := range InstallOrder { for _, m := range c.Kind[k] { o := m.VersionedObject o.AddAnnotations(map[string]string{ chart.AnnFile: m.Source, chart.AnnChartVersion: c.Chartfile.Version, chart.AnnChartDesc: c.Chartfile.Description, chart.AnnChartName: c.Chartfile.Name, }) var data []byte var err error if data, err = o.JSON(); err != nil { return err } log.Debug("File: %s", string(data)) out, err := client.Create(data, namespace) log.Msg(string(out)) if err != nil { return err } } } // Install unknown kinds afterward. Order here is not predictable. for _, k := range c.UnknownKinds(InstallOrder) { for _, o := range c.Kind[k] { o.VersionedObject.AddAnnotations(map[string]string{chart.AnnFile: o.Source}) out, err := marshalAndCreate(o.VersionedObject, namespace, client) log.Msg(string(out)) if err != nil { return err } } } return nil }