Skip to content

Commit 7bb8702

Browse files
committed
Refactor: network.YAML → network.Config
Because YAML is just the serialization format, and not what the data is used for. Signed-off-by: Jan Dubois <[email protected]>
1 parent de460fd commit 7bb8702

File tree

12 files changed

+170
-171
lines changed

12 files changed

+170
-171
lines changed

cmd/limactl/sudoers.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,30 +36,30 @@ See %s for the usage.`, networksMD),
3636
RunE: sudoersAction,
3737
GroupID: advancedCommand,
3838
}
39-
configFile, _ := networks.ConfigFile()
39+
cfgFile, _ := networks.ConfigFile()
4040
sudoersCommand.Flags().Bool("check", false,
41-
fmt.Sprintf("check that the sudoers file is up-to-date with %q", configFile))
41+
fmt.Sprintf("check that the sudoers file is up-to-date with %q", cfgFile))
4242
return sudoersCommand
4343
}
4444

4545
func sudoersAction(cmd *cobra.Command, args []string) error {
4646
if runtime.GOOS != "darwin" {
4747
return errors.New("sudoers command is only supported on macOS right now")
4848
}
49-
config, err := networks.Config()
49+
nwCfg, err := networks.LoadConfig()
5050
if err != nil {
5151
return err
5252
}
5353
// Make sure the current network configuration is secure
54-
if err := config.Validate(); err != nil {
54+
if err := nwCfg.Validate(); err != nil {
5555
return err
5656
}
5757
check, err := cmd.Flags().GetBool("check")
5858
if err != nil {
5959
return err
6060
}
6161
if check {
62-
return verifySudoAccess(config, args)
62+
return verifySudoAccess(nwCfg, args)
6363
}
6464
switch len(args) {
6565
case 0:
@@ -77,21 +77,21 @@ func sudoersAction(cmd *cobra.Command, args []string) error {
7777
return nil
7878
}
7979

80-
func verifySudoAccess(config networks.YAML, args []string) error {
80+
func verifySudoAccess(nwCfg networks.Config, args []string) error {
8181
var file string
8282
switch len(args) {
8383
case 0:
84-
file = config.Paths.Sudoers
84+
file = nwCfg.Paths.Sudoers
8585
if file == "" {
86-
configFile, _ := networks.ConfigFile()
87-
return fmt.Errorf("no sudoers file defined in %q", configFile)
86+
cfgFile, _ := networks.ConfigFile()
87+
return fmt.Errorf("no sudoers file defined in %q", cfgFile)
8888
}
8989
case 1:
9090
file = args[0]
9191
default:
9292
return errors.New("can check only a single sudoers file")
9393
}
94-
if err := config.VerifySudoAccess(file); err != nil {
94+
if err := nwCfg.VerifySudoAccess(file); err != nil {
9595
return err
9696
}
9797
fmt.Printf("%q is up-to-date (or sudo doesn't require a password)\n", file)

pkg/limayaml/validate.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,14 +364,14 @@ func validateNetwork(y *LimaYAML) error {
364364
field := fmt.Sprintf("networks[%d]", i)
365365
switch {
366366
case nw.Lima != "":
367-
config, err := networks.Config()
367+
nwCfg, err := networks.LoadConfig()
368368
if err != nil {
369369
return err
370370
}
371-
if config.Check(nw.Lima) != nil {
371+
if nwCfg.Check(nw.Lima) != nil {
372372
return fmt.Errorf("field `%s.lima` references network %q which is not defined in networks.yaml", field, nw.Lima)
373373
}
374-
usernet, err := config.Usernet(nw.Lima)
374+
usernet, err := nwCfg.Usernet(nw.Lima)
375375
if err != nil {
376376
return err
377377
}

pkg/networks/commands.go

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,36 @@ const (
1616
)
1717

1818
// Commands in `sudoers` cannot use quotes, so all arguments are printed via "%s"
19-
// and not "%q". config.Paths.* entries must not include any whitespace!
19+
// and not "%q". cfg.Paths.* entries must not include any whitespace!
2020

21-
func (config *YAML) Check(name string) error {
22-
if _, ok := config.Networks[name]; ok {
21+
func (c *Config) Check(name string) error {
22+
if _, ok := c.Networks[name]; ok {
2323
return nil
2424
}
2525
return fmt.Errorf("network %q is not defined", name)
2626
}
2727

2828
// Usernet returns true if the mode of given network is ModeUserV2.
29-
func (config *YAML) Usernet(name string) (bool, error) {
30-
if nw, ok := config.Networks[name]; ok {
29+
func (c *Config) Usernet(name string) (bool, error) {
30+
if nw, ok := c.Networks[name]; ok {
3131
return nw.Mode == ModeUserV2, nil
3232
}
3333
return false, fmt.Errorf("network %q is not defined", name)
3434
}
3535

3636
// DaemonPath returns the daemon path.
37-
func (config *YAML) DaemonPath(daemon string) (string, error) {
37+
func (c *Config) DaemonPath(daemon string) (string, error) {
3838
switch daemon {
3939
case SocketVMNet:
40-
return config.Paths.SocketVMNet, nil
40+
return c.Paths.SocketVMNet, nil
4141
default:
4242
return "", fmt.Errorf("unknown daemon type %q", daemon)
4343
}
4444
}
4545

4646
// IsDaemonInstalled checks whether the daemon is installed.
47-
func (config *YAML) IsDaemonInstalled(daemon string) (bool, error) {
48-
p, err := config.DaemonPath(daemon)
47+
func (c *Config) IsDaemonInstalled(daemon string) (bool, error) {
48+
p, err := c.DaemonPath(daemon)
4949
if err != nil {
5050
return false, err
5151
}
@@ -62,22 +62,22 @@ func (config *YAML) IsDaemonInstalled(daemon string) (bool, error) {
6262
}
6363

6464
// Sock returns a socket_vmnet socket.
65-
func (config *YAML) Sock(name string) string {
66-
return filepath.Join(config.Paths.VarRun, fmt.Sprintf("socket_vmnet.%s", name))
65+
func (c *Config) Sock(name string) string {
66+
return filepath.Join(c.Paths.VarRun, fmt.Sprintf("socket_vmnet.%s", name))
6767
}
6868

69-
func (config *YAML) PIDFile(name, daemon string) string {
70-
return filepath.Join(config.Paths.VarRun, fmt.Sprintf("%s_%s.pid", name, daemon))
69+
func (c *Config) PIDFile(name, daemon string) string {
70+
return filepath.Join(c.Paths.VarRun, fmt.Sprintf("%s_%s.pid", name, daemon))
7171
}
7272

73-
func (config *YAML) LogFile(name, daemon, stream string) string {
73+
func (c *Config) LogFile(name, daemon, stream string) string {
7474
networksDir, _ := dirnames.LimaNetworksDir()
7575
return filepath.Join(networksDir, fmt.Sprintf("%s_%s.%s.log", name, daemon, stream))
7676
}
7777

78-
func (config *YAML) User(daemon string) (osutil.User, error) {
79-
if ok, _ := config.IsDaemonInstalled(daemon); !ok {
80-
daemonPath, _ := config.DaemonPath(daemon)
78+
func (c *Config) User(daemon string) (osutil.User, error) {
79+
if ok, _ := c.IsDaemonInstalled(daemon); !ok {
80+
daemonPath, _ := c.DaemonPath(daemon)
8181
return osutil.User{}, fmt.Errorf("daemon %q (path=%q) is not available", daemon, daemonPath)
8282
}
8383
//nolint:gocritic // singleCaseSwitch: should rewrite switch statement to if statement
@@ -88,37 +88,37 @@ func (config *YAML) User(daemon string) (osutil.User, error) {
8888
return osutil.User{}, fmt.Errorf("daemon %q not defined", daemon)
8989
}
9090

91-
func (config *YAML) MkdirCmd() string {
92-
return fmt.Sprintf("/bin/mkdir -m 775 -p %s", config.Paths.VarRun)
91+
func (c *Config) MkdirCmd() string {
92+
return fmt.Sprintf("/bin/mkdir -m 775 -p %s", c.Paths.VarRun)
9393
}
9494

95-
func (config *YAML) StartCmd(name, daemon string) string {
96-
if ok, _ := config.IsDaemonInstalled(daemon); !ok {
95+
func (c *Config) StartCmd(name, daemon string) string {
96+
if ok, _ := c.IsDaemonInstalled(daemon); !ok {
9797
panic(fmt.Errorf("daemon %q is not available", daemon))
9898
}
9999
var cmd string
100100
switch daemon {
101101
case SocketVMNet:
102-
nw := config.Networks[name]
103-
if config.Paths.SocketVMNet == "" {
104-
panic("config.Paths.SocketVMNet is empty")
102+
nw := c.Networks[name]
103+
if c.Paths.SocketVMNet == "" {
104+
panic("c.Paths.SocketVMNet is empty")
105105
}
106106
cmd = fmt.Sprintf("%s --pidfile=%s --socket-group=%s --vmnet-mode=%s",
107-
config.Paths.SocketVMNet, config.PIDFile(name, SocketVMNet), config.Group, nw.Mode)
107+
c.Paths.SocketVMNet, c.PIDFile(name, SocketVMNet), c.Group, nw.Mode)
108108
switch nw.Mode {
109109
case ModeBridged:
110110
cmd += fmt.Sprintf(" --vmnet-interface=%s", nw.Interface)
111111
case ModeHost, ModeShared:
112112
cmd += fmt.Sprintf(" --vmnet-gateway=%s --vmnet-dhcp-end=%s --vmnet-mask=%s",
113113
nw.Gateway, nw.DHCPEnd, nw.NetMask)
114114
}
115-
cmd += " " + config.Sock(name)
115+
cmd += " " + c.Sock(name)
116116
default:
117117
panic(fmt.Errorf("unexpected daemon %q", daemon))
118118
}
119119
return cmd
120120
}
121121

122-
func (config *YAML) StopCmd(name, daemon string) string {
123-
return fmt.Sprintf("/usr/bin/pkill -F %s", config.PIDFile(name, daemon))
122+
func (c *Config) StopCmd(name, daemon string) string {
123+
return fmt.Sprintf("/usr/bin/pkill -F %s", c.PIDFile(name, daemon))
124124
}

pkg/networks/config.go

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -51,109 +51,109 @@ func defaultConfigBytes() ([]byte, error) {
5151
return textutil.ExecuteTemplate(defaultConfigTemplate, args)
5252
}
5353

54-
func fillDefaults(nwYaml YAML) (YAML, error) {
54+
func fillDefaults(cfg Config) (Config, error) {
5555
usernetFound := false
56-
if nwYaml.Networks == nil {
57-
nwYaml.Networks = make(map[string]Network)
56+
if cfg.Networks == nil {
57+
cfg.Networks = make(map[string]Network)
5858
}
59-
for nw := range nwYaml.Networks {
60-
if nwYaml.Networks[nw].Mode == ModeUserV2 && nwYaml.Networks[nw].Gateway != nil {
59+
for nw := range cfg.Networks {
60+
if cfg.Networks[nw].Mode == ModeUserV2 && cfg.Networks[nw].Gateway != nil {
6161
usernetFound = true
6262
}
6363
}
6464
if !usernetFound {
65-
defaultConfig, err := DefaultConfig()
65+
defaultCfg, err := DefaultConfig()
6666
if err != nil {
67-
return nwYaml, err
67+
return cfg, err
6868
}
69-
nwYaml.Networks[ModeUserV2] = defaultConfig.Networks[ModeUserV2]
69+
cfg.Networks[ModeUserV2] = defaultCfg.Networks[ModeUserV2]
7070
}
71-
return nwYaml, nil
71+
return cfg, nil
7272
}
7373

74-
func DefaultConfig() (YAML, error) {
75-
var config YAML
76-
defaultConfig, err := defaultConfigBytes()
74+
func DefaultConfig() (Config, error) {
75+
var cfg Config
76+
b, err := defaultConfigBytes()
7777
if err != nil {
78-
return config, err
78+
return cfg, err
7979
}
80-
err = yaml.UnmarshalWithOptions(defaultConfig, &config, yaml.Strict())
80+
err = yaml.UnmarshalWithOptions(b, &cfg, yaml.Strict())
8181
if err != nil {
82-
return config, err
82+
return cfg, err
8383
}
84-
return config, nil
84+
return cfg, nil
8585
}
8686

8787
var cache struct {
8888
sync.Once
89-
config YAML
90-
err error
89+
cfg Config
90+
err error
9191
}
9292

9393
func ConfigFile() (string, error) {
94-
configDir, err := dirnames.LimaConfigDir()
94+
cfgDir, err := dirnames.LimaConfigDir()
9595
if err != nil {
9696
return "", err
9797
}
98-
return filepath.Join(configDir, filenames.NetworksConfig), nil
98+
return filepath.Join(cfgDir, filenames.NetworksConfig), nil
9999
}
100100

101101
// loadCache loads the _config/networks.yaml file into the cache.
102102
func loadCache() {
103103
cache.Do(func() {
104-
var configFile string
105-
configFile, cache.err = ConfigFile()
104+
var cfgFile string
105+
cfgFile, cache.err = ConfigFile()
106106
if cache.err != nil {
107107
return
108108
}
109-
_, cache.err = os.Stat(configFile)
109+
_, cache.err = os.Stat(cfgFile)
110110
if cache.err != nil {
111111
if !errors.Is(cache.err, os.ErrNotExist) {
112112
return
113113
}
114-
configDir := filepath.Dir(configFile)
115-
cache.err = os.MkdirAll(configDir, 0o755)
114+
cfgDir := filepath.Dir(cfgFile)
115+
cache.err = os.MkdirAll(cfgDir, 0o755)
116116
if cache.err != nil {
117-
cache.err = fmt.Errorf("could not create %q directory: %w", configDir, cache.err)
117+
cache.err = fmt.Errorf("could not create %q directory: %w", cfgDir, cache.err)
118118
return
119119
}
120-
var defaultConfig []byte
121-
defaultConfig, cache.err = defaultConfigBytes()
120+
var b []byte
121+
b, cache.err = defaultConfigBytes()
122122
if cache.err != nil {
123123
return
124124
}
125-
cache.err = os.WriteFile(configFile, defaultConfig, 0o644)
125+
cache.err = os.WriteFile(cfgFile, b, 0o644)
126126
if cache.err != nil {
127127
return
128128
}
129129
}
130130
var b []byte
131-
b, cache.err = os.ReadFile(configFile)
131+
b, cache.err = os.ReadFile(cfgFile)
132132
if cache.err != nil {
133133
return
134134
}
135-
cache.err = yaml.UnmarshalWithOptions(b, &cache.config, yaml.DisallowDuplicateKey())
135+
cache.err = yaml.UnmarshalWithOptions(b, &cache.cfg, yaml.DisallowDuplicateKey())
136136
if cache.err != nil {
137-
cache.err = fmt.Errorf("cannot parse %q: %w", configFile, cache.err)
137+
cache.err = fmt.Errorf("cannot parse %q: %w", cfgFile, cache.err)
138138
return
139139
}
140-
var strictConfig YAML
141-
if strictErr := yaml.UnmarshalWithOptions(b, &strictConfig, yaml.Strict()); strictErr != nil {
142-
// Allow non-existing YAML fields, as a config created with Lima < v0.22 contains `vdeSwitch` and `vdeVMNet`.
140+
var strictCfg Config
141+
if strictErr := yaml.UnmarshalWithOptions(b, &strictCfg, yaml.Strict()); strictErr != nil {
142+
// Allow non-existing YAML fields, as a cfg created with Lima < v0.22 contains `vdeSwitch` and `vdeVMNet`.
143143
// These fields were removed in Lima v0.22.
144-
logrus.WithError(strictErr).Warn("Non-strict YAML is deprecated and will be unsupported in a future version of Lima: " + configFile)
144+
logrus.WithError(strictErr).Warn("Non-strict YAML is deprecated and will be unsupported in a future version of Lima: " + cfgFile)
145145
}
146-
cache.config, cache.err = fillDefaults(cache.config)
146+
cache.cfg, cache.err = fillDefaults(cache.cfg)
147147
if cache.err != nil {
148-
cache.err = fmt.Errorf("cannot fill default %q: %w", configFile, cache.err)
148+
cache.err = fmt.Errorf("cannot fill default %q: %w", cfgFile, cache.err)
149149
}
150150
})
151151
}
152152

153-
// Config returns the network config from the _config/networks.yaml file.
154-
func Config() (YAML, error) {
153+
// LoadConfig returns the network cfg from the _config/networks.yaml file.
154+
func LoadConfig() (Config, error) {
155155
loadCache()
156-
return cache.config, cache.err
156+
return cache.cfg, cache.err
157157
}
158158

159159
// Sock returns a socket_vmnet socket.
@@ -162,13 +162,13 @@ func Sock(name string) (string, error) {
162162
if cache.err != nil {
163163
return "", cache.err
164164
}
165-
if err := cache.config.Check(name); err != nil {
165+
if err := cache.cfg.Check(name); err != nil {
166166
return "", err
167167
}
168-
if cache.config.Paths.SocketVMNet == "" {
168+
if cache.cfg.Paths.SocketVMNet == "" {
169169
return "", errors.New("socketVMNet is not set")
170170
}
171-
return cache.config.Sock(name), nil
171+
return cache.cfg.Sock(name), nil
172172
}
173173

174174
// IsUsernet returns true if the given network name is a usernet network.
@@ -178,7 +178,7 @@ func IsUsernet(name string) bool {
178178
if cache.err != nil {
179179
return false
180180
}
181-
isUsernet, err := cache.config.Usernet(name)
181+
isUsernet, err := cache.cfg.Usernet(name)
182182
if err != nil {
183183
return false
184184
}

0 commit comments

Comments
 (0)