#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#This is the default configuration for the jclouds command output.
#All entries are prefixed by type.
#headers: The headers that will be displayed by the table.
#expressions: Groovy expressions that are evaluated on the object. The object is noted by its type (e.g. image,node,location etc).
#shortBy: The column that will be used for sorting the table.
#ascending: A boolean that specifies if the order should be ascending or descending.

# Not yet implemented:
# color: The color of each column.


image.headers=[id];[location];[os family];[os version];[status]
image.expressions=image.id;image.location.id;image.operatingSystem.family;image.operatingSystem.version;image.status
image.shortby=[id]
image.ascending=true

node.headers=[id];[location];[hardware];[group];[status]
node.expressions=node.id;node.location.id;node.hardware.id;node.group;node.status

hardware.headers=[id];[ram];[cpu];[cores]
hardware.expressions=hardware.id;hardware.ram;hardware.processors.sum{it.cores*it.speed};hardware.processors.sum{it.cores}
hardware.alignments=left;right;right;right
hardware.shortby=[cpu]
hardware.ascending=true


location.headers=[id];[scope];[description];[parent]
location.expressions=location.id;location.scope;location.description;location.parent.id
location.shortby=[parent]
location.ascending=true

#Chef Commands
cookbook.headers=[id];[name];[version]
cookbook.expressions=cookbook.name;cookbook.cookbookName;cookbook.version
cookbook.shortBy=[name]
cookbook.ascending=true