本文整理汇总了Golang中launchpad/net/juju-core/log.Infof函数的典型用法代码示例。如果您正苦于以下问题:Golang Infof函数的具体用法?Golang Infof怎么用?Golang Infof使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Infof函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: addRelation
// addRelation causes the unit agent to join the supplied relation, and to
// store persistent state in the supplied dir.
func (u *Uniter) addRelation(rel *state.Relation, dir *relation.StateDir) error {
log.Infof("worker/uniter: joining relation %q", rel)
ru, err := rel.Unit(u.unit)
if err != nil {
return err
}
r := NewRelationer(ru, dir, u.relationHooks)
w := u.unit.Watch()
defer watcher.Stop(w, &u.tomb)
for {
select {
case <-u.tomb.Dying():
return tomb.ErrDying
case _, ok := <-w.Changes():
if !ok {
return watcher.MustErr(w)
}
if err := r.Join(); err == state.ErrCannotEnterScopeYet {
log.Infof("worker/uniter: cannot enter scope for relation %q; waiting for subordinate to be removed", rel)
continue
} else if err != nil {
return err
}
log.Infof("worker/uniter: joined relation %q", rel)
u.relationers[rel.Id()] = r
return nil
}
}
panic("unreachable")
}
示例2: Run
func (c *AddMachineCommand) Run(_ *cmd.Context) error {
conn, err := juju.NewConnFromName(c.EnvName)
if err != nil {
return err
}
defer conn.Close()
series := c.Series
if series == "" {
conf, err := conn.State.EnvironConfig()
if err != nil {
return err
}
series = conf.DefaultSeries()
}
params := state.AddMachineParams{
ParentId: c.MachineId,
ContainerType: c.ContainerType,
Series: series,
Constraints: c.Constraints,
Jobs: []state.MachineJob{state.JobHostUnits},
}
m, err := conn.State.AddMachineWithConstraints(¶ms)
if err == nil {
if c.ContainerType == "" {
log.Infof("created machine %v", m)
} else {
log.Infof("created %q container on machine %v", c.ContainerType, m)
}
}
return err
}
示例3: ModeInit
// ModeInit is the initial Uniter mode.
func ModeInit(u *Uniter) (next Mode, err error) {
defer modeContext("ModeInit", &err)()
log.Infof("worker/uniter: updating unit addresses")
cfg, err := u.st.EnvironConfig()
if err != nil {
return nil, err
}
provider, err := environs.Provider(cfg.Type())
if err != nil {
return nil, err
}
if private, err := provider.PrivateAddress(); err != nil {
return nil, err
} else if err = u.unit.SetPrivateAddress(private); err != nil {
return nil, err
}
if public, err := provider.PublicAddress(); err != nil {
return nil, err
} else if err = u.unit.SetPublicAddress(public); err != nil {
return nil, err
}
log.Infof("reconciling relation state")
if err := u.restoreRelations(); err != nil {
return nil, err
}
return ModeContinue, nil
}
示例4: upgrade
// upgrade pulls from current into target. If target has local changes, but
// no conflicts, it will be snapshotted before any changes are made.
func (d *Deployer) upgrade(target *GitDir) error {
log.Infof("worker/uniter/charm: preparing charm upgrade")
url, err := ReadCharmURL(d.current)
if err != nil {
return err
}
if err := target.Init(); err != nil {
return err
}
if dirty, err := target.Dirty(); err != nil {
return err
} else if dirty {
if conflicted, err := target.Conflicted(); err != nil {
return err
} else if !conflicted {
log.Infof("worker/uniter/charm: snapshotting dirty charm before upgrade")
if err = target.Snapshotf("Pre-upgrade snapshot."); err != nil {
return err
}
}
}
log.Infof("worker/uniter/charm: deploying charm")
if err := target.Pull(d.current); err != nil {
return err
}
return target.Snapshotf("Upgraded charm to %q.", url)
}
示例5: flushGlobalPorts
// flushGlobalPorts opens and closes global ports in the environment.
// It keeps a reference count for ports so that only 0-to-1 and 1-to-0 events
// modify the environment.
func (fw *Firewaller) flushGlobalPorts(rawOpen, rawClose []instance.Port) error {
// Filter which ports are really to open or close.
var toOpen, toClose []instance.Port
for _, port := range rawOpen {
if fw.globalPortRef[port] == 0 {
toOpen = append(toOpen, port)
}
fw.globalPortRef[port]++
}
for _, port := range rawClose {
fw.globalPortRef[port]--
if fw.globalPortRef[port] == 0 {
toClose = append(toClose, port)
delete(fw.globalPortRef, port)
}
}
// Open and close the ports.
if len(toOpen) > 0 {
if err := fw.environ.OpenPorts(toOpen); err != nil {
// TODO(mue) Add local retry logic.
return err
}
state.SortPorts(toOpen)
log.Infof("worker/firewaller: opened ports %v in environment", toOpen)
}
if len(toClose) > 0 {
if err := fw.environ.ClosePorts(toClose); err != nil {
// TODO(mue) Add local retry logic.
return err
}
state.SortPorts(toClose)
log.Infof("worker/firewaller: closed ports %v in environment", toClose)
}
return nil
}
示例6: addCharm
func (conn *Conn) addCharm(curl *charm.URL, ch charm.Charm) (*state.Charm, error) {
var f *os.File
name := charm.Quote(curl.String())
switch ch := ch.(type) {
case *charm.Dir:
var err error
if f, err = ioutil.TempFile("", name); err != nil {
return nil, err
}
defer os.Remove(f.Name())
defer f.Close()
err = ch.BundleTo(f)
if err != nil {
return nil, fmt.Errorf("cannot bundle charm: %v", err)
}
if _, err := f.Seek(0, 0); err != nil {
return nil, err
}
case *charm.Bundle:
var err error
if f, err = os.Open(ch.Path); err != nil {
return nil, fmt.Errorf("cannot read charm bundle: %v", err)
}
defer f.Close()
default:
return nil, fmt.Errorf("unknown charm type %T", ch)
}
h := sha256.New()
size, err := io.Copy(h, f)
if err != nil {
return nil, err
}
digest := hex.EncodeToString(h.Sum(nil))
if _, err := f.Seek(0, 0); err != nil {
return nil, err
}
storage := conn.Environ.Storage()
log.Infof("writing charm to storage [%d bytes]", size)
if err := storage.Put(name, f, size); err != nil {
return nil, fmt.Errorf("cannot put charm: %v", err)
}
ustr, err := storage.URL(name)
if err != nil {
return nil, fmt.Errorf("cannot get storage URL for charm: %v", err)
}
u, err := url.Parse(ustr)
if err != nil {
return nil, fmt.Errorf("cannot parse storage URL: %v", err)
}
log.Infof("adding charm to state")
sch, err := conn.State.AddCharm(ch, curl, u, digest)
if err != nil {
return nil, fmt.Errorf("cannot add charm: %v", err)
}
return sch, nil
}
示例7: FindAvailableTools
// FindAvailableTools returns a tools.List containing all tools with a given
// major version number available in the environment.
// If *any* tools are present in private storage, *only* tools from private
// storage are available.
// If *no* tools are present in private storage, *only* tools from public
// storage are available.
// If no *available* tools have the supplied major version number, the function
// returns a *NotFoundError.
func FindAvailableTools(environ Environ, majorVersion int) (list tools.List, err error) {
log.Infof("environs: reading tools with major version %d", majorVersion)
defer convertToolsError(&err)
list, err = tools.ReadList(environ.Storage(), majorVersion)
if err == tools.ErrNoTools {
log.Infof("environs: falling back to public bucket")
list, err = tools.ReadList(environ.PublicStorage(), majorVersion)
}
return list, err
}
示例8: Run
// Run changes the version proposed for the juju tools.
func (c *UpgradeJujuCommand) Run(_ *cmd.Context) (err error) {
conn, err := juju.NewConnFromName(c.EnvName)
if err != nil {
return err
}
defer conn.Close()
defer func() {
if err == errUpToDate {
log.Noticef(err.Error())
err = nil
}
}()
// Determine the version to upgrade to, uploading tools if necessary.
env := conn.Environ
cfg, err := conn.State.EnvironConfig()
if err != nil {
return err
}
v, err := c.initVersions(cfg, env)
if err != nil {
return err
}
if c.UploadTools {
series := getUploadSeries(cfg, c.Series)
if err := v.uploadTools(env.Storage(), series); err != nil {
return err
}
}
if err := v.validate(); err != nil {
return err
}
log.Infof("upgrade version chosen: %s", v.chosen)
// TODO(fwereade): this list may be incomplete, pending tools.Upload change.
log.Infof("available tools: %s", v.tools)
// Write updated config back to state if necessary. Note that this is
// crackful and racy, because we have no idea what incompatible agent-
// version might be set by another administrator in the meantime. If
// this happens, tough: I'm not going to pretend to do it right when
// I'm not.
// TODO(fwereade): Do this right. Warning: scope unclear.
cfg, err = cfg.Apply(map[string]interface{}{
"agent-version": v.chosen.String(),
})
if err != nil {
return err
}
if err := conn.State.SetEnvironConfig(cfg); err != nil {
return err
}
log.Noticef("started upgrade to %s", v.chosen)
return nil
}
示例9: Open
func Open(info *Info, opts DialOpts) (*State, error) {
// TODO Select a random address from info.Addrs
// and only fail when we've tried all the addresses.
// TODO what does "origin" really mean, and is localhost always ok?
cfg, err := websocket.NewConfig("wss://"+info.Addrs[0]+"/", "http://localhost/")
if err != nil {
return nil, err
}
pool := x509.NewCertPool()
xcert, err := cert.ParseCert(info.CACert)
if err != nil {
return nil, err
}
pool.AddCert(xcert)
cfg.TlsConfig = &tls.Config{
RootCAs: pool,
ServerName: "anything",
}
var conn *websocket.Conn
openAttempt := utils.AttemptStrategy{
Total: opts.Timeout,
Delay: opts.RetryDelay,
}
for a := openAttempt.Start(); a.Next(); {
log.Infof("state/api: dialing %q", cfg.Location)
conn, err = websocket.DialConfig(cfg)
if err == nil {
break
}
log.Errorf("state/api: %v", err)
}
if err != nil {
return nil, err
}
log.Infof("state/api: connection established")
client := rpc.NewConn(jsoncodec.NewWebsocket(conn))
client.Start()
st := &State{
client: client,
conn: conn,
}
if info.Tag != "" || info.Password != "" {
if err := st.Login(info.Tag, info.Password, info.Nonce); err != nil {
conn.Close()
return nil, err
}
}
st.broken = make(chan struct{})
go st.heartbeatMonitor()
return st, nil
}
示例10: downloadToolsRaw
// downloadToolsRaw downloads the supplied tools and returns the raw bytes.
func downloadToolsRaw(c *C, t *state.Tools) []byte {
log.Infof("dtr1")
resp, err := http.Get(t.URL)
c.Assert(err, IsNil)
defer resp.Body.Close()
log.Infof("dtr5")
c.Assert(resp.StatusCode, Equals, http.StatusOK)
var buf bytes.Buffer
_, err = io.Copy(&buf, resp.Body)
c.Assert(err, IsNil)
log.Infof("dtr9")
return buf.Bytes()
}
示例11: reconcileInstances
// reconcileInstances compares the initially started watcher for machines,
// units and services with the opened and closed ports of the instances and
// opens and closes the appropriate ports for each instance.
func (fw *Firewaller) reconcileInstances() error {
for _, machined := range fw.machineds {
m, err := machined.machine()
if errors.IsNotFoundError(err) {
if err := fw.forgetMachine(machined); err != nil {
return err
}
continue
} else if err != nil {
return err
}
instanceId, err := m.InstanceId()
if err != nil {
return err
}
instances, err := fw.environ.Instances([]instance.Id{instanceId})
if err == environs.ErrNoInstances {
return nil
} else if err != nil {
return err
}
initialPorts, err := instances[0].Ports(machined.id)
if err != nil {
return err
}
// Check which ports to open or to close.
toOpen := Diff(machined.ports, initialPorts)
toClose := Diff(initialPorts, machined.ports)
if len(toOpen) > 0 {
log.Infof("worker/firewaller: opening instance ports %v for machine %s",
toOpen, machined.id)
if err := instances[0].OpenPorts(machined.id, toOpen); err != nil {
// TODO(mue) Add local retry logic.
return err
}
state.SortPorts(toOpen)
}
if len(toClose) > 0 {
log.Infof("worker/firewaller: closing instance ports %v for machine %s",
toClose, machined.id)
if err := instances[0].ClosePorts(machined.id, toClose); err != nil {
// TODO(mue) Add local retry logic.
return err
}
state.SortPorts(toClose)
}
}
return nil
}
示例12: Main
// Main runs the Command specified by req, and fills in resp. A single command
// is run at a time.
func (j *Jujuc) Main(req Request, resp *Response) error {
if req.CommandName == "" {
return badReqErrorf("command not specified")
}
if !filepath.IsAbs(req.Dir) {
return badReqErrorf("Dir is not absolute")
}
c, err := j.getCmd(req.ContextId, req.CommandName)
if err != nil {
return badReqErrorf("%s", err)
}
var stdin, stdout, stderr bytes.Buffer
ctx := &cmd.Context{
Dir: req.Dir,
Stdin: &stdin,
Stdout: &stdout,
Stderr: &stderr,
}
j.mu.Lock()
defer j.mu.Unlock()
log.Infof("worker/uniter/jujuc: running hook tool %q %q", req.CommandName, req.Args)
log.Debugf("worker/uniter/jujuc: hook context id %q; dir %q", req.ContextId, req.Dir)
resp.Code = cmd.Main(c, ctx, req.Args)
resp.Stdout = stdout.Bytes()
resp.Stderr = stderr.Bytes()
return nil
}
示例13: realTimeSlot
// realTimeSlot disables the hardcoding introduced by fakeTimeSlot.
func realTimeSlot() {
fakeMutex.Lock()
fakeNow = time.Time{}
fakeOffset = 0
fakeMutex.Unlock()
log.Infof("state/presence: Not faking presence time. Real time slot in use.")
}
示例14: Destroy
func (e *environ) Destroy(ensureInsts []instance.Instance) error {
log.Infof("environs/openstack: destroying environment %q", e.name)
insts, err := e.AllInstances()
if err != nil {
return fmt.Errorf("cannot get instances: %v", err)
}
found := make(map[instance.Id]bool)
var ids []instance.Id
for _, inst := range insts {
ids = append(ids, inst.Id())
found[inst.Id()] = true
}
// Add any instances we've been told about but haven't yet shown
// up in the instance list.
for _, inst := range ensureInsts {
id := instance.Id(inst.(*openstackInstance).Id())
if !found[id] {
ids = append(ids, id)
found[id] = true
}
}
err = e.terminateInstances(ids)
if err != nil {
return err
}
return e.Storage().RemoveAll()
}
示例15: Close
// Close closes the connection and its underlying codec; it returns when
// all requests have been terminated.
//
// If the connection is serving requests, and the root value implements
// the Killer interface, its Kill method will be called. The codec will
// then be closed only when all its outstanding server calls have
// completed.
func (conn *Conn) Close() error {
conn.mutex.Lock()
if conn.closing {
conn.mutex.Unlock()
return errors.New("already closed")
}
conn.closing = true
// Kill server requests if appropriate. Client requests will be
// terminated when the input loop finishes.
if conn.rootValue.IsValid() {
if killer, ok := conn.rootValue.Interface().(Killer); ok {
killer.Kill()
}
}
conn.mutex.Unlock()
// Wait for any outstanding server requests to complete
// and write their replies before closing the codec.
conn.srvPending.Wait()
// Closing the codec should cause the input loop to terminate.
if err := conn.codec.Close(); err != nil {
log.Infof("rpc: error closing codec: %v", err)
}
<-conn.dead
return conn.inputLoopError
}