| skipped 42 lines |
43 | 43 | | Uninstall(name string) (*release.UninstallReleaseResponse, error) |
44 | 44 | | List() ([]*release.Release, error) |
45 | 45 | | GetRepoIP(arch string) (string, string, int, int, error) |
| 46 | + | SyncRepoCharts(arch string) error |
46 | 47 | | } |
47 | 48 | | |
48 | 49 | | type Config struct { |
| skipped 127 lines |
176 | 177 | | |
177 | 178 | | } |
178 | 179 | | |
| 180 | + | // 每次启用或升级的时候执行,存在 nexus 则不采取操作 |
179 | 181 | | func updateRepo(arch string) error { |
180 | 182 | | repos, err := ListRepo() |
181 | 183 | | if err != nil { |
| skipped 7 lines |
189 | 191 | | } |
190 | 192 | | } |
191 | 193 | | if !flag { |
192 | | - | r := repository.NewSystemSettingRepository() |
193 | | - | p, err := r.Get("REGISTRY_PROTOCOL") |
194 | | - | if err != nil { |
195 | | - | return fmt.Errorf("load system repo failed: %v", err) |
| 194 | + | if err := addRepo(arch); err != nil { |
| 195 | + | return err |
196 | 196 | | } |
197 | | - | var c Client |
198 | | - | repoIP, nexusPsw, repoPort, _, err := c.GetRepoIP(arch) |
199 | | - | if err != nil { |
200 | | - | return fmt.Errorf("load system repo of arch %s failed: %v", arch, err) |
201 | | - | } |
202 | | - | url := fmt.Sprintf("%s://%s:%d/repository/applications", p.Value, repoIP, repoPort) |
203 | | - | err = addRepo("nexus", url, "admin", nexusPsw) |
204 | | - | if err != nil { |
205 | | - | return fmt.Errorf("add helm repo %s failed: %v", url, err) |
206 | | - | } |
207 | | - | logger.Log.Infof("my nexus addr is %s", url) |
208 | | - | } |
209 | | - | settings := GetSettings() |
210 | | - | repoFile := settings.RepositoryConfig |
211 | | - | repoCache := settings.RepositoryCache |
212 | | - | f, err := repo.LoadFile(repoFile) |
213 | | - | if err != nil { |
214 | | - | return fmt.Errorf("load file of repo %s failed: %v", repoFile, err) |
215 | | - | } |
216 | | - | var rps []*repo.ChartRepository |
217 | | - | for _, cfg := range f.Repositories { |
218 | | - | r, err := repo.NewChartRepository(cfg, getter.All(settings)) |
219 | | - | if err != nil { |
| 197 | + | if err := updateCharts(); err != nil { |
220 | 198 | | return err |
221 | 199 | | } |
222 | | - | if repoCache != "" { |
223 | | - | r.CachePath = repoCache |
224 | | - | } |
225 | | - | rps = append(rps, r) |
226 | 200 | | } |
227 | | - | updateCharts(rps) |
228 | 201 | | return nil |
229 | 202 | | } |
230 | 203 | | |
231 | | - | func updateCharts(repos []*repo.ChartRepository) { |
232 | | - | logger.Log.Debug("Hang tight while we grab the latest from your chart repositories...") |
233 | | - | var wg sync.WaitGroup |
234 | | - | for _, re := range repos { |
235 | | - | wg.Add(1) |
236 | | - | go func(re *repo.ChartRepository) { |
237 | | - | defer wg.Done() |
238 | | - | if _, err := re.DownloadIndexFile(); err != nil { |
239 | | - | logger.Log.Debugf("...Unable to get an update from the %q chart repository (%s):\n\t%s\n", re.Config.Name, re.Config.URL, err) |
240 | | - | } else { |
241 | | - | logger.Log.Debugf("...Successfully got an update from the %q chart repository\n", re.Config.Name) |
242 | | - | } |
243 | | - | }(re) |
| 204 | + | func (c Client) SyncRepoCharts(arch string) error { |
| 205 | + | if err := addRepo(arch); err != nil { |
| 206 | + | return err |
244 | 207 | | } |
245 | | - | wg.Wait() |
246 | | - | logger.Log.Debugf("Update Complete. ⎈ Happy Helming!⎈ ") |
| 208 | + | if err := updateCharts(); err != nil { |
| 209 | + | return err |
| 210 | + | } |
| 211 | + | return nil |
247 | 212 | | } |
248 | 213 | | |
249 | | - | func addRepo(name string, url string, username string, password string) error { |
| 214 | + | func addRepo(arch string) error { |
| 215 | + | username := "admin" |
| 216 | + | name := "nexus" |
| 217 | + | repository := repository.NewSystemSettingRepository() |
| 218 | + | p, err := repository.Get("REGISTRY_PROTOCOL") |
| 219 | + | if err != nil { |
| 220 | + | return fmt.Errorf("load system repo failed: %v", err) |
| 221 | + | } |
| 222 | + | var c Client |
| 223 | + | repoIP, password, repoPort, _, err := c.GetRepoIP(arch) |
| 224 | + | if err != nil { |
| 225 | + | return fmt.Errorf("load system repo of arch %s failed: %v", arch, err) |
| 226 | + | } |
| 227 | + | url := fmt.Sprintf("%s://%s:%d/repository/applications", p.Value, repoIP, repoPort) |
| 228 | + | logger.Log.Infof("my helm repo url is %s", url) |
| 229 | + | |
250 | 230 | | settings := GetSettings() |
251 | 231 | | |
252 | 232 | | repoFile := settings.RepositoryConfig |
253 | 233 | | |
254 | | - | err := os.MkdirAll(filepath.Dir(repoFile), os.ModePerm) |
255 | | - | if err != nil && !os.IsExist(err) { |
| 234 | + | if err := os.MkdirAll(filepath.Dir(repoFile), os.ModePerm); err != nil && !os.IsExist(err) { |
256 | 235 | | return err |
257 | 236 | | } |
258 | 237 | | |
| skipped 20 lines |
279 | 258 | | var f repo.File |
280 | 259 | | if err := yaml.Unmarshal(b, &f); err != nil { |
281 | 260 | | return err |
282 | | - | } |
283 | | - | |
284 | | - | if f.Has(name) { |
285 | | - | return errors.Errorf("repository name (%s) already exists, please specify a different name", name) |
286 | 261 | | } |
287 | 262 | | |
288 | 263 | | e := repo.Entry{ |
| skipped 21 lines |
310 | 285 | | return nil |
311 | 286 | | } |
312 | 287 | | |
| 288 | + | func updateCharts() error { |
| 289 | + | logger.Log.Debug("Hang tight while we grab the latest from your chart repositories...") |
| 290 | + | settings := GetSettings() |
| 291 | + | repoFile := settings.RepositoryConfig |
| 292 | + | repoCache := settings.RepositoryCache |
| 293 | + | f, err := repo.LoadFile(repoFile) |
| 294 | + | if err != nil { |
| 295 | + | return fmt.Errorf("load file of repo %s failed: %v", repoFile, err) |
| 296 | + | } |
| 297 | + | var rps []*repo.ChartRepository |
| 298 | + | for _, cfg := range f.Repositories { |
| 299 | + | r, err := repo.NewChartRepository(cfg, getter.All(settings)) |
| 300 | + | if err != nil { |
| 301 | + | return fmt.Errorf("get new chart repository failed, err: %v", err.Error()) |
| 302 | + | } |
| 303 | + | if repoCache != "" { |
| 304 | + | r.CachePath = repoCache |
| 305 | + | } |
| 306 | + | rps = append(rps, r) |
| 307 | + | } |
| 308 | + | |
| 309 | + | var wg sync.WaitGroup |
| 310 | + | for _, re := range rps { |
| 311 | + | wg.Add(1) |
| 312 | + | go func(re *repo.ChartRepository) { |
| 313 | + | defer wg.Done() |
| 314 | + | if _, err := re.DownloadIndexFile(); err != nil { |
| 315 | + | logger.Log.Debugf("...Unable to get an update from the %q chart repository (%s):\n\t%s\n", re.Config.Name, re.Config.URL, err) |
| 316 | + | } else { |
| 317 | + | logger.Log.Debugf("...Successfully got an update from the %q chart repository\n", re.Config.Name) |
| 318 | + | } |
| 319 | + | }(re) |
| 320 | + | } |
| 321 | + | wg.Wait() |
| 322 | + | logger.Log.Debugf("Update Complete. ⎈ Happy Helming!⎈ ") |
| 323 | + | return nil |
| 324 | + | } |
| 325 | + | |
313 | 326 | | func (c Client) GetRepoIP(arch string) (string, string, int, int, error) { |
314 | 327 | | var repo model.SystemRegistry |
315 | 328 | | switch arch { |
| skipped 6 lines |
322 | 335 | | return repo.Hostname, repo.NexusPassword, repo.RepoPort, repo.RegistryPort, fmt.Errorf("decrypt password %s failed, err: %v", p, err) |
323 | 336 | | } |
324 | 337 | | return repo.Hostname, p, repo.RepoPort, repo.RegistryPort, nil |
325 | | - | case "arm64": |
326 | | - | if err := db.DB.Where("architecture = ?", constant.ArchitectureOfARM64).First(&repo).Error; err != nil { |
327 | | - | return "", "", 0, 0, err |
328 | | - | } |
329 | | - | p, err := encrypt.StringDecrypt(repo.NexusPassword) |
330 | | - | if err != nil { |
331 | | - | return repo.Hostname, repo.NexusPassword, repo.RepoPort, repo.RegistryPort, fmt.Errorf("decrypt password %s failed, err: %v", p, err) |
332 | | - | } |
333 | | - | return repo.Hostname, p, repo.RepoPort, repo.RegistryPort, nil |
334 | | - | case "all": |
| 338 | + | case "arm64", "all": |
335 | 339 | | if err := db.DB.Where("architecture = ?", constant.ArchitectureOfARM64).First(&repo).Error; err != nil { |
336 | 340 | | return "", "", 0, 0, err |
337 | 341 | | } |
| skipped 19 lines |