occi 2.3.1 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,45 +11,45 @@
11
11
  "occi":{
12
12
  "compute":{
13
13
  "architecture":{
14
- "mutable":true,
15
- "required":false,
16
- "type":"string",
17
- "pattern":"x86|x64",
18
- "default":"x86"
14
+ "Mutable":true,
15
+ "Required":false,
16
+ "Type":"string",
17
+ "Pattern":"x86|x64",
18
+ "Default":"x86"
19
19
  },
20
20
  "cores":{
21
- "mutable":true,
22
- "required":false,
23
- "type":"number",
24
- "minimum":1,
25
- "maximum":32767
21
+ "Mutable":true,
22
+ "Required":false,
23
+ "Type":"number",
24
+ "Minimum":1,
25
+ "Maximum":32767
26
26
  },
27
27
  "hostname":{
28
- "mutable":true,
29
- "required":false,
30
- "type":"string",
31
- "pattern":"(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*"
28
+ "Mutable":true,
29
+ "Required":false,
30
+ "Type":"string",
31
+ "Pattern":"(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*"
32
32
  },
33
33
  "speed":{
34
- "mutable":true,
35
- "required":false,
36
- "type":"number",
37
- "minimum":0,
38
- "maximum":32767
34
+ "Mutable":true,
35
+ "Required":false,
36
+ "Type":"number",
37
+ "Minimum":0,
38
+ "Maximum":32767
39
39
  },
40
40
  "memory":{
41
- "mutable":true,
42
- "required":false,
43
- "type":"number",
44
- "minimum":0,
45
- "maximum":32767
41
+ "Mutable":true,
42
+ "Required":false,
43
+ "Type":"number",
44
+ "Minimum":0,
45
+ "Maximum":32767
46
46
  },
47
47
  "state":{
48
- "mutable":false,
49
- "required":false,
50
- "type":"string",
51
- "pattern":"inactive|active|suspended|error",
52
- "default":"inactive"
48
+ "Mutable":false,
49
+ "Required":false,
50
+ "Type":"string",
51
+ "Pattern":"inactive|active|suspended|error",
52
+ "Default":"inactive"
53
53
  }
54
54
  }
55
55
  }
@@ -75,11 +75,11 @@
75
75
  "title":"Stop Compute instance",
76
76
  "attributes":{
77
77
  "method":{
78
- "mutable":true,
79
- "required":false,
80
- "type":"string",
81
- "pattern":"graceful|acpioff|poweroff",
82
- "default":"poweroff"
78
+ "Mutable":true,
79
+ "Required":false,
80
+ "Type":"string",
81
+ "Pattern":"graceful|acpioff|poweroff",
82
+ "Default":"poweroff"
83
83
  }
84
84
  }
85
85
  },
@@ -89,11 +89,11 @@
89
89
  "title":"Restart Compute instance",
90
90
  "attributes":{
91
91
  "method":{
92
- "mutable":true,
93
- "required":false,
94
- "type":"string",
95
- "pattern":"graceful|warm|cold",
96
- "default":"cold"
92
+ "Mutable":true,
93
+ "Required":false,
94
+ "Type":"string",
95
+ "Pattern":"graceful|warm|cold",
96
+ "Default":"cold"
97
97
  }
98
98
  }
99
99
  },
@@ -103,11 +103,11 @@
103
103
  "title":"Suspend Compute instance",
104
104
  "attributes":{
105
105
  "method":{
106
- "mutable":true,
107
- "required":false,
108
- "type":"string",
109
- "pattern":"hibernate|suspend",
110
- "default":"suspend"
106
+ "Mutable":true,
107
+ "Required":false,
108
+ "Type":"string",
109
+ "Pattern":"hibernate|suspend",
110
+ "Default":"suspend"
111
111
  }
112
112
  }
113
113
  }
