mirror of
				https://github.com/rancher/os.git
				synced 2025-11-03 23:40:40 +00:00 
			
		
		
		
	Implement rancherctl config import
This commit is contained in:
		@@ -2,7 +2,9 @@ package control
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io"
 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
 | 
						"os"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log "github.com/Sirupsen/logrus"
 | 
						log "github.com/Sirupsen/logrus"
 | 
				
			||||||
@@ -27,7 +29,14 @@ func configSubcommands() []cli.Command {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Name:   "import",
 | 
								Name:   "import",
 | 
				
			||||||
			Usage: "list values",
 | 
								Usage:  "import configuration from standard in or a file",
 | 
				
			||||||
 | 
								Action: configImport,
 | 
				
			||||||
 | 
								Flags: []cli.Flag{
 | 
				
			||||||
 | 
									cli.StringFlag{
 | 
				
			||||||
 | 
										Name:  "input, i",
 | 
				
			||||||
 | 
										Usage: "File from which to read",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Name:  "export",
 | 
								Name:  "export",
 | 
				
			||||||
@@ -64,6 +73,60 @@ func getConfigData() (map[interface{}]interface{}, error) {
 | 
				
			|||||||
	return data, err
 | 
						return data, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func configImport(c *cli.Context) {
 | 
				
			||||||
 | 
						var input io.Reader
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						input = os.Stdin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						inputFile := c.String("input")
 | 
				
			||||||
 | 
						if inputFile != "" {
 | 
				
			||||||
 | 
							input, err = os.Open(inputFile)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.Fatal(err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						bytes, err := ioutil.ReadAll(input)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = mergeConfig(bytes)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func mergeConfig(bytes []byte) error {
 | 
				
			||||||
 | 
						var newConfig config.Config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err := yaml.Unmarshal(bytes, &newConfig)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cfg, err := config.LoadConfig()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						reboot, err := cfg.Merge(newConfig)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = cfg.Save()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if reboot {
 | 
				
			||||||
 | 
							fmt.Println("Reboot needed")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func configSet(c *cli.Context) {
 | 
					func configSet(c *cli.Context) {
 | 
				
			||||||
	key := c.Args().Get(0)
 | 
						key := c.Args().Get(0)
 | 
				
			||||||
	value := c.Args().Get(1)
 | 
						value := c.Args().Get(1)
 | 
				
			||||||
@@ -79,30 +142,10 @@ func configSet(c *cli.Context) {
 | 
				
			|||||||
		log.Fatal(err)
 | 
							log.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var newConfig config.Config
 | 
						err = mergeConfig(bytes)
 | 
				
			||||||
	err = yaml.Unmarshal(bytes, &newConfig)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		log.Fatal(err)
 | 
							log.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	cfg, err := config.LoadConfig()
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		log.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	reboot, err := cfg.Merge(newConfig)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		log.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = cfg.Save()
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		log.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if reboot {
 | 
					 | 
				
			||||||
		fmt.Println("Reboot needed")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func configGet(c *cli.Context) {
 | 
					func configGet(c *cli.Context) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ func NewConfig() *Config {
 | 
				
			|||||||
				Cmd: "--name=system-state " +
 | 
									Cmd: "--name=system-state " +
 | 
				
			||||||
					"--net=none " +
 | 
										"--net=none " +
 | 
				
			||||||
					"--read-only " +
 | 
										"--read-only " +
 | 
				
			||||||
 | 
										"-v=/var/lib/rancher/etc:/var/lib/rancher/etc " +
 | 
				
			||||||
					"state",
 | 
										"state",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -271,11 +271,14 @@ func RunInit() error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		setResolvConf,
 | 
					 | 
				
			||||||
		extractModules,
 | 
					 | 
				
			||||||
		mountCgroups,
 | 
							mountCgroups,
 | 
				
			||||||
 | 
							extractModules,
 | 
				
			||||||
		loadModules,
 | 
							loadModules,
 | 
				
			||||||
		mountState,
 | 
							mountState,
 | 
				
			||||||
 | 
							func(cfg *config.Config) error {
 | 
				
			||||||
 | 
								return cfg.Reload()
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							setResolvConf,
 | 
				
			||||||
		createSymlinks,
 | 
							createSymlinks,
 | 
				
			||||||
		remountRo,
 | 
							remountRo,
 | 
				
			||||||
		sysInit,
 | 
							sysInit,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
FROM base
 | 
					FROM base
 | 
				
			||||||
VOLUME /home
 | 
					VOLUME /home
 | 
				
			||||||
 | 
					VOLUME /opt
 | 
				
			||||||
VOLUME /var/lib/docker
 | 
					VOLUME /var/lib/docker
 | 
				
			||||||
VOLUME /var/run
 | 
					VOLUME /var/run
 | 
				
			||||||
CMD ["echo"]
 | 
					CMD ["echo"]
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user