本文整理汇总了Golang中github.com/juju/juju/apiserver/common.NewStatusSetter函数的典型用法代码示例。如果您正苦于以下问题:Golang NewStatusSetter函数的具体用法?Golang NewStatusSetter怎么用?Golang NewStatusSetter使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewStatusSetter函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: NewStatusAPI
// NewStatusAPI creates a new server-side Status setter API facade.
func NewStatusAPI(st *state.State, getCanModify common.GetAuthFunc) *StatusAPI {
unitSetter := common.NewStatusSetter(st, getCanModify)
unitGetter := common.NewStatusGetter(st, getCanModify)
serviceSetter := common.NewServiceStatusSetter(st, getCanModify)
serviceGetter := common.NewServiceStatusGetter(st, getCanModify)
agentSetter := common.NewStatusSetter(&unitAgentFinder{st}, getCanModify)
return &StatusAPI{
agentSetter: agentSetter,
unitSetter: unitSetter,
unitGetter: unitGetter,
serviceSetter: serviceSetter,
serviceGetter: serviceGetter,
getCanModify: getCanModify,
}
}
示例2: newUndertakerAPI
func newUndertakerAPI(st State, resources facade.Resources, authorizer facade.Authorizer) (*UndertakerAPI, error) {
if !authorizer.AuthMachineAgent() || !authorizer.AuthModelManager() {
return nil, common.ErrPerm
}
model, err := st.Model()
if err != nil {
return nil, errors.Trace(err)
}
getCanModifyModel := func() (common.AuthFunc, error) {
return func(tag names.Tag) bool {
if st.IsController() {
return true
}
// Only the agent's model can be modified.
modelTag, ok := tag.(names.ModelTag)
if !ok {
return false
}
return modelTag.Id() == model.UUID()
}, nil
}
return &UndertakerAPI{
st: st,
resources: resources,
StatusSetter: common.NewStatusSetter(st, getCanModifyModel),
}, nil
}
示例3: SetUpTest
func (s *statusSetterSuite) SetUpTest(c *gc.C) {
s.statusBaseSuite.SetUpTest(c)
s.setter = common.NewStatusSetter(s.State, func() (common.AuthFunc, error) {
return s.authFunc, nil
})
}
示例4: NewStatusAPI
// NewStatusAPI creates a new server-side Status setter API facade.
func NewStatusAPI(st *state.State, getCanModify common.GetAuthFunc) *StatusAPI {
// TODO(fwereade): so *all* of these have exactly the same auth
// characteristics? I think not.
unitSetter := common.NewStatusSetter(st, getCanModify)
unitGetter := common.NewStatusGetter(st, getCanModify)
serviceSetter := common.NewServiceStatusSetter(st, getCanModify)
serviceGetter := common.NewServiceStatusGetter(st, getCanModify)
agentSetter := common.NewStatusSetter(&common.UnitAgentFinder{st}, getCanModify)
return &StatusAPI{
agentSetter: agentSetter,
unitSetter: unitSetter,
unitGetter: unitGetter,
serviceSetter: serviceSetter,
serviceGetter: serviceGetter,
getCanModify: getCanModify,
}
}
示例5: New
// New returns a new unitAssigner api instance.
func New(st *state.State, res *common.Resources, _ common.Authorizer) (*API, error) {
setter := common.NewStatusSetter(&common.UnitAgentFinder{st}, common.AuthAlways())
return &API{
st: st,
res: res,
statusSetter: setter,
}, nil
}
示例6: NewProvisionerAPI
// NewProvisionerAPI creates a new server-side ProvisionerAPI facade.
func NewProvisionerAPI(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*ProvisionerAPI, error) {
if !authorizer.AuthMachineAgent() && !authorizer.AuthEnvironManager() {
return nil, common.ErrPerm
}
getAuthFunc := func() (common.AuthFunc, error) {
isEnvironManager := authorizer.AuthEnvironManager()
isMachineAgent := authorizer.AuthMachineAgent()
authEntityTag := authorizer.GetAuthTag()
return func(tag names.Tag) bool {
if isMachineAgent && tag == authEntityTag {
// A machine agent can always access its own machine.
return true
}
switch tag := tag.(type) {
case names.MachineTag:
parentId := state.ParentId(tag.Id())
if parentId == "" {
// All top-level machines are accessible by the
// environment manager.
return isEnvironManager
}
// All containers with the authenticated machine as a
// parent are accessible by it.
// TODO(dfc) sometimes authEntity tag is nil, which is fine because nil is
// only equal to nil, but it suggests someone is passing an authorizer
// with a nil tag.
return isMachineAgent && names.NewMachineTag(parentId) == authEntityTag
default:
return false
}
}, nil
}
env, err := st.Environment()
if err != nil {
return nil, err
}
urlGetter := common.NewToolsURLGetter(env.UUID(), st)
return &ProvisionerAPI{
Remover: common.NewRemover(st, false, getAuthFunc),
StatusSetter: common.NewStatusSetter(st, getAuthFunc),
StatusGetter: common.NewStatusGetter(st, getAuthFunc),
DeadEnsurer: common.NewDeadEnsurer(st, getAuthFunc),
PasswordChanger: common.NewPasswordChanger(st, getAuthFunc),
LifeGetter: common.NewLifeGetter(st, getAuthFunc),
StateAddresser: common.NewStateAddresser(st),
APIAddresser: common.NewAPIAddresser(st, resources),
EnvironWatcher: common.NewEnvironWatcher(st, resources, authorizer),
EnvironMachinesWatcher: common.NewEnvironMachinesWatcher(st, resources, authorizer),
InstanceIdGetter: common.NewInstanceIdGetter(st, getAuthFunc),
ToolsFinder: common.NewToolsFinder(st, st, urlGetter),
st: st,
resources: resources,
authorizer: authorizer,
getAuthFunc: getAuthFunc,
}, nil
}
示例7: TestSetStatusNoArgsNoError
func (*statusSetterSuite) TestSetStatusNoArgsNoError(c *gc.C) {
getCanModify := func() (common.AuthFunc, error) {
return nil, fmt.Errorf("pow")
}
s := common.NewStatusSetter(&fakeState{}, getCanModify)
result, err := s.SetStatus(params.SetStatus{})
c.Assert(err, gc.IsNil)
c.Assert(result.Results, gc.HasLen, 0)
}
示例8: TestUpdateStatus
func (*statusSetterSuite) TestUpdateStatus(c *gc.C) {
st := &fakeState{
entities: map[names.Tag]entityWithError{
m("0"): &fakeStatusSetter{status: params.StatusPending, info: "blah", err: fmt.Errorf("x0 fails")},
m("1"): &fakeStatusSetter{status: params.StatusError, info: "foo", data: map[string]interface{}{"foo": "blah"}},
m("2"): &fakeStatusSetter{status: params.StatusError, info: "some info"},
m("3"): &fakeStatusSetter{fetchError: "x3 error"},
m("4"): &fakeStatusSetter{status: params.StatusStarted},
m("5"): &fakeStatusSetter{status: params.StatusStopped, info: ""},
},
}
getCanModify := func() (common.AuthFunc, error) {
x0 := m("0")
x1 := m("1")
x2 := m("2")
x3 := m("3")
x4 := m("4")
return func(tag names.Tag) bool {
return tag == x0 || tag == x1 || tag == x2 || tag == x3 || tag == x4
}, nil
}
s := common.NewStatusSetter(st, getCanModify)
args := params.SetStatus{
Entities: []params.EntityStatus{
{Tag: "machine-0", Data: nil},
{Tag: "machine-1", Data: nil},
{Tag: "machine-2", Data: map[string]interface{}{"foo": "bar"}},
{Tag: "machine-3", Data: map[string]interface{}{"foo": "bar"}},
{Tag: "machine-4", Data: map[string]interface{}{"foo": "bar"}},
{Tag: "machine-5", Data: map[string]interface{}{"foo": "bar"}},
{Tag: "machine-6", Data: nil},
},
}
result, err := s.UpdateStatus(args)
c.Assert(err, gc.IsNil)
c.Assert(result, gc.DeepEquals, params.ErrorResults{
Results: []params.ErrorResult{
{¶ms.Error{Message: "x0 fails"}},
{nil},
{nil},
{¶ms.Error{Message: "x3 error"}},
{¶ms.Error{Message: `"machine-4" is not in an error state`}},
{apiservertesting.ErrUnauthorized},
{apiservertesting.ErrUnauthorized},
},
})
get := func(tag names.Tag) *fakeStatusSetter {
return st.entities[tag].(*fakeStatusSetter)
}
c.Assert(get(m("1")).status, gc.Equals, params.StatusError)
c.Assert(get(m("1")).info, gc.Equals, "foo")
c.Assert(get(m("1")).data, gc.DeepEquals, map[string]interface{}{"foo": "blah"})
c.Assert(get(m("2")).status, gc.Equals, params.StatusError)
c.Assert(get(m("2")).info, gc.Equals, "some info")
c.Assert(get(m("2")).data, gc.DeepEquals, map[string]interface{}{"foo": "bar"})
}
示例9: NewClient
// NewClient creates a new instance of the Client Facade.
func NewClient(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*Client, error) {
if !authorizer.AuthClient() {
return nil, common.ErrPerm
}
return &Client{api: &API{
state: st,
auth: authorizer,
resources: resources,
statusSetter: common.NewStatusSetter(st, common.AuthAlways()),
}}, nil
}
示例10: TestSetStatusError
func (*statusSetterSuite) TestSetStatusError(c *gc.C) {
getCanModify := func() (common.AuthFunc, error) {
return nil, fmt.Errorf("pow")
}
s := common.NewStatusSetter(&fakeState{}, getCanModify)
args := params.SetStatus{
Entities: []params.EntityStatus{{"x0", "", "", nil}},
}
_, err := s.SetStatus(args)
c.Assert(err, gc.ErrorMatches, "pow")
}
示例11: TestSetStatus
func (*statusSetterSuite) TestSetStatus(c *gc.C) {
st := &fakeState{
entities: map[names.Tag]entityWithError{
u("x/0"): &fakeStatusSetter{status: params.StatusPending, info: "blah", err: fmt.Errorf("x0 fails")},
u("x/1"): &fakeStatusSetter{status: params.StatusStarted, info: "foo"},
u("x/2"): &fakeStatusSetter{status: params.StatusError, info: "some info"},
u("x/3"): &fakeStatusSetter{fetchError: "x3 error"},
u("x/4"): &fakeStatusSetter{status: params.StatusStopped, info: ""},
},
}
getCanModify := func() (common.AuthFunc, error) {
x0 := u("x/0")
x1 := u("x/1")
x2 := u("x/2")
x3 := u("x/3")
return func(tag names.Tag) bool {
return tag == x0 || tag == x1 || tag == x2 || tag == x3
}, nil
}
s := common.NewStatusSetter(st, getCanModify)
args := params.SetStatus{
Entities: []params.EntityStatus{
{"unit-x-0", params.StatusStarted, "bar", nil},
{"unit-x-1", params.StatusStopped, "", nil},
{"unit-x-2", params.StatusPending, "not really", nil},
{"unit-x-3", params.StatusStopped, "", nil},
{"unit-x-4", params.StatusError, "blarg", nil},
{"unit-x-5", params.StatusStarted, "42", nil},
},
}
result, err := s.SetStatus(args)
c.Assert(err, gc.IsNil)
c.Assert(result, gc.DeepEquals, params.ErrorResults{
Results: []params.ErrorResult{
{¶ms.Error{Message: "x0 fails"}},
{nil},
{nil},
{¶ms.Error{Message: "x3 error"}},
{apiservertesting.ErrUnauthorized},
{apiservertesting.ErrUnauthorized},
},
})
get := func(tag names.Tag) *fakeStatusSetter {
return st.entities[tag].(*fakeStatusSetter)
}
c.Assert(get(u("x/1")).status, gc.Equals, params.StatusStopped)
c.Assert(get(u("x/1")).info, gc.Equals, "")
c.Assert(get(u("x/2")).status, gc.Equals, params.StatusPending)
c.Assert(get(u("x/2")).info, gc.Equals, "not really")
}
示例12: NewClient
// NewClient creates a new instance of the Client Facade.
func NewClient(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*Client, error) {
if !authorizer.AuthClient() {
return nil, common.ErrPerm
}
urlGetter := common.NewToolsURLGetter(st.EnvironUUID(), st)
return &Client{
api: &API{
state: st,
auth: authorizer,
resources: resources,
statusSetter: common.NewStatusSetter(st, common.AuthAlways()),
toolsFinder: common.NewToolsFinder(st, st, urlGetter),
},
check: common.NewBlockChecker(st)}, nil
}
示例13: NewClient
// NewClient creates a new instance of the Client Facade.
func NewClient(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*Client, error) {
if !authorizer.AuthClient() {
return nil, common.ErrPerm
}
env, err := st.Environment()
if err != nil {
return nil, err
}
urlGetter := common.NewToolsURLGetter(env.UUID(), st)
return &Client{api: &API{
state: st,
auth: authorizer,
resources: resources,
statusSetter: common.NewStatusSetter(st, common.AuthAlways()),
toolsFinder: common.NewToolsFinder(st, st, urlGetter),
}}, nil
}
示例14: NewClient
// NewClient creates a new instance of the Client Facade.
func NewClient(st *state.State, resources *common.Resources, authorizer common.Authorizer) (*Client, error) {
if !authorizer.AuthClient() {
return nil, common.ErrPerm
}
apiState := getState(st)
urlGetter := common.NewToolsURLGetter(apiState.ModelUUID(), apiState)
client := &Client{
api: &API{
stateAccessor: apiState,
auth: authorizer,
resources: resources,
statusSetter: common.NewStatusSetter(st, common.AuthAlways()),
toolsFinder: common.NewToolsFinder(st, st, urlGetter),
},
check: common.NewBlockChecker(st)}
return client, nil
}
示例15: NewDeployerAPI
// NewDeployerAPI creates a new server-side DeployerAPI facade.
func NewDeployerAPI(
st *state.State,
resources facade.Resources,
authorizer facade.Authorizer,
) (*DeployerAPI, error) {
if !authorizer.AuthMachineAgent() {
return nil, common.ErrPerm
}
getAuthFunc := func() (common.AuthFunc, error) {
// Get all units of the machine and cache them.
thisMachineTag := authorizer.GetAuthTag()
units, err := getAllUnits(st, thisMachineTag)
if err != nil {
return nil, err
}
// Then we just check if the unit is already known.
return func(tag names.Tag) bool {
for _, unit := range units {
// TODO (thumper): remove the names.Tag conversion when gccgo
// implements concrete-type-to-interface comparison correctly.
if names.Tag(names.NewUnitTag(unit)) == tag {
return true
}
}
return false
}, nil
}
getCanWatch := func() (common.AuthFunc, error) {
return authorizer.AuthOwner, nil
}
return &DeployerAPI{
Remover: common.NewRemover(st, true, getAuthFunc),
PasswordChanger: common.NewPasswordChanger(st, getAuthFunc),
LifeGetter: common.NewLifeGetter(st, getAuthFunc),
StateAddresser: common.NewStateAddresser(st),
APIAddresser: common.NewAPIAddresser(st, resources),
UnitsWatcher: common.NewUnitsWatcher(st, resources, getCanWatch),
StatusSetter: common.NewStatusSetter(st, getAuthFunc),
st: st,
resources: resources,
authorizer: authorizer,
}, nil
}