@@ -8,32 +8,32 @@
8
8
  "occi":{
9
9
  "network":{
10
10
  "address":{
11
- "mutable":true,
12
- "required":false,
13
- "type":"string",
14
- "pattern":"(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*(\\/(\\d|\\d\\d|1[0-1]\\d|12[0-8]))$)|(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(\\d|[1-2]\\d|3[0-2]))$)",
15
- "default":"10.0.0.0/8"
11
+ "Mutable":true,
12
+ "Required":false,
13
+ "Type":"string",
14
+ "Pattern":"(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*(\\/(\\d|\\d\\d|1[0-1]\\d|12[0-8]))$)|(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(\\d|[1-2]\\d|3[0-2]))$)",
15
+ "Default":"10.0.0.0/8"
16
16
  },
17
17
  "gateway":{
18
- "mutable":true,
19
- "required":false,
20
- "type":"string",
21
- "pattern":"(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)",
22
- "default":"10.0.0.1"
18
+ "Mutable":true,
19
+ "Required":false,
20
+ "Type":"string",
21
+ "Pattern":"(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)",
22
+ "Default":"10.0.0.1"
23
23
  },
24
24
  "allocation":{
25
- "mutable":true,
26
- "required":false,
27
- "type":"string",
28
- "pattern":"dynamic|static",
29
- "default":"dynamic"
25
+ "Mutable":true,
26
+ "Required":false,
27
+ "Type":"string",
28
+ "Pattern":"dynamic|static",
29
+ "Default":"dynamic"
30
30
  },
31
31
  "state":{
32
- "mutable":false,
33
- "required":false,
34
- "type":"string",
35
- "pattern":"active|inactive",
36
- "default":"inactive"
32
+ "Mutable":false,
33
+ "Required":false,
34
+ "Type":"string",
35
+ "Pattern":"active|inactive",
36
+ "Default":"inactive"
37
37
  }
38
38
  }
39
39
  }
@@ -8,32 +8,32 @@
8
8
  "occi":{
9
9
  "networkinterface":{
10
10
  "address":{
11
- "mutable":true,
12
- "required":false,
13
- "type":"string",
14
- "pattern":"(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)",
15
- "default":"10.0.0.0/8"
11
+ "Mutable":true,
12
+ "Required":false,
13
+ "Type":"string",
14
+ "Pattern":"(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)",
15
+ "Default":"10.0.0.0/8"
16
16
  },
17
17
  "gateway":{
18
- "mutable":true,
19
- "required":false,
20
- "type":"string",
21
- "pattern":"(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)",
22
- "default":"10.0.0.1"
18
+ "Mutable":true,
19
+ "Required":false,
20
+ "Type":"string",
21
+ "Pattern":"(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*)",
22
+ "Default":"10.0.0.1"
23
23
  },
24
24
  "allocation":{
25
- "mutable":true,
26
- "required":false,
27
- "type":"string",
28
- "pattern":"dynamic|static",
29
- "default":"dynamic"
25
+ "Mutable":true,
26
+ "Required":false,
27
+ "Type":"string",
28
+ "Pattern":"dynamic|static",
29
+ "Default":"dynamic"
30
30
  },
31
31
  "state":{
32
- "mutable":false,
33
- "required":false,
34
- "type":"string",
35
- "pattern":"active|inactive",
36
- "default":"inactive"
32
+ "Mutable":false,
33
+ "Required":false,
34
+ "Type":"string",
35
+ "Pattern":"active|inactive",
36
+ "Default":"inactive"
37
37
  }
38
38
  }
39
39
  }
@@ -11,25 +11,25 @@
11
11
  "occi":{
12
12
  "network":{
13
13
  "vlan":{
14
- "mutable":true,
15
- "required":false,
16
- "type":"number",
17
- "minimum":0,
18
- "maximum":4095,
19
- "default":0
14
+ "Mutable":true,
15
+ "Required":false,
16
+ "Type":"number",
17
+ "Minimum":0,
18
+ "Maximum":4095,
19
+ "Default":0
20
20
  },
21
21
  "label":{
22
- "mutable":true,
23
- "required":false,
24
- "type":"string",
25
- "pattern":".*"
22
+ "Mutable":true,
23
+ "Required":false,
24
+ "Type":"string",
25
+ "Pattern":".*"
26
26
  },
27
27
  "state":{
28
- "mutable":false,
29
- "required":false,
30
- "type":"string",
31
- "pattern":"active|inactive|error",
32
- "default":"inactive"
28
+ "Mutable":false,
29
+ "Required":false,
30
+ "Type":"string",
31
+ "Pattern":"active|inactive|error",
32
+ "Default":"inactive"
33
33
  }
34
34
  }
35
35
  }
