本文整理汇总了Golang中github.com/coreos/fleet/schema.MapSchemaUnitOptionsToUnitFile函数的典型用法代码示例。如果您正苦于以下问题:Golang MapSchemaUnitOptionsToUnitFile函数的具体用法?Golang MapSchemaUnitOptionsToUnitFile怎么用?Golang MapSchemaUnitOptionsToUnitFile使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MapSchemaUnitOptionsToUnitFile函数的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: deployUnit
func (d *deployer) deployUnit(wantedUnit *schema.Unit) error {
currentUnit, err := d.fleetapi.Unit(wantedUnit.Name)
if err != nil {
return err
}
if currentUnit == nil {
err := d.fleetapi.CreateUnit(wantedUnit)
if err != nil {
return err
}
return nil
}
wuf := schema.MapSchemaUnitOptionsToUnitFile(wantedUnit.Options)
cuf := schema.MapSchemaUnitOptionsToUnitFile(currentUnit.Options)
if wuf.Hash() != cuf.Hash() {
log.Printf("INFO Service %s differs from the cluster version", wantedUnit.Name)
wantedUnit.DesiredState = "inactive"
err = d.fleetapi.DestroyUnit(wantedUnit.Name)
if err != nil {
return err
}
err = d.fleetapi.CreateUnit(wantedUnit)
if err != nil {
return err
}
}
return nil
}
示例2: runCatUnit
func runCatUnit(args []string) (exit int) {
if len(args) != 1 {
stderr("One unit file must be provided")
return 1
}
name := unitNameMangle(args[0])
u, err := cAPI.Unit(name)
if err != nil {
stderr("Error retrieving Unit %s: %v", name, err)
return 1
}
if u == nil {
stderr("Unit %s not found", name)
return 1
}
uf := schema.MapSchemaUnitOptionsToUnitFile(u.Options)
// Must not add a newline here. The contents of the unit file
// must not be modified.
fmt.Print(uf.String())
return
}
示例3: getUnitFileFromTemplate
// getUnitFileFromTemplate attempts to get a Unit from a template unit that
// is either in the registry or on the file system
// It takes two arguments, the template information and the unit file name
// It returns the Unit or nil; and any error encountered
func getUnitFileFromTemplate(cCmd *cobra.Command, uni *unit.UnitNameInfo, fileName string) (*unit.UnitFile, error) {
var uf *unit.UnitFile
tmpl, err := cAPI.Unit(uni.Template)
if err != nil {
return nil, fmt.Errorf("error retrieving template Unit(%s) from Registry: %v", uni.Template, err)
}
if tmpl != nil {
isLocalUnitDifferent(cCmd, fileName, tmpl, false)
uf = schema.MapSchemaUnitOptionsToUnitFile(tmpl.Options)
log.Debugf("Template Unit(%s) found in registry", uni.Template)
} else {
// Finally, if we could not find a template unit in the Registry,
// check the local disk for one instead
filePath := path.Join(path.Dir(fileName), uni.Template)
if _, err := os.Stat(filePath); os.IsNotExist(err) {
return nil, fmt.Errorf("unable to find template Unit(%s) in Registry or on filesystem", uni.Template)
}
uf, err = getUnitFromFile(filePath)
if err != nil {
return nil, fmt.Errorf("unable to load template Unit(%s) from file: %v", uni.Template, err)
}
}
return uf, nil
}
示例4: matchLocalFileAndUnit
// matchLocalFileAndUnit compares a file with a Unit
// Returns true if the contents of the file matches the unit one, false
// otherwise; and any error encountered.
func matchLocalFileAndUnit(file string, su *schema.Unit) (bool, error) {
result := false
a := schema.MapSchemaUnitOptionsToUnitFile(su.Options)
_, err := os.Stat(file)
if err == nil {
b, err := getUnitFromFile(file)
if err == nil {
result = unit.MatchUnitFiles(a, b)
}
}
return result, err
}
示例5: matchLocalFileAndUnit
// matchLocalFileAndUnit compares a file with a Unit
// Returns true if the contents of the file matches the unit one, false
// otherwise; and any error encountered.
func matchLocalFileAndUnit(file string, su *schema.Unit) (bool, error) {
a := schema.MapSchemaUnitOptionsToUnitFile(su.Options)
_, err := os.Stat(file)
if err != nil {
return false, err
}
b, err := getUnitFromFile(file)
if err != nil {
return false, err
}
return unit.MatchUnitFiles(a, b), nil
}
示例6: warnOnDifferentLocalUnit
func warnOnDifferentLocalUnit(loc string, su *schema.Unit) {
suf := schema.MapSchemaUnitOptionsToUnitFile(su.Options)
if _, err := os.Stat(loc); !os.IsNotExist(err) {
luf, err := getUnitFromFile(loc)
if err == nil && luf.Hash() != suf.Hash() {
stderr("WARNING: Unit %s in registry differs from local unit file %s", su.Name, loc)
return
}
}
if uni := unit.NewUnitNameInfo(path.Base(loc)); uni != nil && uni.IsInstance() {
file := path.Join(path.Dir(loc), uni.Template)
if _, err := os.Stat(file); !os.IsNotExist(err) {
tmpl, err := getUnitFromFile(file)
if err == nil && tmpl.Hash() != suf.Hash() {
stderr("WARNING: Unit %s in registry differs from local template unit file %s", su.Name, uni.Template)
}
}
}
}
示例7: Cat
func (f *FleetTunnel) Cat(unitName string) (string, error) {
log.Debugf("cat unit %v", unitName)
var u *schema.Unit
op := func() error {
var err error
u, err = f.cAPI.Unit(unitName)
return maskAny(err)
}
if err := backoff.Retry(op, backoff.NewExponentialBackOff()); err != nil {
return "", maskAny(err)
}
if u == nil {
return "", maskAny(errgo.WithCausef(nil, NotFoundError, unitName))
}
uf := schema.MapSchemaUnitOptionsToUnitFile(u.Options)
return uf.String(), nil
}
示例8: runCatUnit
func runCatUnit(args []string) (exit int) {
if len(args) != 1 {
fmt.Fprintln(os.Stderr, "One unit file must be provided.")
return 1
}
name := unitNameMangle(args[0])
u, err := cAPI.Unit(name)
if err != nil {
fmt.Fprintf(os.Stderr, "Error retrieving Unit %s: %v\n", name, err)
return 1
}
if u == nil {
fmt.Fprintf(os.Stderr, "Unit %s not found.\n", name)
return 1
}
uf := schema.MapSchemaUnitOptionsToUnitFile(u.Options)
fmt.Print(uf.String())
return
}
示例9: appendJobsForTests
func appendJobsForTests(jobs *[]job.Job, machine machine.MachineState, prefix string, unitCount int, template bool) {
if template {
// for start or load operations we may need to wait
// during the creation of units, and since this is a
// faked registry just set the 'Global' flag so we don't
// block forever
Options := []*schema.UnitOption{
&schema.UnitOption{
Section: "Unit",
Name: "Description",
Value: fmt.Sprintf("Template %[email protected]", prefix),
},
&schema.UnitOption{
Section: "X-Fleet",
Name: "Global",
Value: "true",
},
}
uf := schema.MapSchemaUnitOptionsToUnitFile(Options)
j := job.Job{
Name: fmt.Sprintf("%[email protected]", prefix),
Unit: *uf,
TargetMachineID: machine.ID,
}
*jobs = append(*jobs, j)
} else {
for i := 1; i <= unitCount; i++ {
j := job.Job{
Name: fmt.Sprintf("%s%d.service", prefix, i),
Unit: unit.UnitFile{},
TargetMachineID: machine.ID,
}
*jobs = append(*jobs, j)
}
}
return
}
示例10: ValidateOptions
// ValidateOptions ensures that a set of UnitOptions is valid; if not, an error
// is returned detailing the issue encountered. If there are several problems
// with a set of options, only the first is returned.
func ValidateOptions(opts []*schema.UnitOption) error {
uf := schema.MapSchemaUnitOptionsToUnitFile(opts)
j := &job.Job{
Unit: *uf,
}
conflicts := pkg.NewUnsafeSet(j.Conflicts()...)
peers := pkg.NewUnsafeSet(j.Peers()...)
for _, peer := range peers.Values() {
for _, conflict := range conflicts.Values() {
matched, _ := path.Match(conflict, peer)
if matched {
return fmt.Errorf("unresolvable requirements: peer %q matches conflict %q", peer, conflict)
}
}
}
hasPeers := peers.Length() != 0
hasConflicts := conflicts.Length() != 0
_, hasReqTarget := j.RequiredTarget()
u := &job.Unit{
Unit: *uf,
}
isGlobal := u.IsGlobal()
switch {
case hasReqTarget && hasPeers:
return errors.New("MachineID cannot be used with Peers")
case hasReqTarget && hasConflicts:
return errors.New("MachineID cannot be used with Conflicts")
case hasReqTarget && isGlobal:
return errors.New("MachineID cannot be used with Global")
case isGlobal && hasPeers:
return errors.New("Global cannot be used with Peers")
case isGlobal && hasConflicts:
return errors.New("Global cannot be used with Conflicts")
}
return nil
}
示例11:
"dstate": func(u schema.Unit, full bool) string {
if u.DesiredState == "" {
return "-"
}
return u.DesiredState
},
"target": mapTargetField,
"tmachine": mapTargetField,
"state": func(u schema.Unit, full bool) string {
if suToGlobal(u) || u.CurrentState == "" {
return "-"
}
return u.CurrentState
},
"hash": func(u schema.Unit, full bool) string {
uf := schema.MapSchemaUnitOptionsToUnitFile(u.Options)
if !full {
return uf.Hash().Short()
}
return uf.Hash().String()
},
"desc": func(u schema.Unit, full bool) string {
uf := schema.MapSchemaUnitOptionsToUnitFile(u.Options)
d := uf.Description()
if d == "" {
return "-"
}
return d
},
}
)
示例12: lazyCreateUnits
// lazyCreateUnits iterates over a set of unit names and, for each, attempts to
// ensure that a unit by that name exists in the Registry, by checking a number
// of conditions and acting on the first one that succeeds, in order of:
// 1. a unit by that name already existing in the Registry
// 2. a unit file by that name existing on disk
// 3. a corresponding unit template (if applicable) existing in the Registry
// 4. a corresponding unit template (if applicable) existing on disk
// Any error encountered during these steps is returned immediately (i.e.
// subsequent Jobs are not acted on). An error is also returned if none of the
// above conditions match a given Job.
func lazyCreateUnits(args []string) error {
for _, arg := range args {
// TODO(jonboulle): this loop is getting too unwieldy; factor it out
arg = maybeAppendDefaultUnitType(arg)
name := unitNameMangle(arg)
// First, check if there already exists a Unit by the given name in the Registry
u, err := cAPI.Unit(name)
if err != nil {
return fmt.Errorf("error retrieving Unit(%s) from Registry: %v", name, err)
}
if u != nil {
log.Debugf("Found Unit(%s) in Registry, no need to recreate it", name)
warnOnDifferentLocalUnit(arg, u)
continue
}
// Failing that, assume the name references a local unit file on disk, and attempt to load that, if it exists
if _, err := os.Stat(arg); !os.IsNotExist(err) {
unit, err := getUnitFromFile(arg)
if err != nil {
return fmt.Errorf("failed getting Unit(%s) from file: %v", arg, err)
}
u, err = createUnit(name, unit)
if err != nil {
return err
}
continue
}
// Otherwise (if the unit file does not exist), check if the name appears to be an instance unit,
// and if so, check for a corresponding template unit in the Registry
uni := unit.NewUnitNameInfo(name)
if uni == nil {
return fmt.Errorf("error extracting information from unit name %s", name)
} else if !uni.IsInstance() {
return fmt.Errorf("unable to find Unit(%s) in Registry or on filesystem", name)
}
tmpl, err := cAPI.Unit(uni.Template)
if err != nil {
return fmt.Errorf("error retrieving template Unit(%s) from Registry: %v", uni.Template, err)
}
// Finally, if we could not find a template unit in the Registry, check the local disk for one instead
var uf *unit.UnitFile
if tmpl == nil {
file := path.Join(path.Dir(arg), uni.Template)
if _, err := os.Stat(file); os.IsNotExist(err) {
return fmt.Errorf("unable to find Unit(%s) or template Unit(%s) in Registry or on filesystem", name, uni.Template)
}
uf, err = getUnitFromFile(file)
if err != nil {
return fmt.Errorf("failed getting template Unit(%s) from file: %v", uni.Template, err)
}
} else {
warnOnDifferentLocalUnit(arg, tmpl)
uf = schema.MapSchemaUnitOptionsToUnitFile(tmpl.Options)
}
// If we found a template unit, create a near-identical instance unit in
// the Registry - same unit file as the template, but different name
u, err = createUnit(name, uf)
if err != nil {
return err
}
}
return nil
}
示例13: lazyCreateUnits
// lazyCreateUnits iterates over a set of unit names and, for each, attempts to
// ensure that a unit by that name exists in the Registry, by checking a number
// of conditions and acting on the first one that succeeds, in order of:
// 1. a unit by that name already existing in the Registry
// 2. a unit file by that name existing on disk
// 3. a corresponding unit template (if applicable) existing in the Registry
// 4. a corresponding unit template (if applicable) existing on disk
// Any error encountered during these steps is returned immediately (i.e.
// subsequent Jobs are not acted on). An error is also returned if none of the
// above conditions match a given Job.
func lazyCreateUnits(args []string) error {
errchan := make(chan error)
var wg sync.WaitGroup
for _, arg := range args {
// TODO(jonboulle): this loop is getting too unwieldy; factor it out
arg = maybeAppendDefaultUnitType(arg)
name := unitNameMangle(arg)
// First, check if there already exists a Unit by the given name in the Registry
u, err := cAPI.Unit(name)
if err != nil {
return fmt.Errorf("error retrieving Unit(%s) from Registry: %v", name, err)
}
if u != nil {
log.Debugf("Found Unit(%s) in Registry, no need to recreate it", name)
warnOnDifferentLocalUnit(arg, u)
continue
}
var uf *unit.UnitFile
// Failing that, assume the name references a local unit file on disk, and attempt to load that, if it exists
// TODO(mischief): consolidate these two near-identical codepaths
if _, err := os.Stat(arg); !os.IsNotExist(err) {
uf, err = getUnitFromFile(arg)
if err != nil {
return fmt.Errorf("failed getting Unit(%s) from file: %v", arg, err)
}
} else {
// Otherwise (if the unit file does not exist), check if the name appears to be an instance unit,
// and if so, check for a corresponding template unit in the Registry
uni := unit.NewUnitNameInfo(name)
if uni == nil {
return fmt.Errorf("error extracting information from unit name %s", name)
} else if !uni.IsInstance() {
return fmt.Errorf("unable to find Unit(%s) in Registry or on filesystem", name)
}
tmpl, err := cAPI.Unit(uni.Template)
if err != nil {
return fmt.Errorf("error retrieving template Unit(%s) from Registry: %v", uni.Template, err)
}
// Finally, if we could not find a template unit in the Registry, check the local disk for one instead
if tmpl == nil {
file := path.Join(path.Dir(arg), uni.Template)
if _, err := os.Stat(file); os.IsNotExist(err) {
return fmt.Errorf("unable to find Unit(%s) or template Unit(%s) in Registry or on filesystem", name, uni.Template)
}
uf, err = getUnitFromFile(file)
if err != nil {
return fmt.Errorf("failed getting template Unit(%s) from file: %v", uni.Template, err)
}
} else {
warnOnDifferentLocalUnit(arg, tmpl)
uf = schema.MapSchemaUnitOptionsToUnitFile(tmpl.Options)
}
// If we found a template unit, create a near-identical instance unit in
// the Registry - same unit file as the template, but different name
}
_, err = createUnit(name, uf)
if err != nil {
return err
}
wg.Add(1)
go checkUnitState(name, job.JobStateInactive, sharedFlags.BlockAttempts, os.Stdout, &wg, errchan)
}
go func() {
wg.Wait()
close(errchan)
}()
haserr := false
for msg := range errchan {
stderr("Error waiting on unit creation: %v", msg)
haserr = true
}
if haserr {
return fmt.Errorf("One or more errors creating units")
}
return nil
}