1
0
mirror of https://github.com/rancher/os.git synced 2025-05-29 18:14:21 +00:00
os/cmd/control/udevsettle.go

80 lines
1.6 KiB
Go
Raw Normal View History

package control
import (
2018-11-29 08:41:52 +00:00
"io/ioutil"
"os"
"os/exec"
2018-11-29 08:41:52 +00:00
"path/filepath"
2018-11-29 08:41:52 +00:00
"github.com/rancher/os/config"
2018-09-16 04:55:26 +00:00
"github.com/rancher/os/pkg/log"
"github.com/codegangsta/cli"
)
func udevSettleAction(c *cli.Context) {
2018-11-29 08:41:52 +00:00
if err := extraRules(); err != nil {
log.Error(err)
}
if err := UdevSettle(); err != nil {
log.Fatal(err)
}
}
2018-11-29 08:41:52 +00:00
func extraRules() error {
cfg := config.LoadConfig()
if len(cfg.Rancher.Network.ModemNetworks) > 0 {
rules, err := ioutil.ReadDir(config.UdevRulesExtrasDir)
if err != nil {
return err
}
for _, r := range rules {
if r.IsDir() || filepath.Ext(r.Name()) != ".rules" {
continue
}
err := os.Symlink(filepath.Join(config.UdevRulesExtrasDir, r.Name()), filepath.Join(config.UdevRulesDir, r.Name()))
if err != nil {
return err
}
}
} else {
rules, err := ioutil.ReadDir(config.UdevRulesDir)
if err != nil {
return err
}
for _, r := range rules {
if r.IsDir() || (filepath.Ext(r.Name()) != ".rules") || (r.Mode()&os.ModeSymlink != 0) {
continue
}
err := os.Remove(filepath.Join(config.UdevRulesDir, r.Name()))
if err != nil {
return err
}
}
}
return nil
}
func UdevSettle() error {
cmd := exec.Command("udevd", "--daemon")
2018-11-23 14:30:09 +00:00
defer exec.Command("killall", "udevd").Run()
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return err
}
cmd = exec.Command("udevadm", "trigger", "--action=add")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return err
}
cmd = exec.Command("udevadm", "settle")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}