1package containerized 2 3import ( 4 "encoding/json" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8) 9 10var ( 11 proxydir = "/etc/containerd-proxy" 12) 13 14type proxyConfig struct { 15 ID string `json:"-"` 16 Namespace string `json:"namespace"` 17 Image string `json:"image"` 18 ImagePath string `json:"imagePath"` 19 Args []string `json:"args"` 20 Scope string `json:"scope"` 21} 22 23func updateConfig(name, newImage string) error { 24 cfg, err := loadConfig(name) 25 if err != nil && os.IsNotExist(err) { 26 return nil 27 } 28 if err != nil { 29 return err 30 } 31 cfg.Image = newImage 32 cfg.ImagePath = "" 33 return storeConfig(name, cfg) 34} 35 36func loadConfig(name string) (*proxyConfig, error) { 37 configFile := filepath.Join(proxydir, name+".json") 38 data, err := ioutil.ReadFile(configFile) 39 if err != nil { 40 return nil, err 41 } 42 var cfg proxyConfig 43 err = json.Unmarshal(data, &cfg) 44 if err != nil { 45 return nil, err 46 } 47 return &cfg, nil 48} 49 50// storeConfig will write out the config only if it already exists 51func storeConfig(name string, cfg *proxyConfig) error { 52 configFile := filepath.Join(proxydir, name+".json") 53 fd, err := os.OpenFile(configFile, os.O_RDWR, 0644) 54 if err != nil && os.IsNotExist(err) { 55 return nil 56 } 57 if err != nil { 58 return err 59 } 60 err = fd.Truncate(0) 61 if err != nil { 62 return err 63 } 64 enc := json.NewEncoder(fd) 65 return enc.Encode(cfg) 66} 67