@@ -11,25 +11,25 @@
11
11
  "occi":{
12
12
  "networkinterface":{
13
13
  "interface":{
14
- "mutable":true,
15
- "required":false,
16
- "type":"string",
17
- "pattern":".*",
18
- "default":"eth0"
14
+ "Mutable":true,
15
+ "Required":false,
16
+ "Type":"string",
17
+ "Pattern":".*",
18
+ "Default":"eth0"
19
19
  },
20
20
  "mac":{
21
- "mutable":true,
22
- "required":false,
23
- "type":"string",
24
- "pattern":"^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$",
25
- "default":"00:16:3e:00:00:00"
21
+ "Mutable":true,
22
+ "Required":false,
23
+ "Type":"string",
24
+ "Pattern":"^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$",
25
+ "Default":"00:16:3e:00:00:00"
26
26
  },
27
27
  "state":{
28
- "mutable":false,
29
- "required":false,
30
- "type":"string",
31
- "pattern":"active|inactive",
32
- "default":"inactive"
28
+ "Mutable":false,
29
+ "Required":false,
30
+ "Type":"string",
31
+ "Pattern":"active|inactive",
32
+ "Default":"inactive"
33
33
  }
34
34
  }
35
35
  }
@@ -11,18 +11,18 @@
11
11
  "occi":{
12
12
  "storage":{
13
13
  "size":{
14
- "mutable":true,
15
- "required":false,
16
- "type":"number",
17
- "minimum":0,
18
- "maximum":32767
14
+ "Mutable":true,
15
+ "Required":false,
16
+ "Type":"number",
17
+ "Minimum":0,
18
+ "Maximum":32767
19
19
  },
20
20
  "state":{
21
- "mutable":false,
22
- "required":false,
23
- "type":"string",
24
- "pattern":"online|offline|backup|snapshot|resize|degraded",
25
- "default":"offline"
21
+ "Mutable":false,
22
+ "Required":false,
23
+ "Type":"string",
24
+ "Pattern":"online|offline|backup|snapshot|resize|degraded",
25
+ "Default":"offline"
26
26
  }
27
27
  }
28
28
  }
@@ -64,10 +64,10 @@
64
64
  "title":"Resize Storage",
65
65
  "attributes":{
66
66
  "size":{
67
- "mutable":true,
68
- "required":false,
69
- "type":"number",
70
- "default":"suspend"
67
+ "Mutable":true,
68
+ "Required":false,
69
+ "Type":"number",
70
+ "Default":"suspend"
71
71
  }
72
72
  }
73
73
  }
@@ -11,23 +11,23 @@
11
11
  "occi":{
12
12
  "storagelink":{
13
13
  "deviceid":{
14
- "mutable":true,
15
- "required":false,
16
- "type":"string",
17
- "pattern":".*"
14
+ "Mutable":true,
15
+ "Required":false,
16
+ "Type":"string",
17
+ "Pattern":".*"
18
18
  },
19
19
  "mountpoint":{
20
- "mutable":true,
21
- "required":false,
22
- "type":"string",
23
- "pattern":".*"
20
+ "Mutable":true,
21
+ "Required":false,
22
+ "Type":"string",
23
+ "Pattern":".*"
24
24
  },
25
25
  "state":{
26
- "mutable":false,
27
- "required":false,
28
- "type":"string",
29
- "pattern":"active|inactive",
30
- "default":"inactive"
26
+ "Mutable":false,
27
+ "Required":false,
28
+ "Type":"string",
29
+ "Pattern":"active|inactive",
30
+ "Default":"inactive"
31
31
  }
32
32
  }
33
33
  }
data/lib/occi/client.rb CHANGED
@@ -44,17 +44,16 @@ module OCCI
44
44
  end
45
45
 
46
46
  def post_resource(attributes, kind, mixins, resources_to_link)
47
- resource = OCCI::Core::Resource.new
48
- resource.kind = kind.type_identifier
47
+ resource = OCCI::Core::Resource.new(kind.type_identifier)
49
48
  mixins = mixins.collect { |mixin| mixin.type_identifiers } unless mixins.first.kind_of? String
50
49
  resource.mixins = mixins
51
50
  attributes = OCCI::Core::Attributes.split(attributes) unless attributes.kind_of? OCCI::Core::Attributes
52
51
  resource.attributes = attributes
53
52
  resource.links = []
54
53
  resources_to_link.each do |res|
55
- link = OCCI::Link.new
56
- link.kind = 'http://schemas.ogf.org/occi/infrastructure#storagelink' if @model.get_by_id(res.kind).related_to? 'http://schemas.ogf.org/occi/infrastructure#storage'
57
- link.kind = 'http://schemas.ogf.org/occi/infrastructure#networkinterface' if @model.get_by_id(res.kind).related_to? 'http://schemas.ogf.org/occi/infrastructure#network'
54
+ kind = 'http://schemas.ogf.org/occi/infrastructure#storagelink' if @model.get_by_id(res.kind).related_to? 'http://schemas.ogf.org/occi/infrastructure#storage'
55
+ kind = 'http://schemas.ogf.org/occi/infrastructure#networkinterface' if @model.get_by_id(res.kind).related_to? 'http://schemas.ogf.org/occi/infrastructure#network'
56
+ link = OCCI::Link.new(kind)
58
57
  link.titlte "Link to #{res.title}"
