(name string, url string, username string, password string)
| 332 | } |
| 333 | |
| 334 | func (c Client) AddRepo(name string, url string, username string, password string) error { |
| 335 | settings := GetSettings(c.ClusterName) |
| 336 | |
| 337 | repoFile := settings.RepositoryConfig |
| 338 | |
| 339 | err := os.MkdirAll(filepath.Dir(repoFile), os.ModePerm) |
| 340 | if err != nil && !os.IsExist(err) { |
| 341 | return err |
| 342 | } |
| 343 | |
| 344 | fileLock := flock.New(strings.Replace(repoFile, filepath.Ext(repoFile), ".lock", 1)) |
| 345 | lockCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) |
| 346 | defer cancel() |
| 347 | locked, err := fileLock.TryLockContext(lockCtx, time.Second) |
| 348 | if err == nil && locked { |
| 349 | defer func() { |
| 350 | if err := fileLock.Unlock(); err != nil { |
| 351 | server.Logger().Errorf("addRepo fileLock.Unlock failed, error: %s", err.Error()) |
| 352 | } |
| 353 | }() |
| 354 | } |
| 355 | if err != nil { |
| 356 | return err |
| 357 | } |
| 358 | |
| 359 | b, err := ioutil.ReadFile(repoFile) |
| 360 | if err != nil && !os.IsNotExist(err) { |
| 361 | return err |
| 362 | } |
| 363 | |
| 364 | var f repo.File |
| 365 | if err := yaml.Unmarshal(b, &f); err != nil { |
| 366 | return err |
| 367 | } |
| 368 | |
| 369 | if f.Has(name) { |
| 370 | return errors.Errorf("repository name (%s) already exists, please specify a different name", name) |
| 371 | } |
| 372 | |
| 373 | e := repo.Entry{ |
| 374 | Name: name, |
| 375 | URL: url, |
| 376 | Username: username, |
| 377 | Password: password, |
| 378 | InsecureSkipTLSverify: true, |
| 379 | } |
| 380 | |
| 381 | r, err := repo.NewChartRepository(&e, getter.All(settings)) |
| 382 | if err != nil { |
| 383 | return err |
| 384 | } |
| 385 | r.CachePath = settings.RepositoryCache |
| 386 | if _, err := r.DownloadIndexFile(); err != nil { |
| 387 | return errors.Wrapf(err, "looks like %q is not a valid chart repository or cannot be reached", url) |
| 388 | } |
| 389 | f.Update(&e) |
| 390 | if err := f.WriteFile(repoFile, 0644); err != nil { |
| 391 | return err |
nothing calls this directly
no test coverage detected