-
Notifications
You must be signed in to change notification settings - Fork 4.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3254 from chrislovecnm/file-assets
Automatic merge from submit-queue. work on using files assets Basic MVP for file assests. - using file assest builder - able to upload files - using URL structs instead of strings everywhere
- Loading branch information
Showing
35 changed files
with
940 additions
and
385 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") | ||
|
||
go_library( | ||
name = "go_default_library", | ||
srcs = ["storage.go"], | ||
importpath = "k8s.io/kops/pkg/acls/s3", | ||
visibility = ["//visibility:public"], | ||
deps = [ | ||
"//pkg/acls:go_default_library", | ||
"//pkg/apis/kops:go_default_library", | ||
"//pkg/values:go_default_library", | ||
"//util/pkg/vfs:go_default_library", | ||
"//vendor/github.com/golang/glog:go_default_library", | ||
], | ||
) | ||
|
||
go_test( | ||
name = "go_default_test", | ||
srcs = ["storage_test.go"], | ||
importpath = "k8s.io/kops/pkg/acls/s3", | ||
library = ":go_default_library", | ||
deps = [ | ||
"//pkg/apis/kops:go_default_library", | ||
"//util/pkg/vfs:go_default_library", | ||
], | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
/* | ||
Copyright 2017 The Kubernetes Authors. | ||
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 s3 | ||
|
||
import ( | ||
"fmt" | ||
"net/url" | ||
|
||
"strings" | ||
|
||
"github.com/golang/glog" | ||
"k8s.io/kops/pkg/acls" | ||
"k8s.io/kops/pkg/apis/kops" | ||
"k8s.io/kops/pkg/values" | ||
"k8s.io/kops/util/pkg/vfs" | ||
) | ||
|
||
// s3PublicAclStrategy is the AclStrategy for objects that are written with public read only ACL. | ||
// This strategy is used by custom file assets. | ||
type s3PublicAclStrategy struct { | ||
} | ||
|
||
var _ acls.ACLStrategy = &s3PublicAclStrategy{} | ||
|
||
// GetACL creates a s3PublicAclStrategy object for writing public files with assets FileRepository. | ||
// This strategy checks if the files are inside the state store, and if the files are located inside | ||
// the state store, this returns nil and logs a message (level 8) that it will not run. | ||
func (s *s3PublicAclStrategy) GetACL(p vfs.Path, cluster *kops.Cluster) (vfs.ACL, error) { | ||
if cluster.Spec.Assets == nil || cluster.Spec.Assets.FileRepository == nil { | ||
return nil, nil | ||
} | ||
|
||
s3Path, ok := p.(*vfs.S3Path) | ||
if !ok { | ||
return nil, nil | ||
} | ||
|
||
fileRepository := values.StringValue(cluster.Spec.Assets.FileRepository) | ||
|
||
u, err := url.Parse(fileRepository) | ||
if err != nil { | ||
return "", fmt.Errorf("unable to parse: %q", fileRepository) | ||
} | ||
|
||
// We are checking that the file is in s3.amazonaws.com meaning that it is in s3 | ||
// This will miss edge cases when the region url is used. | ||
if u.Host != "s3.amazonaws.com" { | ||
glog.V(8).Infof("path %q is not inside of a s3 bucket", u.String) | ||
return nil, nil | ||
} | ||
|
||
config, err := url.Parse(cluster.Spec.ConfigStore) | ||
if err != nil { | ||
return "", fmt.Errorf("unable to parse: %q", fileRepository) | ||
} | ||
|
||
// We are checking that the path defined is not the state store, if it is | ||
// we do NOT set the state store as public read. | ||
if strings.Contains(u.Path, config.Path) { | ||
glog.V(8).Infof("path %q is inside of config store %q, not setting public-read acl", u.Path, config.Path) | ||
return nil, nil | ||
} | ||
|
||
if strings.TrimPrefix(u.Path, "/") == s3Path.Bucket() { | ||
return &vfs.S3Acl{ | ||
RequestACL: values.String("public-read"), | ||
}, nil | ||
} else { | ||
glog.V(8).Infof("path %q is not inside the file registry %q, not setting public-read acl", u.Path, config.Path) | ||
} | ||
|
||
return nil, nil | ||
} | ||
|
||
func Register() { | ||
acls.RegisterPlugin("k8s.io/kops/acl/s3", &s3PublicAclStrategy{}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
/* | ||
Copyright 2016 The Kubernetes Authors. | ||
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 s3 | ||
|
||
import ( | ||
"testing" | ||
|
||
"k8s.io/kops/pkg/apis/kops" | ||
"k8s.io/kops/pkg/values" | ||
"k8s.io/kops/util/pkg/vfs" | ||
) | ||
|
||
func Test_Strategy(t *testing.T) { | ||
context := &vfs.VFSContext{} | ||
path, err := context.BuildVfsPath("s3://test/foo") | ||
if err != nil { | ||
t.Errorf("unable to create path: %v", err) | ||
} | ||
|
||
cluster := &kops.Cluster{ | ||
Spec: kops.ClusterSpec{ | ||
ConfigStore: "s3://my_state_store/cluster", | ||
Assets: &kops.Assets{ | ||
FileRepository: values.String("https://s3.amazonaws.com/test"), | ||
}, | ||
}, | ||
} | ||
|
||
s := &s3PublicAclStrategy{} | ||
acl, err := s.GetACL(path, cluster) | ||
|
||
if err != nil { | ||
t.Errorf("error getting ACL: %v", err) | ||
} | ||
|
||
if acl == nil { | ||
t.Errorf("public ro ACL is nil and should not be, this test is a positive test case.") | ||
} | ||
} | ||
|
||
func Test_In_StateStore(t *testing.T) { | ||
context := &vfs.VFSContext{} | ||
stateStore, err := context.BuildVfsPath("s3://my_state_store/cluster") | ||
if err != nil { | ||
t.Errorf("unable to create path: %v", err) | ||
} | ||
|
||
cluster := &kops.Cluster{ | ||
Spec: kops.ClusterSpec{ | ||
ConfigStore: "s3://my_state_store/cluster", | ||
Assets: &kops.Assets{ | ||
FileRepository: values.String("https://s3.amazonaws.com/my_state_store/opps"), | ||
}, | ||
}, | ||
} | ||
|
||
s := &s3PublicAclStrategy{} | ||
acl, err := s.GetACL(stateStore, cluster) | ||
|
||
if err != nil { | ||
t.Errorf("error getting ACL: %v", err) | ||
} | ||
|
||
if acl != nil { | ||
t.Errorf("public ro ACL is set but path is in the state store, this test is a negative test case.") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.