X Tutup
Skip to content

Commit b43a76d

Browse files
committed
add GetOsReleaseInfo to provisioner to assist in testing; add tests for rpm repo
Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
1 parent 01bf2ea commit b43a76d

File tree

7 files changed

+116
-4
lines changed

7 files changed

+116
-4
lines changed

libmachine/provision/boot2docker.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,10 @@ func (provisioner *Boot2DockerProvisioner) SetOsReleaseInfo(info *OsRelease) {
172172
provisioner.OsReleaseInfo = info
173173
}
174174

175+
func (provisioner *Boot2DockerProvisioner) GetOsReleaseInfo() (*OsRelease, error) {
176+
return provisioner.OsReleaseInfo, nil
177+
}
178+
175179
func (provisioner *Boot2DockerProvisioner) Provision(swarmOptions swarm.SwarmOptions, authOptions auth.AuthOptions, engineOptions engine.EngineOptions) error {
176180
provisioner.SwarmOptions = swarmOptions
177181
provisioner.AuthOptions = authOptions
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package provision
2+
3+
import (
4+
"regexp"
5+
"testing"
6+
)
7+
8+
func TestCentosGenerateYumRepoList(t *testing.T) {
9+
info := &OsRelease{
10+
Id: "centos",
11+
}
12+
p := NewCentosProvisioner(nil)
13+
p.SetOsReleaseInfo(info)
14+
15+
buf, err := generateYumRepoList(p)
16+
if err != nil {
17+
t.Fatal(err)
18+
}
19+
20+
m, err := regexp.MatchString(".*centos/7.*", buf.String())
21+
if err != nil {
22+
t.Fatal(err)
23+
}
24+
25+
if !m {
26+
t.Fatalf("expected match for centos/7")
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package provision
2+
3+
import (
4+
"regexp"
5+
"testing"
6+
)
7+
8+
func TestFedoraGenerateYumRepoList(t *testing.T) {
9+
info := &OsRelease{
10+
Id: "fedora",
11+
}
12+
p := NewCentosProvisioner(nil)
13+
p.SetOsReleaseInfo(info)
14+
15+
buf, err := generateYumRepoList(p)
16+
if err != nil {
17+
t.Fatal(err)
18+
}
19+
20+
m, err := regexp.MatchString(".*fedora/22.*", buf.String())
21+
if err != nil {
22+
t.Fatal(err)
23+
}
24+
25+
if !m {
26+
t.Fatalf("expected match for fedora/22")
27+
}
28+
}

libmachine/provision/generic.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ func (provisioner *GenericProvisioner) SetOsReleaseInfo(info *OsRelease) {
6868
provisioner.OsReleaseInfo = info
6969
}
7070

71+
func (provisioner *GenericProvisioner) GetOsReleaseInfo() (*OsRelease, error) {
72+
return provisioner.OsReleaseInfo, nil
73+
}
74+
7175
func (provisioner *GenericProvisioner) GenerateDockerOptions(dockerPort int) (*DockerOptions, error) {
7276
var (
7377
engineCfg bytes.Buffer

libmachine/provision/provisioner.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ type Provisioner interface {
5656
// Set the OS Release info depending on how it's represented
5757
// internally
5858
SetOsReleaseInfo(info *OsRelease)
59+
60+
// Get the OS Release info for the current provisioner
61+
GetOsReleaseInfo() (*OsRelease, error)
5962
}
6063

6164
// Detection

libmachine/provision/redhat.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,15 @@ func (provisioner *RedHatProvisioner) GenerateDockerOptions(dockerPort int) (*Do
277277
}, nil
278278
}
279279

280-
func (provisioner *RedHatProvisioner) ConfigurePackageList() error {
280+
func generateYumRepoList(provisioner Provisioner) (*bytes.Buffer, error) {
281281
packageListInfo := &PackageListInfo{}
282-
switch provisioner.OsReleaseId {
282+
283+
releaseInfo, err := provisioner.GetOsReleaseInfo()
284+
if err != nil {
285+
return nil, err
286+
}
287+
288+
switch releaseInfo.Id {
283289
case "rhel", "centos":
284290
// rhel and centos both use the "centos" repo
285291
packageListInfo.OsRelease = "centos"
@@ -288,20 +294,31 @@ func (provisioner *RedHatProvisioner) ConfigurePackageList() error {
288294
packageListInfo.OsRelease = "fedora"
289295
packageListInfo.OsReleaseVersion = "22"
290296
default:
291-
return ErrUnknownYumOsRelease
297+
return nil, ErrUnknownYumOsRelease
292298
}
293299

294300
t, err := template.New("packageList").Parse(packageListTemplate)
295301
if err != nil {
296-
return err
302+
return nil, err
297303
}
298304

299305
var buf bytes.Buffer
300306

301307
if err := t.Execute(&buf, packageListInfo); err != nil {
308+
return nil, err
309+
}
310+
311+
return &buf, nil
312+
}
313+
314+
func (provisioner *RedHatProvisioner) ConfigurePackageList() error {
315+
buf, err := generateYumRepoList(provisioner)
316+
if err != nil {
302317
return err
303318
}
304319

320+
// we cannot use %q here as it combines the newlines in the formatting
321+
// on transport causing yum to not use the repo
305322
packageCmd := fmt.Sprintf("echo \"%s\" | sudo tee /etc/yum.repos.d/docker.repo", buf.String())
306323
if _, err := provisioner.SSHCommand(packageCmd); err != nil {
307324
return err
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package provision
2+
3+
import (
4+
"regexp"
5+
"testing"
6+
)
7+
8+
func TestRedHatGenerateYumRepoList(t *testing.T) {
9+
info := &OsRelease{
10+
Id: "rhel",
11+
}
12+
p := NewRedHatProvisioner(nil)
13+
p.SetOsReleaseInfo(info)
14+
15+
buf, err := generateYumRepoList(p)
16+
if err != nil {
17+
t.Fatal(err)
18+
}
19+
20+
m, err := regexp.MatchString(".*centos/7.*", buf.String())
21+
if err != nil {
22+
t.Fatal(err)
23+
}
24+
25+
if !m {
26+
t.Fatalf("expected match for centos/7")
27+
}
28+
}

0 commit comments

Comments
 (0)
X Tutup