161
161
return &server, nil
164
// serverByName retrieves the first existing server with the given name.
165
func (n *Nova) serverByName(name string) (*nova.ServerDetail, error) {
166
for _, server := range n.servers {
167
if server.Name == name {
171
return nil, fmt.Errorf("no such server named %q", name)
164
174
// serverAsEntity returns the stored ServerDetail as Entity.
165
175
func (n *Nova) serverAsEntity(serverId string) (*nova.Entity, error) {
166
176
server, err := n.server(serverId)
187
// matchServer returns true if the given server is matched by the
188
// given filter, or false otherwise.
189
func (n *Nova) matchServer(filter *nova.Filter, server nova.ServerDetail) bool {
191
return true // empty filter matches everything
193
values := filter.Values
194
for _, val := range values[nova.FilterStatus] {
195
if server.Status == val {
199
for _, val := range values[nova.FilterServer] {
200
if server.Name == val {
204
// TODO(dimitern) maybe implement FilterFlavor, FilterImage,
205
// FilterMarker, FilterLimit and FilterChangesSince
177
209
// allServers returns a list of all existing servers.
178
func (n *Nova) allServers() []nova.ServerDetail {
210
// Filtering is supported, see nova.Filter* for more info.
211
func (n *Nova) allServers(filter *nova.Filter) []nova.ServerDetail {
179
212
var servers []nova.ServerDetail
180
213
for _, server := range n.servers {
181
servers = append(servers, server)
214
if n.matchServer(filter, server) {
215
servers = append(servers, server)
186
221
// allServersAsEntities returns all servers as Entity structs.
187
func (n *Nova) allServersAsEntities() []nova.Entity {
222
// Filtering is supported, see nova.Filter* for more info.
223
func (n *Nova) allServersAsEntities(filter *nova.Filter) []nova.Entity {
188
224
var entities []nova.Entity
189
225
for _, server := range n.servers {
190
entities = append(entities, nova.Entity{
226
if n.matchServer(filter, server) {
227
entities = append(entities, nova.Entity{