59
58
  link.target = res.location
60
59
  resource.links << link
@@ -5,39 +5,92 @@ module OCCI
5
5
  class AttributeProperties < Hashie::Mash
6
6
 
7
7
  def initialize(attributes = nil, default = nil)
8
- if attributes[:type] || attributes.required || attributes.mutable || attributes.pattern || attributes.minimum || attributes.maximum || attributes.description
9
- attributes[:type] ||= "string"
10
- attributes.required ||= false
11
- attributes.mutable ||= false
12
- attributes.pattern ||= ".*"
13
- end unless attributes.nil?
8
+ if [:Type, :Required, :Mutable, :Pattern, :Default, :Minimum, :Maximum, :Description].any? { |k| attributes.key?(k) }
9
+ attributes[:Type] ||= "string"
10
+ attributes[:Required] ||= false
11
+ attributes[:Mutable] ||= false
12
+ attributes[:Pattern] ||= ".*"
13
+ end if attributes
14
14
  super(attributes, default)
15
15
  end
16
16
 
17
17
  def combine
18
18
  array = []
19
19
  self.each_key do |key|
20
- if self[key].include? 'type'
20
+ #puts "Key :#{key}"
21
+ #puts self[key].keys
22
+ #puts self[key].key? 'type'
23
+ if self[key].key? 'Type'
21
24
  array << key
22
25
  else
23
- self[key].combine.each { |attr| array << key + '.' + attr }
26
+ attribute = self[key]
27
+ attribute.combine.each { |attr| array << key + '.' + attr }
24
28
  end
25
29
  end
26
30
  array
27
31
  end
28
32
 
29
33
  def combine_with_defaults
30
- hash = {}
34
+ hash = { }
31
35
  self.each_key do |key|
32
- if self[key].include? 'type'
33
- hash[key] = self[key]['default']
36
+ if self[key].include? 'Type'
37
+ hash[key] = self[key]['Default']
34
38
  else
35
- self[key].combine_with_defaults.each { |k,v| hash[key + '.' + k] = v }
39
+ self[key].combine_with_defaults.each { |k, v| hash[key + '.' + k] = v }
36
40
  end
37
41
  end
38
42
  hash
39
43
  end
40
44
 
45
+ def convert_value(val, duping=false) #:nodoc:
46
+ case val
47
+ when self.class
48
+ val.dup
49
+ when ::Hash
50
+ val = val.dup if duping
51
+ self.class.subkey_class.new(val)
52
+ when Array
53
+ val.collect { |e| convert_value(e) }
54
+ else
55
+ val
56
+ end
57
+ end
58
+
59
+ def method_missing(method_name, *args, &blk)
60
+ return self.[](method_name, &blk) if key?(method_name)
61
+ match = method_name.to_s.match(/(.*?)([?=!]?)$/)
62
+ case match[2]
63
+ when "="
64
+ key = match[1]
65
+ self[key] = args.first
66
+ if %w|Type Required Mutable Pattern Default Minimum Maximum Description|.any? { |k| key.to_s == k }
67
+ self["Type"] = "string" unless key?("Type")
68
+ self["Required"] = false unless key?("Required")
69
+ self["Mutable"] = false unless key?("Mutable")
70
+ self["Pattern"] = ".*" unless key?("Pattern")
71
+ end
72
+ when "?"
73
+ !!self[match[1]]
74
+ when "!"
75
+ initializing_reader(match[1])
76
+ else
77
+ default(method_name, *args, &blk)
78
+ end
79
+ end
80
+
81
+ # Sets an attribute in the Mash. Key will be converted to
82
+ # a string before it is set, and Hashes will be converted
83
+ # into Mashes for nesting purposes.
84
+ def []=(key, value) #:nodoc:
85
+ regular_writer(convert_key(key), convert_value(value))
86
+ if %w|Type Required Mutable Pattern Default Minimum Maximum Description|.any? { |k| key.to_s == k }
87
+ self["Type"] = "string" unless key?("Type")
88
+ self["Required"] = false unless key?("Required")
89
+ self["Mutable"] = false unless key?("Mutable")
90
+ self["Pattern"] = ".*" unless key?("Pattern")
91
+ end
92
+ end
93
+
41
94
  end
42
95
  end
43
96
  end
