github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/tools/lxdclient/utils.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  // +build go1.3
     5  
     6  package lxdclient
     7  
     8  import (
     9  	"bytes"
    10  
    11  	"github.com/juju/errors"
    12  	"github.com/juju/utils/series"
    13  
    14  	"github.com/juju/juju/service"
    15  	"github.com/juju/juju/service/common"
    16  )
    17  
    18  type closingBuffer struct {
    19  	bytes.Buffer
    20  }
    21  
    22  // Close implements io.Closer.
    23  func (closingBuffer) Close() error {
    24  	return nil
    25  }
    26  
    27  // IsInstalledLocally returns true if LXD is installed locally.
    28  func IsInstalledLocally() (bool, error) {
    29  	names, err := service.ListServices()
    30  	if err != nil {
    31  		return false, errors.Trace(err)
    32  	}
    33  	for _, name := range names {
    34  		if name == "lxd" {
    35  			return true, nil
    36  		}
    37  	}
    38  	return false, nil
    39  }
    40  
    41  // IsRunningLocally returns true if LXD is running locally.
    42  func IsRunningLocally() (bool, error) {
    43  	installed, err := IsInstalledLocally()
    44  	if err != nil {
    45  		return installed, errors.Trace(err)
    46  	}
    47  	if !installed {
    48  		return false, nil
    49  	}
    50  
    51  	svc, err := service.NewService("lxd", common.Conf{}, series.HostSeries())
    52  	if err != nil {
    53  		return false, errors.Trace(err)
    54  	}
    55  
    56  	running, err := svc.Running()
    57  	if err != nil {
    58  		return running, errors.Trace(err)
    59  	}
    60  
    61  	return running, nil
    62  }