@@ -5,15 +5,18 @@ import (
5
5
"os"
6
6
"path"
7
7
8
+ "github.com/golang/glog"
9
+
10
+ apierrors "k8s.io/apimachinery/pkg/api/errors"
11
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12
+ "k8s.io/client-go/kubernetes"
13
+
8
14
"github.com/openshift/origin/pkg/oc/bootstrap/clusteradd/componentinstall"
9
15
"github.com/openshift/origin/pkg/oc/bootstrap/clusterup/kubeapiserver"
10
16
"github.com/openshift/origin/pkg/oc/bootstrap/docker/dockerhelper"
11
17
"github.com/openshift/origin/pkg/oc/bootstrap/docker/host"
12
18
"github.com/openshift/origin/pkg/oc/bootstrap/docker/run"
13
19
"github.com/openshift/origin/pkg/oc/errors"
14
- apierrors "k8s.io/apimachinery/pkg/api/errors"
15
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16
- "k8s.io/client-go/kubernetes"
17
20
)
18
21
19
22
const (
@@ -31,6 +34,24 @@ func (r *RegistryComponentOptions) Name() string {
31
34
return "openshift-image-registry"
32
35
}
33
36
37
+ // ensureRemoteRegistryStoragePermissions ensures the remote host directory for registry storage have write access permissions
38
+ // so the registry can successfully write data into it.
39
+ // TODO: This is a remote docker snowflake
40
+ func (r * RegistryComponentOptions ) ensureRemoteRegistryStoragePermissions (dir string , dockerClient dockerhelper.Interface ) error {
41
+ glog .V (5 ).Infof ("Ensuring the write permissions in remote directory %s" , dir )
42
+ _ , rc , err := run .NewRunHelper (dockerhelper .NewHelper (dockerClient )).New ().
43
+ Image (r .InstallContext .ClientImage ()).
44
+ DiscardContainer ().
45
+ Privileged ().
46
+ Bind (fmt .Sprintf ("%s:/pv" , dir )).
47
+ Entrypoint ("/bin/bash" ).
48
+ Command ("-c" , "mkdir -p /pv/registry && chmod 0777 /pv/registry" ).Run ()
49
+ if rc != 0 {
50
+ return fmt .Errorf ("command returning non-zero exit code: %d" , rc )
51
+ }
52
+ return err
53
+ }
54
+
34
55
func (r * RegistryComponentOptions ) Install (dockerClient dockerhelper.Interface , logdir string ) error {
35
56
kubeAdminClient , err := kubernetes .NewForConfig (r .InstallContext .ClusterAdminClientConfig ())
36
57
if err != nil {
@@ -55,6 +76,14 @@ func (r *RegistryComponentOptions) Install(dockerClient dockerhelper.Interface,
55
76
if len (os .Getenv ("DOCKER_HOST" )) > 0 {
56
77
baseDir = path .Join (host .RemoteHostOriginDir , r .InstallContext .BaseDir ())
57
78
}
79
+ registryStorageDir := path .Join (baseDir , "openshift.local.pv" , "registry" )
80
+
81
+ // If docker is on remote host, ensure the permissions for registry
82
+ if len (os .Getenv ("DOCKER_HOST" )) > 0 {
83
+ if err := r .ensureRemoteRegistryStoragePermissions (registryStorageDir , dockerClient ); err != nil {
84
+ return errors .NewError ("error ensuring remote host registry directory permissions" ).WithCause (err )
85
+ }
86
+ }
58
87
59
88
masterConfigDir := path .Join (baseDir , kubeapiserver .KubeAPIServerDirName )
60
89
flags := []string {
@@ -67,7 +96,7 @@ func (r *RegistryComponentOptions) Install(dockerClient dockerhelper.Interface,
67
96
fmt .Sprintf ("--cluster-ip=%s" , RegistryServiceClusterIP ),
68
97
fmt .Sprintf ("--config=%s" , path .Join (masterConfigDir , "admin.kubeconfig" )),
69
98
fmt .Sprintf ("--images=%s" , r .InstallContext .ImageFormat ()),
70
- fmt .Sprintf ("--mount-host=%s" , path . Join ( r . InstallContext . BaseDir (), "openshift.local.pv" , "registry" ) ),
99
+ fmt .Sprintf ("--mount-host=%s" , registryStorageDir ),
71
100
}
72
101
_ , rc , err := imageRunHelper .Image (r .InstallContext .ClientImage ()).
73
102
Privileged ().
0 commit comments