@@ -7,7 +7,7 @@ module OCCI
7
7
  def combine
8
8
  hash = { }
9
9
  self.each_key do |key|
10
- if self[key].kind_of? Hashie::Mash
10
+ if self[key].kind_of? OCCI::Core::Attributes
11
11
  self[key].combine.each_pair { |k, v| hash[key + '.' + k] = v }
12
12
  else
13
13
  hash[key] = self[key]
@@ -24,13 +24,6 @@ module OCCI
24
24
  @scheme + @term
25
25
  end
26
26
 
27
- # converts and adds supplied attributes to attributes of the category
28
- # @param [Hash] attributes
29
- # @return [OCCI::Core::AttributeProperties] attributes hash converted to attribute properties
30
- def attributes=(attributes)
31
- @attributes = OCCI::Core::AttributeProperties.new(attributes)
32
- end
33
-
34
27
  # check if category is related to another category
35
28
  # @param [String] category_id Type identifier of a related category
36
29
  # @return [true,false] true if category is related to category_id else false
@@ -11,7 +11,8 @@ module OCCI
11
11
  module Core
12
12
  class Entity
13
13
 
14
- attr_accessor :kind, :mixins, :attributes
14
+ attr_accessor :mixins, :attributes, :actions
15
+ attr_reader :kind
15
16
 
16
17
  # @return [OCCI::Core::Kind] kind definition of Entity type
17
18
  def self.kind_definition
@@ -19,15 +20,15 @@ module OCCI
19
20
 
20
21
  kind.title = "Entity"
21
22
 
22
- kind.attributes.occi!.core!.id!.type = "string"
23
- kind.attributes.occi!.core!.id!.pattern = "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
24
- kind.attributes.occi!.core!.id!.required = false
25
- kind.attributes.occi!.core!.id!.mutable = false
23
+ kind.attributes.occi!.core!.id!.Type = "string"
24
+ kind.attributes.occi!.core!.id!.Pattern = "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
25
+ kind.attributes.occi!.core!.id!.Required = false
26
+ kind.attributes.occi!.core!.id!.Mutable = false
26
27
 
27
- kind.attributes.occi!.core!.title!.type = "string"
28
- kind.attributes.occi!.core!.title!.pattern = ".*"
29
- kind.attributes.occi!.core!.title!.required = false
30
- kind.attributes.occi!.core!.title!.mutable = true
28
+ kind.attributes.occi!.core!.title!.Type = "string"
29
+ kind.attributes.occi!.core!.title!.Pattern = ".*"
30
+ kind.attributes.occi!.core!.title!.Required = false
31
+ kind.attributes.occi!.core!.title!.Mutable = true
31
32
 
32
33
  kind
33
34
  end
@@ -35,11 +36,24 @@ module OCCI
35
36
  # @param [String] kind
36
37
  # @param [String] mixins
37
38
  # @param [OCCI::Core::Attributes] attributes
38
- def initialize(kind, mixins=nil, attributes=nil)
39
+ def initialize(kind, mixins=nil, attributes=nil, actions=nil)
40
+ @checked = false
41
+ raise "Kind #{kind} not of type String" unless kind.kind_of? String
39
42
  @kind = kind
40
43
  @mixins = mixins.to_a
41
44
  @attributes = OCCI::Core::Attributes.new(attributes)
42
- self.id = UUIDTools::UUID.timestamp_create.to_s
45
+ @actions = actions.to_a
46
+ self.id = UUIDTools::UUID.timestamp_create.to_s
47
+ end
48
+
49
+ def mixins=(mixins)
50
+ @checked=false
51
+ @mixins =mixins
52
+ end
53
+
54
+ def attributes=(attributes)
55
+ @checked =false
56
+ @attributes=attributes
43
57
  end
44
58
 
45
59
  # set id for entity
@@ -53,6 +67,17 @@ module OCCI
53
67
  @attributes.occi!.core!.id
54
68
  end
55
69
 
70
+ # set title attribute for entity
71
+ # @param [String] title
72
+ def title=(title)
73
+ @attributes.occi!.core!.title = title
74
+ end
75
+
76
+ # @return [String] title attribute of entity
77
+ def title
78
+ @attributes.occi!.core!.title
79
+ end
80
+
56
81
  # @return [String] location of the entity
57
82
  def location
58
83
  '/' + @kind.split('#').last + '/' + @attributes.occi!.core!.id
@@ -79,28 +104,33 @@ module OCCI
79
104
  attributes = OCCI::Core::Attributes.new(attributes)
80
105
  definitions.each_key do |key|
