Revision dcb93971 scripts/gnt-node

b/scripts/gnt-node
130 130
  SubmitOpCode(op)
131 131

  
132 132

  
133
def ListVolumes(opts, args):
134
  """List logical volumes on node(s).
135

  
136
  """
137
  if opts.output is None:
138
    selected_fields = ["node", "phys", "vg",
139
                       "name", "size", "instance"]
140
  else:
141
    selected_fields = opts.output.split(",")
142

  
143
  op = opcodes.OpQueryNodeVolumes(nodes=args, output_fields=selected_fields)
144
  output = SubmitOpCode(op)
145

  
146
  mlens = [0 for name in selected_fields]
147
  format_fields = []
148
  unitformat_fields = ("size",)
149
  for field in selected_fields:
150
    if field in unitformat_fields:
151
      format_fields.append("%*s")
152
    else:
153
      format_fields.append("%-*s")
154

  
155
  separator = opts.separator
156
  if "%" in separator:
157
    separator = separator.replace("%", "%%")
158
  format = separator.join(format_fields)
159

  
160
  for row in output:
161
    for idx, val in enumerate(row):
162
      if opts.human_readable and selected_fields[idx] in unitformat_fields:
163
        try:
164
          val = int(val)
165
        except ValueError:
166
          pass
167
        else:
168
          val = row[idx] = utils.FormatUnit(val)
169
      mlens[idx] = max(mlens[idx], len(val))
170

  
171
  if not opts.no_headers:
172
    header_list = {"node": "Node", "phys": "PhysDev",
173
                   "vg": "VG", "name": "Name",
174
                   "size": "Size", "instance": "Instance"}
175
    args = []
176
    for idx, name in enumerate(selected_fields):
177
      hdr = header_list[name]
178
      mlens[idx] = max(mlens[idx], len(hdr))
179
      args.append(mlens[idx])
180
      args.append(hdr)
181
    logger.ToStdout(format % tuple(args))
182

  
183
  for row in output:
184
    args = []
185
    for idx, val in enumerate(row):
186
      args.append(mlens[idx])
187
      args.append(val)
188
    logger.ToStdout(format % tuple(args))
189

  
190
  return 0
191

  
192

  
133 193
commands = {
134 194
  'add': (AddNode, ARGS_ONE,
135 195
          [DEBUG_OPT,
......
140 200
  'info': (ShowNodeConfig, ARGS_ANY, [DEBUG_OPT],
141 201
           "[<node_name>...]", "Show information about the node(s)"),
142 202
  'list': (ListNodes, ARGS_NONE,
143
           [DEBUG_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT,
144
            make_option("-o", "--output", dest="output", action="store",
145
                        type="string", help="Select output fields",
146
                        metavar="FIELDS")
147
            ],
203
           [DEBUG_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT],
148 204
           "", "Lists the nodes in the cluster"),
149 205
  'remove': (RemoveNode, ARGS_ONE, [DEBUG_OPT],
150 206
             "<node_name>", "Removes a node from the cluster"),
207
  'volumes': (ListVolumes, ARGS_ANY,
208
              [DEBUG_OPT, NOHDR_OPT, SEP_OPT, USEUNITS_OPT, FIELDS_OPT],
209
              "[<node_name>...]", "List logical volumes on node(s)"),
151 210
  }
152 211

  
153 212

  

Also available in: Unified diff