[occi-wg] Syntax of OCCI API

Chris Webb chris.webb at elastichosts.com
Fri Apr 17 03:48:16 CDT 2009


Sam Johnston <samj at samj.net> writes:

> but in any case INI files are
> simple, standard across platforms, well defined, etc.
> 
> You can parse them in shell like
> this<http://www.debian-administration.org/articles/55#comment_24>
> :
> 
> #!/bin/sh
> [ -z "$1" ] || [ -z "$2" ] && exit 1
> sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \
>     -e 's/;.*$//' \
>     -e 's/[[:space:]]*$//' \
>     -e 's/^[[:space:]]*//' \
>     -e "s/^\(.*\)=\([^\"']*\)$/\1=\"\2\"/" \
>    < $1 \
>    | sed -n -e "/^\[$2\]/,/^\s*\[/{/^[^;].*\=.*/p;}"

You've completely missed the point again. (Perhaps understandably, since
you're not in the target audience for this format.)

  while read K V; do FOO; done

is something you can type in a shell one-liner, which is the most
interesting 'use case' (sorry, horrible jargon!) for shell people. This
complex hack is not, and I note that you had to google for it rather than
writing it off the top of your head, which should have been enough to make
the point clear. (Incidentally, it doesn't get INI quoting right. Doing it
correctly and allowing for backslash escapes is somewhat harder.)

Whitespace separated KEY VALUE is better-defined than INI[1], can be parsed by
shell read, by C strtok() or strsep(), and is generally pleasant to work
with in languages without sophisticated string handling or data structures.
Here's your sample translated to that format:

  id decca5a5-8952-4004-9793-cdbbf05c3c63
  category server
  title Debian GNU/Linux 5.0 Virtual Appliance
  summary Base installation of Debian GNU/Linux 5.0
  content.cpu 2
  content.memory 4Gb
  link.disk[0].id 4696b561-a253-42b4-bd27-7aa4950e0a60
  link.disk[0].dev sda
  link.network[0].id 45a73b80-c957-4ae1-97c6-b70652eba1d1
  link.network[0].dev eth0
  mc.state RUNNING
  br.meter.rate 0.10
  br.meter.currency USD
  br.meter.unit hours
  br.meter.total 35.27
  pm.monitor.cpu 75.2
  pm.monitor.mem 1059374258
  mc.ops.start http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/start
  mc.ops.stop http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/stop
  mc.ops.restart http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/restart
  mc.ops.suspend http://example.com/decca5a5-8952-4004-9793-cdbbf05c3c63/ops/suspend

  id 4696b561-a253-42b4-bd27-7aa4950e0a60
  category storage
  content.size 148251374
  link.self virtual-disk.vmdk

  id 45a73b80-c957-4ae1-97c6-b70652eba1d1
  category network
  content.vlan 4095
  content.dhcp true
  content.subnet 192.168.0.0
  content.netmask 255.255.0.0
  content.gateway 192.168.0.1
  vnd.com.cisco.cdp true

I'll not comment on the key space or conflation of objects into one
namespace with a category key in this post.

Cheers,

Chris.

[1] See http://en.wikipedia.org/wiki/Initialization_file for details on some
of the variation seen in the wild. There's no formal spec to disambiguate.



More information about the occi-wg mailing list