Implements proper permissions on airship2 generated files
*This commit sets default permissions for .airship directory & config file. *It allows operators to override default permissions in config file Closes: #188 Change-Id: I5713662ecc71b71c0d0bd0f61691d326c7727b0f
This commit is contained in:
parent
1c6427248b
commit
315ed5994b
@ -52,6 +52,9 @@ type Config struct {
|
|||||||
// AuthInfos is a map of referenceable names to user configs
|
// AuthInfos is a map of referenceable names to user configs
|
||||||
AuthInfos map[string]*AuthInfo `json:"users"`
|
AuthInfos map[string]*AuthInfo `json:"users"`
|
||||||
|
|
||||||
|
// Permissions is a struct of permissions for file and directory
|
||||||
|
Permissions Permissions `json:"permissions,omitempty"`
|
||||||
|
|
||||||
// Contexts is a map of referenceable names to context configs
|
// Contexts is a map of referenceable names to context configs
|
||||||
Contexts map[string]*Context `json:"contexts"`
|
Contexts map[string]*Context `json:"contexts"`
|
||||||
|
|
||||||
@ -81,6 +84,12 @@ type Config struct {
|
|||||||
kubeConfig *clientcmdapi.Config
|
kubeConfig *clientcmdapi.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Permissions has the permissions for file and directory
|
||||||
|
type Permissions struct {
|
||||||
|
DirectoryPermission uint32
|
||||||
|
FilePermission uint32
|
||||||
|
}
|
||||||
|
|
||||||
// LoadConfig populates the Config object using the files found at
|
// LoadConfig populates the Config object using the files found at
|
||||||
// airshipConfigPath and kubeConfigPath
|
// airshipConfigPath and kubeConfigPath
|
||||||
func (c *Config) LoadConfig(airshipConfigPath, kubeConfigPath string, create bool) error {
|
func (c *Config) LoadConfig(airshipConfigPath, kubeConfigPath string, create bool) error {
|
||||||
@ -418,13 +427,25 @@ func (c *Config) PersistConfig() error {
|
|||||||
|
|
||||||
// WriteFile doesn't create the directory, create it if needed
|
// WriteFile doesn't create the directory, create it if needed
|
||||||
configDir := filepath.Dir(c.loadedConfigPath)
|
configDir := filepath.Dir(c.loadedConfigPath)
|
||||||
err = os.MkdirAll(configDir, 0755)
|
err = os.MkdirAll(configDir, os.FileMode(c.Permissions.DirectoryPermission))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write the Airship Config file
|
// Write the Airship Config file
|
||||||
err = ioutil.WriteFile(c.loadedConfigPath, airshipConfigYaml, 0600)
|
err = ioutil.WriteFile(c.loadedConfigPath, airshipConfigYaml, os.FileMode(c.Permissions.FilePermission))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Change the permission of directory
|
||||||
|
err = os.Chmod(configDir, os.FileMode(c.Permissions.DirectoryPermission))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Change the permission of config file
|
||||||
|
err = os.Chmod(c.loadedConfigPath, os.FileMode(c.Permissions.FilePermission))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,8 @@ const (
|
|||||||
AirshipConfigVersion = "v1alpha1"
|
AirshipConfigVersion = "v1alpha1"
|
||||||
AirshipDefaultBootstrapInfo = "default"
|
AirshipDefaultBootstrapInfo = "default"
|
||||||
AirshipDefaultContext = "default"
|
AirshipDefaultContext = "default"
|
||||||
|
AirshipDefaultDirectoryPermission = 0750
|
||||||
|
AirshipDefaultFilePermission = 0640
|
||||||
AirshipDefaultManagementConfiguration = "default"
|
AirshipDefaultManagementConfiguration = "default"
|
||||||
AirshipDefaultManifest = "default"
|
AirshipDefaultManifest = "default"
|
||||||
AirshipDefaultManifestRepo = "treasuremap"
|
AirshipDefaultManifestRepo = "treasuremap"
|
||||||
|
3
pkg/config/testdata/config-string.yaml
vendored
3
pkg/config/testdata/config-string.yaml
vendored
@ -47,5 +47,8 @@ manifests:
|
|||||||
url: http://dummy.url.com/manifests.git
|
url: http://dummy.url.com/manifests.git
|
||||||
subPath: manifests/site/test-site
|
subPath: manifests/site/test-site
|
||||||
targetPath: /var/tmp/
|
targetPath: /var/tmp/
|
||||||
|
permissions:
|
||||||
|
DirectoryPermission: 488
|
||||||
|
FilePermission: 416
|
||||||
users:
|
users:
|
||||||
dummy_user: {}
|
dummy_user: {}
|
||||||
|
@ -42,7 +42,11 @@ func NewConfig() *Config {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Clusters: make(map[string]*ClusterPurpose),
|
Clusters: make(map[string]*ClusterPurpose),
|
||||||
|
Permissions: Permissions{
|
||||||
|
DirectoryPermission: AirshipDefaultDirectoryPermission,
|
||||||
|
FilePermission: AirshipDefaultFilePermission,
|
||||||
|
},
|
||||||
AuthInfos: make(map[string]*AuthInfo),
|
AuthInfos: make(map[string]*AuthInfo),
|
||||||
Contexts: map[string]*Context{
|
Contexts: map[string]*Context{
|
||||||
AirshipDefaultContext: {
|
AirshipDefaultContext: {
|
||||||
|
@ -42,6 +42,10 @@ func DummyConfig() *config.Config {
|
|||||||
AuthInfos: map[string]*config.AuthInfo{
|
AuthInfos: map[string]*config.AuthInfo{
|
||||||
"dummy_user": DummyAuthInfo(),
|
"dummy_user": DummyAuthInfo(),
|
||||||
},
|
},
|
||||||
|
Permissions: config.Permissions{
|
||||||
|
DirectoryPermission: config.AirshipDefaultDirectoryPermission,
|
||||||
|
FilePermission: config.AirshipDefaultFilePermission,
|
||||||
|
},
|
||||||
BootstrapInfo: map[string]*config.Bootstrap{
|
BootstrapInfo: map[string]*config.Bootstrap{
|
||||||
"dummy_bootstrap_config": DummyBootstrapInfo(),
|
"dummy_bootstrap_config": DummyBootstrapInfo(),
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user