本文整理匯總了Golang中github.com/helm/helm/log.Warn函數的典型用法代碼示例。如果您正苦於以下問題:Golang Warn函數的具體用法?Golang Warn怎麽用?Golang Warn使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了Warn函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: CheckLatest
// CheckLatest checks whether this version of Helm is the latest version.
//
// This does not ensure that this is the latest. If a newer version is found,
// this generates a message indicating that.
//
// The passed-in version is the base version that will be checked against the
// remote release list.
func CheckLatest(version string) {
ver, err := release.LatestVersion()
if err != nil {
log.Warn("Skipped Helm version check: %s", err)
return
}
current, err := semver.NewVersion(version)
if err != nil {
log.Warn("Local version %s is not well-formed", version)
return
}
remote, err := semver.NewVersion(ver)
if err != nil {
log.Warn("Remote version %s is not well-formed", ver)
return
}
if remote.GreaterThan(current) {
log.Warn("A new version of Helm is available. You have %s. The latest is %v", version, ver)
if dl, err := release.LatestDownloadURL(); err == nil {
log.Info("Download version %s here: %s", ver, dl)
}
}
}
示例2: Fetch
// Fetch gets a chart from the source repo and copies to the workdir.
//
// - chartName is the source
// - lname is the local name for that chart (chart-name); if blank, it is set to the chart.
// - homedir is the home directory for the user
func Fetch(chartName, lname, homedir string) {
r := mustConfig(homedir).Repos
repository, chartName := r.RepoChart(chartName)
if lname == "" {
lname = chartName
}
fetch(chartName, lname, homedir, repository)
chartFilePath := helm.WorkspaceChartDirectory(homedir, lname, Chartfile)
cfile, err := chart.LoadChartfile(chartFilePath)
if err != nil {
log.Die("Source is not a valid chart. Missing Chart.yaml: %s", err)
}
deps, err := dependency.Resolve(cfile, helm.WorkspaceChartDirectory(homedir))
if err != nil {
log.Warn("Could not check dependencies: %s", err)
return
}
if len(deps) > 0 {
log.Warn("Unsatisfied dependencies:")
for _, d := range deps {
log.Msg("\t%s %s", d.Name, d.Version)
}
}
log.Info("Fetched chart into workspace %s", helm.WorkspaceChartDirectory(homedir, lname))
log.Info("Done")
}
示例3: AltInstall
// AltInstall allows loading a chart from the current directory.
//
// It does not directly support chart tables (repos).
func AltInstall(chartName, cachedir, home, namespace string, force bool, dryRun bool) {
// Make sure there is a chart in the cachedir.
if _, err := os.Stat(filepath.Join(cachedir, "Chart.yaml")); err != nil {
log.Die("Expected a Chart.yaml in %s: %s", cachedir, err)
}
// Make sure there is a manifests dir.
if fi, err := os.Stat(filepath.Join(cachedir, "manifests")); err != nil {
log.Die("Expected 'manifests/' in %s: %s", cachedir, err)
} else if !fi.IsDir() {
log.Die("Expected 'manifests/' to be a directory in %s: %s", cachedir, err)
}
dest := filepath.Join(home, WorkspaceChartPath, chartName)
if ok, err := isSamePath(dest, cachedir); err != nil || ok {
log.Die("Cannot read from and write to the same place: %s. %v", cachedir, err)
}
// Copy the source chart to the workspace. We ruthlessly overwrite in
// this case.
if err := copyDir(cachedir, dest); err != nil {
log.Die("Failed to copy %s to %s: %s", cachedir, dest, err)
}
// Load the chart.
c, err := chart.Load(dest)
if err != nil {
log.Die("Failed to load chart: %s", err)
}
// Give user the option to bale if dependencies are not satisfied.
nope, err := dependency.Resolve(c.Chartfile, filepath.Join(home, WorkspaceChartPath))
if err != nil {
log.Warn("Failed to check dependencies: %s", err)
if !force {
log.Die("Re-run with --force to install anyway.")
}
} else if len(nope) > 0 {
log.Warn("Unsatisfied dependencies:")
for _, d := range nope {
log.Msg("\t%s %s", d.Name, d.Version)
}
if !force {
log.Die("Stopping install. Re-run with --force to install anyway.")
}
}
msg := "Running `kubectl create -f` ..."
if dryRun {
msg = "Performing a dry run of `kubectl create -f` ..."
}
log.Info(msg)
if err := uploadManifests(c, namespace, dryRun); err != nil {
log.Die("Failed to upload manifests: %s", err)
}
}
示例4: Install
// Install loads a chart into Kubernetes.
//
// If the chart is not found in the workspace, it is fetched and then installed.
//
// During install, manifests are sent to Kubernetes in the ordered specified by InstallOrder.
func Install(chartName, home, namespace string, force bool, generate bool, exclude []string, client kubectl.Runner) {
ochart := chartName
r := mustConfig(home).Repos
table, chartName := r.RepoChart(chartName)
if !chartFetched(chartName, home) {
log.Info("No chart named %q in your workspace. Fetching now.", ochart)
fetch(chartName, chartName, home, table)
}
cd := helm.WorkspaceChartDirectory(home, chartName)
c, err := chart.Load(cd)
if err != nil {
log.Die("Failed to load chart: %s", err)
}
// Give user the option to bale if dependencies are not satisfied.
nope, err := dependency.Resolve(c.Chartfile, helm.WorkspaceChartDirectory(home))
if err != nil {
log.Warn("Failed to check dependencies: %s", err)
if !force {
log.Die("Re-run with --force to install anyway.")
}
} else if len(nope) > 0 {
log.Warn("Unsatisfied dependencies:")
for _, d := range nope {
log.Msg("\t%s %s", d.Name, d.Version)
}
if !force {
log.Die("Stopping install. Re-run with --force to install anyway.")
}
}
// Run the generator if -g is set.
if generate {
Generate(chartName, home, exclude)
}
CheckKubePrereqs()
log.Info("Running `kubectl create -f` ...")
if err := uploadManifests(c, namespace, client); err != nil {
log.Die("Failed to upload manifests: %s", err)
}
log.Info("Done")
PrintREADME(chartName, home)
}
示例5: LintAll
// LintAll vlaidates all charts are well-formed
//
// - homedir is the home directory for the user
func LintAll(homedir string) {
md := util.WorkspaceChartDirectory(homedir, "*")
chartPaths, err := filepath.Glob(md)
if err != nil {
log.Warn("Could not find any charts in %q: %s", md, err)
}
if len(chartPaths) == 0 {
log.Warn("Could not find any charts in %q", md)
} else {
for _, chartPath := range chartPaths {
Lint(chartPath)
}
}
}
示例6: fetch
func fetch(chartName, lname, homedir, chartpath string) {
src := helm.CacheDirectory(homedir, chartpath, chartName)
dest := helm.WorkspaceChartDirectory(homedir, lname)
fi, err := os.Stat(src)
if err != nil {
log.Warn("Oops. Looks like there was an issue finding the chart, %s, n %s. Running `helm update` to ensure you have the latest version of all Charts from Github...", lname, src)
Update(homedir)
fi, err = os.Stat(src)
if err != nil {
log.Die("Chart %s not found in %s", lname, src)
}
log.Info("Good news! Looks like that did the trick. Onwards and upwards!")
}
if !fi.IsDir() {
log.Die("Malformed chart %s: Chart must be in a directory.", chartName)
}
if err := os.MkdirAll(dest, 0755); err != nil {
log.Die("Could not create %q: %s", dest, err)
}
log.Debug("Fetching %s to %s", src, dest)
if err := helm.CopyDir(src, dest); err != nil {
log.Die("Failed copying %s to %s", src, dest)
}
if err := updateChartfile(src, dest, lname); err != nil {
log.Die("Failed to update Chart.yaml: %s", err)
}
}
示例7: openValues
// openValues opens a values file and tries to parse it with the right parser.
//
// It returns an interface{} containing data, if found. Any error opening or
// parsing the file will be passed back.
func openValues(filename string) (interface{}, error) {
data, err := ioutil.ReadFile(filename)
if err != nil {
// We generate a warning here, but do not require that a values
// file exists.
log.Warn("Skipped file %s: %s", filename, err)
return map[string]interface{}{}, nil
}
ext := filepath.Ext(filename)
var um func(p []byte, v interface{}) error
switch ext {
case ".yaml", ".yml":
um = yaml.Unmarshal
case ".toml":
um = toml.Unmarshal
case ".json":
um = json.Unmarshal
default:
return nil, fmt.Errorf("Unsupported file type: %s", ext)
}
var res interface{}
err = um(data, &res)
return res, err
}
示例8: promptConfirm
// promptConfirm prompts a user to confirm (or deny) something.
//
// True is returned iff the prompt is confirmed.
// Errors are reported to the log, and return false.
//
// Valid confirmations:
// y, yes, true, t, aye-aye
//
// Valid denials:
// n, no, f, false
//
// Any other prompt response will return false, and issue a warning to the
// user.
func promptConfirm(msg string) bool {
oldState, err := terminal.MakeRaw(0)
if err != nil {
log.Err("Could not get terminal: %s", err)
return false
}
defer terminal.Restore(0, oldState)
f := readerWriter(log.Stdin, log.Stdout)
t := terminal.NewTerminal(f, msg+" (y/N) ")
res, err := t.ReadLine()
if err != nil {
log.Err("Could not read line: %s", err)
return false
}
res = strings.ToLower(res)
switch res {
case "yes", "y", "true", "t", "aye-aye":
return true
case "no", "n", "false", "f":
return false
}
log.Warn("Did not understand answer %q, assuming No", res)
return false
}
示例9: Valid
// Valid returns true if every validation passes.
func (cv *ChartValidation) Valid() bool {
var valid bool = true
fmt.Printf("\nVerifying %s chart is a valid chart...\n", cv.ChartName())
cv.walk(func(v *Validation) bool {
v.path = cv.Path
vv := v.valid()
if !vv {
switch v.level {
case 2:
cv.ErrorCount = cv.ErrorCount + 1
msg := v.Message + " : " + strconv.FormatBool(vv)
log.Err(msg)
case 1:
cv.WarningCount = cv.WarningCount + 1
msg := v.Message + " : " + strconv.FormatBool(vv)
log.Warn(msg)
}
} else {
msg := v.Message + " : " + strconv.FormatBool(vv)
log.Info(msg)
}
valid = valid && vv
return valid
})
return valid
}
示例10: Files
// Files gets a list of all manifest files inside of a chart.
//
// chartDir should contain the path to a chart (the directory which
// holds a Chart.yaml file).
//
// This returns an error if it can't access the directory.
func Files(chartDir string) ([]string, error) {
dir := filepath.Join(chartDir, "manifests")
files := []string{}
if _, err := os.Stat(dir); err != nil {
return files, err
}
// add manifest files
walker := func(fname string, fi os.FileInfo, e error) error {
if e != nil {
log.Warn("Encountered error walking %q: %s", fname, e)
return nil
}
if fi.IsDir() {
return nil
}
if filepath.Ext(fname) == ".yaml" {
files = append(files, fname)
}
return nil
}
filepath.Walk(dir, walker)
return files, nil
}
示例11: sortManifests
// sortManifests sorts manifests into their respective categories, adding to the Chart.
func sortManifests(chart *Chart, manifests []*manifest.Manifest) {
for _, m := range manifests {
vo := m.VersionedObject
if m.Version != "v1" {
log.Warn("Unsupported version %q", m.Version)
continue
}
switch m.Kind {
default:
log.Warn("No support for kind %s. Ignoring.", m.Kind)
case "Pod":
o, err := vo.Pod()
if err != nil {
log.Warn("Failed conversion: %s", err)
}
o.Annotations = setOriginFile(o.Annotations, m.Source)
chart.Pods = append(chart.Pods, o)
case "ReplicationController":
o, err := vo.RC()
if err != nil {
log.Warn("Failed conversion: %s", err)
}
o.Annotations = setOriginFile(o.Annotations, m.Source)
chart.ReplicationControllers = append(chart.ReplicationControllers, o)
case "Service":
o, err := vo.Service()
if err != nil {
log.Warn("Failed conversion: %s", err)
}
o.Annotations = setOriginFile(o.Annotations, m.Source)
chart.Services = append(chart.Services, o)
case "Secret":
o, err := vo.Secret()
if err != nil {
log.Warn("Failed conversion: %s", err)
}
o.Annotations = setOriginFile(o.Annotations, m.Source)
chart.Secrets = append(chart.Secrets, o)
case "PersistentVolume":
o, err := vo.PersistentVolume()
if err != nil {
log.Warn("Failed conversion: %s", err)
}
o.Annotations = setOriginFile(o.Annotations, m.Source)
chart.PersistentVolumes = append(chart.PersistentVolumes, o)
case "Namespace":
o, err := vo.Namespace()
if err != nil {
log.Warn("Failed conversion: %s", err)
}
o.Annotations = setOriginFile(o.Annotations, m.Source)
chart.Namespaces = append(chart.Namespaces, o)
}
}
}
示例12: Install
// Install loads a chart into Kubernetes.
//
// If the chart is not found in the workspace, it is fetched and then installed.
//
// During install, manifests are sent to Kubernetes in the following order:
//
// - Namespaces
// - Secrets
// - Volumes
// - Services
// - Pods
// - ReplicationControllers
func Install(chartName, home, namespace string, force bool, dryRun bool) {
ochart := chartName
r := mustConfig(home).Repos
table, chartName := r.RepoChart(chartName)
if !chartFetched(chartName, home) {
log.Info("No chart named %q in your workspace. Fetching now.", ochart)
fetch(chartName, chartName, home, table)
}
cd := filepath.Join(home, WorkspaceChartPath, chartName)
c, err := chart.Load(cd)
if err != nil {
log.Die("Failed to load chart: %s", err)
}
// Give user the option to bale if dependencies are not satisfied.
nope, err := dependency.Resolve(c.Chartfile, filepath.Join(home, WorkspaceChartPath))
if err != nil {
log.Warn("Failed to check dependencies: %s", err)
if !force {
log.Die("Re-run with --force to install anyway.")
}
} else if len(nope) > 0 {
log.Warn("Unsatisfied dependencies:")
for _, d := range nope {
log.Msg("\t%s %s", d.Name, d.Version)
}
if !force {
log.Die("Stopping install. Re-run with --force to install anyway.")
}
}
msg := "Running `kubectl create -f` ..."
if dryRun {
msg = "Performing a dry run of `kubectl create -f` ..."
}
log.Info(msg)
if err := uploadManifests(c, namespace, dryRun); err != nil {
log.Die("Failed to upload manifests: %s", err)
}
log.Info("Done")
PrintREADME(chartName, home)
}
示例13: copyDir
// Copy a directory and its subdirectories.
func copyDir(src, dst string) error {
var failure error
walker := func(fname string, fi os.FileInfo, e error) error {
if e != nil {
log.Warn("Encounter error walking %q: %s", fname, e)
failure = e
return nil
}
log.Debug("Copying %s", fname)
rf, err := filepath.Rel(src, fname)
if err != nil {
log.Warn("Could not find relative path: %s", err)
return nil
}
df := filepath.Join(dst, rf)
// Handle directories by creating mirrors.
if fi.IsDir() {
if err := os.MkdirAll(df, fi.Mode()); err != nil {
log.Warn("Could not create %q: %s", df, err)
failure = err
}
return nil
}
// Otherwise, copy files.
in, err := os.Open(fname)
if err != nil {
log.Warn("Skipping file %s: %s", fname, err)
return nil
}
out, err := os.Create(df)
if err != nil {
in.Close()
log.Warn("Skipping file copy %s: %s", fname, err)
return nil
}
if _, err = io.Copy(out, in); err != nil {
log.Warn("Copy from %s to %s failed: %s", fname, df, err)
}
if err := out.Close(); err != nil {
log.Warn("Failed to close %q: %s", df, err)
}
if err := in.Close(); err != nil {
log.Warn("Failed to close reader %q: %s", fname, err)
}
return nil
}
filepath.Walk(src, walker)
return failure
}
示例14: uninstallKind
func uninstallKind(kind []*manifest.Manifest, ns, ktype string, dry bool, client kubectl.Runner) {
for _, o := range kind {
if dry {
log.Msg("%s/%s", ktype, o.Name)
} else {
out, err := client.Delete(o.Name, ktype, ns)
if err != nil {
log.Warn("Could not delete %s %s (Skipping): %s", ktype, o.Name, err)
}
log.Info(string(out))
}
}
}
示例15: mustConfig
// mustConfig parses a config file or dies trying.
func mustConfig(homedir string) *config.Configfile {
rpath := filepath.Join(homedir, helm.Configfile)
cfg, err := config.Load(rpath)
if err != nil {
log.Warn("Oops! Looks like we had some issues running your command! Running `helm doctor` to ensure we have all the necessary prerequisites in place...")
Doctor(homedir)
cfg, err = config.Load(rpath)
if err != nil {
log.Die("Oops! Could not load %s. Error: %s", rpath, err)
}
log.Info("Continuing onwards and upwards!")
}
return cfg
}