github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/cmd/jujud/run_linux.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package main
     5  
     6  import (
     7      "fmt"
     8      "net/rpc"
     9      "os"
    10      "path/filepath"
    11  
    12      "launchpad.net/juju-core/juju/osenv"
    13      "launchpad.net/juju-core/utils/exec"
    14      "launchpad.net/juju-core/worker/uniter"
    15  )
    16  
    17  
    18  func (c *RunCommand) executeInUnitContext() (*exec.ExecResponse, error) {
    19      unitDir := filepath.Join(AgentDir, c.unit)
    20      logger.Debugf("looking for unit dir %s", unitDir)
    21      // make sure the unit exists
    22      _, err := os.Stat(unitDir)
    23      if os.IsNotExist(err) {
    24          return nil, fmt.Errorf("unit %q not found on this machine", c.unit)
    25      } else if err != nil {
    26          return nil, err
    27      }
    28  
    29      socketPath := filepath.Join(unitDir, uniter.RunListenerFile)
    30      // make sure the socket exists
    31      client, err := rpc.Dial(osenv.SocketType, socketPath)
    32      if err != nil {
    33          return nil, err
    34      }
    35      defer client.Close()
    36  
    37      var result exec.ExecResponse
    38      err = client.Call(uniter.JujuRunEndpoint, c.commands, &result)
    39      return &result, err
    40  }
    41  
    42  func (c *RunCommand) executeNoContext() (*exec.ExecResponse, error) {
    43      // Acquire the uniter hook execution lock to make sure we don't
    44      // stomp on each other.
    45      lock, err := getLock()
    46      if err != nil {
    47          return nil, err
    48      }
    49      err = lock.Lock("juju-run")
    50      if err != nil {
    51          return nil, err
    52      }
    53      defer lock.Unlock()
    54  
    55      runCmd := `[ -f "/home/ubuntu/.juju-proxy" ] && . "/home/ubuntu/.juju-proxy"` + "\n" + c.commands
    56  
    57      return exec.RunCommands(
    58          exec.RunParams{
    59              Commands: runCmd,
    60          })
    61  }