81
106
  properties = definitions[key]
82
- value = attributes[key] ||= properties[:default]
83
- if properties.include?(:type)
84
- raise "required attribute #{key} not found" if value.nil? && properties.required
85
- next if value.nil? && !properties.required
86
- case properties.type
107
+ value = attributes[key] ||= properties.Default
108
+ if properties.key? :Type
109
+ raise "required attribute #{key} not found" if value.nil? && properties.Required
110
+ next if value.nil? && !properties.Required
111
+ case properties.Type
87
112
  when 'number'
88
- raise "attribute #{key} value #{value} from class #{value.class.name} does not match attribute property type #{properties.type}" unless value.kind_of?(Numeric)
89
- raise "attribute #{key} with value #{value} not in range #{properties.minimum}-#{properties.maximum}" unless (properties.minimum..properties.maximum) === value if properties.minimum && properties.maximum
113
+ raise "attribute #{key} value #{value} from class #{value.class.name} does not match attribute property type #{properties.Type}" unless value.kind_of?(Numeric)
114
+ raise "attribute #{key} with value #{value} not in range #{properties.Minimum}-#{properties.Maximum}" unless (properties.Minimum..properties.Maximum) === value if properties.Minimum && properties.Maximum
90
115
  when 'boolean'
91
- raise "attribute #{key} value #{value} from class #{value.class.name} does not match attribute property type #{properties.type}" unless !!value == value
116
+ raise "attribute #{key} value #{value} from class #{value.class.name} does not match attribute property type #{properties.Type}" unless !!value == value
92
117
  else
93
- raise "attribute #{key} with value #{value} from class #{value.class.name} does not match attribute property type #{properties.type}" unless value.kind_of?(String)
94
- raise "attribute #{key} with length #{value.length} not in range #{properties.minimum}-#{properties.maximum}" unless (properties.minimum..properties.maximum) === value.length if properties.minimum && properties.maximum
118
+ raise "attribute #{key} with value #{value} from class #{value.class.name} does not match attribute property type #{properties.Type}" unless value.kind_of?(String)
119
+ raise "attribute #{key} with length #{value.length} not in range #{properties.Minimum}-#{properties.Maximum}" unless (properties.Minimum..properties.Maximum) === value.length if properties.Minimum && properties.Maximum
95
120
  end
96
- raise "attribute #{key} with value #{value} does not match pattern #{properties.pattern}" if value.to_s.scan(Regexp.new(properties.pattern)).empty? if properties.pattern
121
+ raise "attribute #{key} with value #{value} does not match pattern #{properties.Pattern}" if value.to_s.scan(Regexp.new(properties.Pattern)).empty? if properties.Pattern
97
122
  attributes[key] = value
98
123
  else
99
124
  attributes[key] = check(value, definitions[key])
100
125
  end
101
126
  end
102
127
  attributes.delete_if { |_, v| v.nil? } # remove empty attributes
103
- return attributes
128
+ @checked = true
129
+ attributes
130
+ end
131
+
132
+ def checked?
133
+ @checked && @attributes.checked?
104
134
  end
105
135
 
106
136
  # @param [Hash] options
@@ -109,6 +139,7 @@ module OCCI
109
139
  entity = Hashie::Mash.new
110
140
  entity.kind = @kind if @kind
111
141
  entity.mixins = @mixins if @mixins.any?
142
+ entity.actions = @actions if @actions.any?
112
143
  entity.attributes = @attributes if @attributes.any?
113
144
  entity
114
145
  end
@@ -26,12 +26,12 @@ module OCCI
26
26
  def entity_type
27
27
  case type_identifier
28
28
  when "http://schemas.ogf.org/occi/core#resource"
29
- return OCCI::Core::Resource.name
29
+ return OCCI::Core::Resource
30
30
  when "http://schemas.ogf.org/occi/core#link"
31
- return OCCI::Core::Link.name
31
+ return OCCI::Core::Link
32
32
  else
33
33
  raise "no model back reference provided for kind #{self.typ_identifier}" unless @model
34
- @model.get_by_id(self[:related].first).entity_type unless self[:term] == 'entity'
34
+ @model.get_by_id(self.related.first).entity_type unless self.term == 'entity'
35
35
  end
36
36
  end
37
37
 
@@ -6,26 +6,67 @@ module OCCI
6
6
  module Core
7
7
  class Link < Entity
8
8
 
9
+ attr_reader :rel
10
+
9
11
  # @return [OCCI::Core::Kind] kind definition of Link type
10
12
  def self.kind_definition
