diff --git a/libmachine/provision/fedora_test.go b/libmachine/provision/fedora_test.go index 15ddd302da..c98a6edebe 100644 --- a/libmachine/provision/fedora_test.go +++ b/libmachine/provision/fedora_test.go @@ -9,7 +9,7 @@ func TestFedoraGenerateYumRepoList(t *testing.T) { info := &OsRelease{ ID: "fedora", } - p := NewCentosProvisioner(nil) + p := NewFedoraProvisioner(nil) p.SetOsReleaseInfo(info) buf, err := generateYumRepoList(p) diff --git a/libmachine/provision/oraclelinux.go b/libmachine/provision/oraclelinux.go new file mode 100644 index 0000000000..56d263741d --- /dev/null +++ b/libmachine/provision/oraclelinux.go @@ -0,0 +1,25 @@ +package provision + +import ( + "github.com/docker/machine/libmachine/drivers" +) + +func init() { + Register("OracleLinux", &RegisteredProvisioner{ + New: NewOracleLinuxProvisioner, + }) +} + +func NewOracleLinuxProvisioner(d drivers.Driver) Provisioner { + return &OracleLinuxProvisioner{ + NewRedHatProvisioner("ol", d), + } +} + +type OracleLinuxProvisioner struct { + *RedHatProvisioner +} + +func (provisioner *OracleLinuxProvisioner) String() string { + return "ol" +} diff --git a/libmachine/provision/oraclelinux_test.go b/libmachine/provision/oraclelinux_test.go new file mode 100644 index 0000000000..22ca69a99e --- /dev/null +++ b/libmachine/provision/oraclelinux_test.go @@ -0,0 +1,29 @@ +package provision + +import ( + "regexp" + "testing" +) + +func TestOracleLinuxGenerateYumRepoList(t *testing.T) { + info := &OsRelease{ + ID: "ol", + Version: "7.2", + } + p := NewOracleLinuxProvisioner(nil) + p.SetOsReleaseInfo(info) + + buf, err := generateYumRepoList(p) + if err != nil { + t.Fatal(err) + } + + m, err := regexp.MatchString(".*oraclelinux/7.*", buf.String()) + if err != nil { + t.Fatal(err) + } + + if !m { + t.Fatalf("expected match for oraclelinux/7") + } +} diff --git a/libmachine/provision/redhat.go b/libmachine/provision/redhat.go index 1e9d7e4aac..88df09043a 100644 --- a/libmachine/provision/redhat.go +++ b/libmachine/provision/redhat.go @@ -4,6 +4,7 @@ import ( "bytes" "errors" "fmt" + "regexp" "text/template" "github.com/docker/machine/libmachine/auth" @@ -39,6 +40,8 @@ LimitNPROC=1048576 LimitCORE=infinity Environment={{range .EngineOptions.Env}}{{ printf "%q" . }} {{end}} ` + + majorVersionRE = regexp.MustCompile(`^(\d+)(\..*)?`) ) type PackageListInfo struct { @@ -168,7 +171,7 @@ func (provisioner *RedHatProvisioner) Provision(swarmOptions swarm.Options, auth } // update OS -- this is needed for libdevicemapper and the docker install - if _, err := provisioner.SSHCommand("sudo yum -y update"); err != nil { + if _, err := provisioner.SSHCommand("sudo -E yum -y update"); err != nil { return err } @@ -246,6 +249,13 @@ func generateYumRepoList(provisioner Provisioner) (*bytes.Buffer, error) { case "fedora": packageListInfo.OsRelease = "fedora" packageListInfo.OsReleaseVersion = "22" + case "ol": + packageListInfo.OsRelease = "oraclelinux" + v := majorVersionRE.FindStringSubmatch(releaseInfo.Version) + if v == nil { + return nil, fmt.Errorf("unable to determine major version of %s", releaseInfo.Version) + } + packageListInfo.OsReleaseVersion = v[1] default: return nil, ErrUnknownYumOsRelease }