start imp. server side set filters for agents

will allow https://github.com/woodpecker-ci/woodpecker/issues/267

TODOs: API to set server-side-agent-filters; WebUI; secure all rpc endpoints; secure set of labels for non-admins
This commit is contained in:
6543 2024-03-23 22:20:24 +01:00
parent fbdfa14a00
commit 414ee1d371
No known key found for this signature in database
GPG key ID: B8BE6D610E61C862
2 changed files with 9 additions and 2 deletions

View file

@ -56,13 +56,18 @@ func (s *RPC) Next(c context.Context, agentFilter rpc.Filter) (*rpc.Workflow, er
log.Debug().Msgf("agent connected: %s: polling", hostname)
}
filterFn := createFilterFunc(agentFilter)
agent, err := s.getAgentFromContext(c)
if err != nil {
return nil, err
}
// enforce server set agent filters
for k, v := range agent.Filters {
agentFilter.Labels[k] = v
}
filterFn := createFilterFunc(agentFilter)
if agent.NoSchedule {
time.Sleep(1 * time.Second)
return nil, nil

View file

@ -27,6 +27,8 @@ type Agent struct {
Capacity int32 `json:"capacity" xorm:"capacity"`
Version string `json:"version" xorm:"'version'"`
NoSchedule bool `json:"no_schedule" xorm:"no_schedule"`
// Server side enforced agent filters
Filters map[string]string `json:"filters" xorm:"'filters' json"`
} // @name Agent
// TableName return database table name for xorm