11
- kind = OCCI::Core::Kind.new('http://schemas.ogf.org/occi/core#','link')
13
+ kind = OCCI::Core::Kind.new('http://schemas.ogf.org/occi/core#', 'link')
12
14
 
13
15
  kind.related = %w{http://schemas.ogf.org/occi/core#entity}
14
- kind.title = "Link"
16
+ kind.title = "Link"
15
17
 
16
- kind.attributes.occi!.core!.target!.type = "string"
17
- kind.attributes.occi!.core!.target!.pattern = ".*"
18
- kind.attributes.occi!.core!.target!.required = false
19
- kind.attributes.occi!.core!.target!.mutable = true
18
+ kind.attributes.occi!.core!.target!.Type = "string"
19
+ kind.attributes.occi!.core!.target!.Pattern = ".*"
20
+ kind.attributes.occi!.core!.target!.Required = false
21
+ kind.attributes.occi!.core!.target!.Mutable = true
20
22
 
21
- kind.attributes.occi!.core!.source!.type = "string"
22
- kind.attributes.occi!.core!.source!.pattern = ".*"
23
- kind.attributes.occi!.core!.source!.required = false
24
- kind.attributes.occi!.core!.source!.mutable = true
23
+ kind.attributes.occi!.core!.source!.Type = "string"
24
+ kind.attributes.occi!.core!.source!.Pattern = ".*"
25
+ kind.attributes.occi!.core!.source!.Required = false
26
+ kind.attributes.occi!.core!.source!.Mutable = true
25
27
 
26
28
  kind
27
29
  end
28
30
 
31
+ # @return [String] target attribute of the link
32
+ def target
33
+ self.attributes.occi!.core!.summary
34
+ end
35
+
36
+ # set target attribute of link
37
+ # @param [String] target
38
+ def target=(target)
39
+ self.attributes.occi!.core!.target = target
40
+ end
41
+
42
+ # @return [String] source attribute of the link
43
+ def source
44
+ self.attributes.occi!.core!.source
45
+ end
46
+
47
+ # set source attribute of link
48
+ # @param [String] source
49
+ def source=(source)
50
+ self.attributes.occi!.core!.source = source
51
+ end
52
+
53
+ def check(model)
54
+ target = model.get_by_id(self.target)
55
+ @rel = model.type_identifier if target.kind_of? OCCI::Core::Resource
56
+ super(model)
57
+ end
58
+
59
+ # @param [Hash] options
60
+ # @return [Hashie::Mash] link as Hashie::Mash to be parsed into a JSON object
61
+ def as_json(options={ })
62
+ link = Hashie::Mash.new
63
+ link.kind = @kind if @kind
64
+ link.rel = @rel if @rel
65
+ link.mixins = @mixins if @mixins.any?
66
+ link.attributes = @attributes if @attributes.any?
67
+ link
68
+ end
69
+
29
70
  end
30
71
  end
31
72
  end
@@ -21,14 +21,19 @@ module OCCI
21
21
  kind.related = %w{http://schemas.ogf.org/occi/core#entity}
22
22
  kind.title = 'Resource'
23
23
 
24
- kind.attributes.occi!.core!.summary!.type = 'string'
25
- kind.attributes.occi!.core!.summary!.pattern = '.*'
26
- kind.attributes.occi!.core!.summary!.required = false
27
- kind.attributes.occi!.core!.summary!.mutable = true
24
+ kind.attributes.occi!.core!.summary!.Type = 'string'
25
+ kind.attributes.occi!.core!.summary!.Pattern = '.*'
26
+ kind.attributes.occi!.core!.summary!.Required = false
27
+ kind.attributes.occi!.core!.summary!.Mutable = true
28
28
 
29
29
  kind
30
30
  end
31
31
 
32
+ def links=(links)
33
+ @checked = false
34
+ @links = links
35
+ end
36
+
32
37
  # set id for resource and update the the source of all links
33
38
  # @param [UUIDTools::UUID] id
34
39
  def id=(id)
@@ -36,6 +41,17 @@ module OCCI
36
41
  @links.each { |link| link.attributes.occi!.core!.source = self.location }
37
42
  end
38
43
 
44
+ # @return [String] summary attribute of the resource
45
+ def summary
46
+ self.attributes.occi!.core!.summary
47
+ end
48
+
49
+ # set summary attribute of resource
50
+ # @param [String] summary
51
+ def summary=(summary)
52
+ self.attributes.occi!.core!.summary = summary
53
+ end
54
+
39
55
  # update the source of all links before returning them
40
56
  # @return [Array] links of resource
41
57
  def links
data/lib/occi/model.rb CHANGED
@@ -24,7 +24,7 @@ module OCCI
24
24
  # register OCCI Infrastructure categories
25
25
  def register_infrastructure
26
26
  OCCI::Log.info "### Registering OCCI Infrastructure categories ###"
27
- register_files 'etc/model/infrastructure'
27
+ register_files File.dirname(__FILE__) + '/../../etc/model/infrastructure'
28
28
  end
29
29
 
30
30
  # register OCCI categories from files
@@ -50,7 +50,7 @@ module OCCI
50
50
  end
51
51
 
52
52
  def reset()
53
- @categories.each_value.each { |category| category.entities = [] if category.entities }
53
+ @categories.each_value.each { |category| category.entities = [] if category.respond_to? :entities }
54
54
  end
55
55
 
56
56
  # ---------------------------------------------------------------------------------------------------------------------
@@ -88,7 +88,7 @@ module OCCI
88
88
  #
89
89
  # @param [OCCI::Collection] filter
90
90
  # @return [OCCI::Collection] collection
91
- def get(filter = [])
91
+ def get(filter = OCCI::Collection.new)
92
92
  collection = OCCI::Collection.new
93
93
  if filter.empty?
94
94
  @categories.each_value do |category|
data/lib/occi/parser.rb CHANGED
@@ -36,6 +36,8 @@ module OCCI
36
36
  case media_type
37
37
  when 'text/uri-list'
38
38
  body.each_line { |line| locations << URI.parse(line) }
39
+ when 'text/occi'
40
+ nil
39
41
  when 'text/plain', nil
40
42
  locations.concat self.text_locations(body)
41
43
  category ? collection = self.text_categories(body) : collection = self.text_entity(body, entity_type) if locations.empty? && collection.empty?
@@ -87,11 +89,11 @@ module OCCI
87
89
  if entity_type == OCCI::Core::Link
88
90
  entity.target = link.attributes!.occi!.core!.target
89
91
  entity.source = link.attributes!.occi!.core!.source
90
- collection.links << OCCI::Core::Link.new(entity.kind,entity.mixins,entity.attributes)
92
+ collection.links << OCCI::Core::Link.new(entity.kind, entity.mixins, entity.attributes)
91
93
  elsif entity_type == OCCI::Core::Resource
92
94
  link_strings = header['HTTP_LINK'].to_s.split(',')
93
95
  link_strings.each { |link| entity.links << OCCIANTLR::Parser.new('Link: ' + link).link }
94
- collection.resources << OCCI::Core::Resource.new(entity.kind,entity.mixins,entity.attributes,entity.links)
96
+ collection.resources << OCCI::Core::Resource.new(entity.kind, entity.mixins, entity.attributes, entity.links)
95
97
  end
96
98
  collection
97
99
  end
@@ -127,10 +129,10 @@ module OCCI
127
129
  if entity_type == OCCI::Core::Link
128
130
  entity.target = links.first.attributes!.occi!.core!.target
129
131
  entity.source = links.first.attributes!.occi!.core!.source
130
- collection.links << OCCI::Core::Link.new(entity.kind,entity.mixins,entity.attributes)
132
+ collection.links << OCCI::Core::Link.new(entity.kind, entity.mixins, entity.attributes)
131
133
  elsif entity_type == OCCI::Core::Resource
132
134
  entity.links = links
133
- collection.resources << OCCI::Core::Resource.new(entity.kind,entity.mixins,entity.attributes,entity.links)
135
+ collection.resources << OCCI::Core::Resource.new(entity.kind, entity.mixins, entity.attributes, entity.links)
134
136
  end unless entity.kind.nil?
135
137
  collection
136
138
  end
@@ -290,7 +292,7 @@ module OCCI
290
292
  raise "Disk with id #{id} not found" unless storage
291
293
  storagelink.attributes.occi!.core!.target = storage.location
292
294
  elsif host_resource.start_with? 'ovf:/file/'
293
- id = host_resource.gsub('ovf:/file/','')
295
+ id = host_resource.gsub('ovf:/file/', '')
294
296
  storagelink.attributes.occi!.core!.target = references[id]
295
297
  end
296
298
  compute.links << storagelink
data/lib/occi/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OCCI
2
- VERSION = "2.3.1" unless defined?(::OCCI::VERSION)
2
+ VERSION = "2.4.0" unless defined?(::OCCI::VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: occi
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-07-21 00:00:00.000000000 Z
13
+ date: 2012-07-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json