diff --git a/cmd/cloudinitsave/cloudinitsave.go b/cmd/cloudinitsave/cloudinitsave.go index 4e4b6bc0..e2568083 100644 --- a/cmd/cloudinitsave/cloudinitsave.go +++ b/cmd/cloudinitsave/cloudinitsave.go @@ -97,23 +97,6 @@ func saveCloudConfig() error { return nil } -func RequiresNetwork(datasource string) bool { - // TODO: move into the datasources (and metadatasources) - // and then we can enable that platforms defaults.. - parts := strings.SplitN(datasource, ":", 2) - requiresNetwork, ok := map[string]bool{ - "ec2": true, - "file": false, - "url": true, - "cmdline": true, - "configdrive": false, - "digitalocean": true, - "gce": true, - "packet": true, - }[parts[0]] - return ok && requiresNetwork -} - func saveFiles(cloudConfigBytes, scriptBytes []byte, metadata datasource.Metadata) error { os.MkdirAll(rancherConfig.CloudConfigDir, os.ModeDir|0600) diff --git a/config/cloudinit/datasource/waagent/waagent.go b/config/cloudinit/datasource/waagent/waagent.go deleted file mode 100644 index 6a50bebb..00000000 --- a/config/cloudinit/datasource/waagent/waagent.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2015 CoreOS, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package waagent - -import ( - "encoding/xml" - "fmt" - "io/ioutil" - "net" - "os" - "path" - - "github.com/rancher/os/config/cloudinit/datasource" - "github.com/rancher/os/pkg/log" -) - -type Waagent struct { - root string - readFile func(filename string) ([]byte, error) - lastError error -} - -func NewDatasource(root string) *Waagent { - return &Waagent{root, ioutil.ReadFile, nil} -} - -func (a *Waagent) IsAvailable() bool { - _, a.lastError = os.Stat(path.Join(a.root, "provisioned")) - return !os.IsNotExist(a.lastError) -} - -func (a *Waagent) Finish() error { - return nil -} - -func (a *Waagent) String() string { - return fmt.Sprintf("%s: %s (lastError: %v)", a.Type(), a.root, a.lastError) -} - -func (a *Waagent) AvailabilityChanges() bool { - return true -} - -func (a *Waagent) ConfigRoot() string { - return a.root -} - -func (a *Waagent) FetchMetadata() (metadata datasource.Metadata, err error) { - var metadataBytes []byte - if metadataBytes, err = a.tryReadFile(path.Join(a.root, "SharedConfig.xml")); err != nil { - return - } - if len(metadataBytes) == 0 { - return - } - - type Instance struct { - ID string `xml:"id,attr"` - Address string `xml:"address,attr"` - InputEndpoints struct { - Endpoints []struct { - LoadBalancedPublicAddress string `xml:"loadBalancedPublicAddress,attr"` - } `xml:"Endpoint"` - } - } - - type SharedConfig struct { - Incarnation struct { - Instance string `xml:"instance,attr"` - } - Instances struct { - Instances []Instance `xml:"Instance"` - } - } - - var m SharedConfig - if err = xml.Unmarshal(metadataBytes, &m); err != nil { - return - } - - var instance Instance - for _, i := range m.Instances.Instances { - if i.ID == m.Incarnation.Instance { - instance = i - break - } - } - - metadata.PrivateIPv4 = net.ParseIP(instance.Address) - for _, e := range instance.InputEndpoints.Endpoints { - host, _, err := net.SplitHostPort(e.LoadBalancedPublicAddress) - if err == nil { - metadata.PublicIPv4 = net.ParseIP(host) - break - } - } - return -} - -func (a *Waagent) FetchUserdata() ([]byte, error) { - return a.tryReadFile(path.Join(a.root, "CustomData")) -} - -func (a *Waagent) Type() string { - return "Waagent" -} - -func (a *Waagent) tryReadFile(filename string) ([]byte, error) { - log.Printf("Attempting to read from %q\n", filename) - data, err := a.readFile(filename) - if os.IsNotExist(err) { - err = nil - } - return data, err -} diff --git a/config/cloudinit/datasource/waagent/waagent_test.go b/config/cloudinit/datasource/waagent/waagent_test.go deleted file mode 100644 index b455f6bd..00000000 --- a/config/cloudinit/datasource/waagent/waagent_test.go +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2015 CoreOS, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package waagent - -import ( - "net" - "reflect" - "testing" - - "github.com/rancher/os/config/cloudinit/datasource" - "github.com/rancher/os/config/cloudinit/datasource/test" -) - -func TestFetchMetadata(t *testing.T) { - for _, tt := range []struct { - root string - files test.MockFilesystem - metadata datasource.Metadata - }{ - { - root: "/", - files: test.NewMockFilesystem(), - }, - { - root: "/", - files: test.NewMockFilesystem(test.File{Path: "/SharedConfig.xml", Contents: ""}), - }, - { - root: "/var/lib/Waagent", - files: test.NewMockFilesystem(test.File{Path: "/var/lib/Waagent/SharedConfig.xml", Contents: ""}), - }, - { - root: "/var/lib/Waagent", - files: test.NewMockFilesystem(test.File{Path: "/var/lib/Waagent/SharedConfig.xml", Contents: ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -`}), - metadata: datasource.Metadata{ - PrivateIPv4: net.ParseIP("100.73.202.64"), - PublicIPv4: net.ParseIP("191.239.39.77"), - }, - }, - } { - a := Waagent{tt.root, tt.files.ReadFile, nil} - metadata, err := a.FetchMetadata() - if err != nil { - t.Fatalf("bad error for %+v: want %v, got %q", tt, nil, err) - } - if !reflect.DeepEqual(tt.metadata, metadata) { - t.Fatalf("bad metadata for %+v: want %#v, got %#v", tt, tt.metadata, metadata) - } - } -} - -func TestFetchUserdata(t *testing.T) { - for _, tt := range []struct { - root string - files test.MockFilesystem - }{ - { - "/", - test.NewMockFilesystem(), - }, - { - "/", - test.NewMockFilesystem(test.File{Path: "/CustomData", Contents: ""}), - }, - { - "/var/lib/Waagent/", - test.NewMockFilesystem(test.File{Path: "/var/lib/Waagent/CustomData", Contents: ""}), - }, - } { - a := Waagent{tt.root, tt.files.ReadFile, nil} - _, err := a.FetchUserdata() - if err != nil { - t.Fatalf("bad error for %+v: want %v, got %q", tt, nil, err) - } - } -} - -func TestConfigRoot(t *testing.T) { - for _, tt := range []struct { - root string - configRoot string - }{ - { - "/", - "/", - }, - { - "/var/lib/Waagent", - "/var/lib/Waagent", - }, - } { - a := Waagent{tt.root, nil, nil} - if configRoot := a.ConfigRoot(); configRoot != tt.configRoot { - t.Fatalf("bad config root for %q: want %q, got %q", tt, tt.configRoot, configRoot) - } - } -} - -func TestNewDatasource(t *testing.T) { - for _, tt := range []struct { - root string - expectRoot string - }{ - { - root: "", - expectRoot: "", - }, - { - root: "/var/lib/Waagent", - expectRoot: "/var/lib/Waagent", - }, - } { - service := NewDatasource(tt.root) - if service.root != tt.expectRoot { - t.Fatalf("bad root (%q): want %q, got %q", tt.root, tt.expectRoot, service.root) - } - } -}