This is the schema patch I'm thinking about applying.
Basically I'm evolving my idea of a basic (Resources) and advanced
(Services) API.
The basic one is as simple as possible - just call and response for a
well limited set of known actions on system services.
If you want recurring operations (and therefor a user_data field),
sequence numbers, OCF support, the ability to call random actions, etc
- then you should be using the more advanced Services API.
Comments?
diff --git a/GNUmakefile b/GNUmakefile
index 7b27df5..b6921ec 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -39,7 +39,7 @@ DOT:=$(shell which dot 2>/dev/null)
linux.build:
@echo "=::=::=::= Setting up for Linux =::=::=::= "
mkdir -p $@
- cd $@ && eval "`rpm --eval "%{cmake}" | grep -v -e
"^%"`"
-DCMAKE_BUILD_TYPE=RelWithDebInfo ..
+ cd $@ && eval "`rpm --eval "%{cmake}" | grep -v -e
"^%"`"
-DWITH-DBUS=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
@$(MAKE) --no-print-dir -C $@
windows.build:
diff --git a/src/service/schema.xml b/src/service/schema.xml
index feefb91..dd9f209 100644
--- a/src/service/schema.xml
+++ b/src/service/schema.xml
@@ -3,27 +3,31 @@
<eventArguments>
<!-- Common -->
- <arg name="timestamp" type="absTime" />
- <arg name="sequence" type="uint32" />
+ <arg name="timestamp" type="absTime" />
+ <arg name="sequence_id" type="uint32" />
+ <arg name="name" type="sstr" />
+ <arg name="action" type="sstr" />
+ <arg name="interval" type="uint32" />
+ <arg name="rc" type="uint32" />
- <arg name="name" type="sstr" />
- <arg name="action" type="sstr" />
- <arg name="interval" type="uint32"/>
-
- <arg name="rc" type="uint32" />
-
- <arg name="rsc_type" type="sstr" />
- <arg name="rsc_class" type="sstr" />
- <arg name="rsc_provider" type="sstr" />
+ <!-- Specific to Resources API -->
+ <arg name="class" type="sstr" />
+ <arg name="provider" type="sstr" />
+ <arg name="type" type="sstr" />
+ <arg name="expected_rc" type="uint32" />
+ <arg name="user_data" type="sstr" />
</eventArguments>
- <!-- Services API -->
+ <!--
+ Services API
+ Simple API for accessing system services
+
+ For more advanced functionality, use the Resources API with class=LSB
+ -->
- <!-- Is sequence needed? How to tie to the async method call seq? -->
- <!-- Is timestamp needed? Possibly available for all events already -->
- <event
name="service_op" args="name,action,interval,rc,sequence,timestamp"
/>
- <event
name="resource_op" args="name,action,interval,rc,sequence,timestamp,rsc_type,rsc_class,rsc_provider"
/>
+ <event
name="service_op" args="timestamp,sequence_id,name,action,interval,rc"
/>
+ <event
name="resource_op" args="timestamp,sequence_id,name,action,interval,rc,type,class,provider,expected_rc,user_data"
/>
<class name="Services">
<property name="uuid" type="sstr" access="RO"
desc="Host UUID" />
@@ -41,28 +45,22 @@
<arg name="name" dir="I" type="sstr"
/>
</method>
<method name="start" desc="Start a system
service">
- <arg name="name" dir="IO" type="sstr"
/>
+ <arg name="name" dir="I" type="sstr"
/>
<arg name="timeout" dir="I" type="uint32"
/>
<arg name="rc" dir="O" type="uint32"
/>
</method>
<method name="stop" desc="Stop a system service">
- <arg name="name" dir="IO" type="sstr"
/>
+ <arg name="name" dir="I" type="sstr"
/>
<arg name="timeout" dir="I" type="uint32"
/>
<arg name="rc" dir="O" type="uint32"
/>
</method>
<method name="status" desc="Check the health of a system
service">
- <arg name="name" dir="IO" type="sstr"
/>
- <arg name="interval" dir="IO" type="uint32"
/>
+ <arg name="name" dir="I" type="sstr"
/>
<arg name="timeout" dir="I" type="uint32"
/>
<arg name="rc" dir="O" type="uint32"
/>
</method>
- <method name="cancel" desc="Cancel a pending or running
action on a system service">
- <arg name="name" dir="I" type="sstr"
/>
- <arg name="action" dir="I" type="sstr"
/>
- <arg name="interval" dir="I" type="uint32"
/>
- </method>
<method name="fail" desc="Raise a failure event for a
system service">
- <arg name="name" dir="IO" type="sstr"
/>
+ <arg name="name" dir="I" type="sstr"
/>
</method>
<method name="describe" desc="Obtain XML description of a
system service">
<arg name="name" dir="I" type="sstr"
/>
@@ -70,20 +68,33 @@
</method>
</class>
+ <!--
+ Resources API
+
+ Fully featured API for controlling and monitoring services
+ conforming a standardized specification.
+
+ Currently supported standards: LSB, OCF
+ On Windows, 'LSB' is an alias for system services
+ -->
+
<class name="Resources">
<property name="uuid" type="sstr" access="RO"
desc="Host UUID" />
- <property name="hostname" type="sstr"
access="RO"
desc="Hostname" index="y"/>
+ <property name="hostname" type="sstr"
access="RO"
desc="Hostname" index="y"/>
<method name="list_classes" desc="List known resource classes
(OCF, LSB, Upstart, etc)">
<arg name="classes" dir="O" type="list"
/>
</method>
- <method name="list_ocf_providers" desc="List known OCF providers
(if supported)">
+ <method name="list_providers" desc="List known providers (if
supported) for a given class">
+ <arg name="class" dir="I" type="sstr"
/>
<arg name="providers" dir="O" type="list"
/>
</method>
- <method name="list" desc="List known resource types for a
given provider">
+ <method name="list" desc="List known resource types for a
given class and provider">
+ <arg name="class" dir="I" type="sstr"
/>
<arg name="provider" dir="I" type="sstr"
/>
<arg name="types" dir="O" type="list"
/>
</method>
+
<!-- Something we can add later if necessary
method name="list_variants" desc="List known implementations of a
given resource type">
<arg name="type" dir="I" type="sstr"
/>
@@ -97,66 +108,41 @@
<arg name="type" dir="I" type="sstr"
/>
<arg name="xml" dir="O" type="sstr"
/>
</method>
- <method name="start" desc="Start a resource">
- <arg name="name" dir="IO" type="sstr"
/>
- <arg name="class" dir="IO" type="sstr"
/>
- <arg name="provider" dir="IO" type="sstr"
/>
- <arg name="type" dir="IO" type="sstr"
/>
- <arg name="parameters" dir="I" type="map"
/>
- <arg name="timeout" dir="I" type="uint32"
/>
- <arg name="rc" dir="O" type="uint32"
/>
- </method>
- <method name="stop" desc="Stop a resource">
- <arg name="name" dir="IO" type="sstr"
/>
- <arg name="class" dir="IO" type="sstr"
/>
- <arg name="provider" dir="IO" type="sstr"
/>
- <arg name="type" dir="IO" type="sstr"
/>
- <arg name="parameters" dir="I" type="map"
/>
- <arg name="timeout" dir="I" type="uint32"
/>
- <arg name="rc" dir="O" type="uint32"
/>
- </method>
- <method name="monitor" desc="Check the health of a
resource">
- <arg name="name" dir="IO" type="sstr"
/>
- <arg name="class" dir="IO" type="sstr"
/>
- <arg name="provider" dir="IO" type="sstr"
/>
- <arg name="type" dir="IO" type="sstr"
/>
- <arg name="interval" dir="IO" type="uint32"
/>
- <arg name="parameters" dir="I" type="map"
/>
- <arg name="timeout" dir="I" type="uint32"
/>
- <arg name="rc" dir="O" type="uint32"
/>
- </method>
<method name="invoke" desc="Perform a custom action on a
resource">
- <arg name="name" dir="IO" type="sstr"
/>
- <arg name="class" dir="IO" type="sstr"
/>
- <arg name="provider" dir="IO" type="sstr"
/>
- <arg name="type" dir="IO" type="sstr"
/>
- <arg name="action" dir="IO" type="sstr"
/>
- <arg name="interval" dir="IO" type="uint32"
/>
+ <arg name="name" dir="I" type="sstr"
/>
+ <arg name="class" dir="I" type="sstr"
/>
+ <arg name="provider" dir="I" type="sstr"
/>
+ <arg name="type" dir="I" type="sstr"
/>
+ <arg name="action" dir="I" type="sstr"
/>
+ <arg name="interval" dir="I" type="uint32"
/>
<arg name="parameters" dir="I" type="map"
/>
<arg name="timeout" dir="I" type="uint32"
/>
+ <arg name="expected_rc" dir="I" type="uint32"
/>
<arg name="rc" dir="O" type="uint32"
/>
+ <arg name="sequence_id" dir="O" type="uint32"
/>
+ <arg name="user_data" dir="IO" type="sstr"
/>
</method>
<method name="cancel" desc="Cancel a pending or running
action on a resource">
- <arg name="name" dir="IO" type="sstr"
/>
- <arg name="class" dir="IO" type="sstr"
/>
- <arg name="provider" dir="IO" type="sstr"
/>
- <arg name="type" dir="IO" type="sstr"
/>
- <arg name="action" dir="IO" type="sstr"
/>
- <arg name="interval" dir="IO" type="uint32"
/>
+ <arg name="name" dir="I" type="sstr"
/>
+ <arg name="class" dir="I" type="sstr"
/>
+ <arg name="provider" dir="I" type="sstr"
/>
+ <arg name="type" dir="I" type="sstr"
/>
+ <arg name="action" dir="I" type="sstr"
/>
+ <arg name="interval" dir="I" type="uint32"
/>
<arg name="timeout" dir="I" type="uint32"
/>
</method>
<method name="fail" desc="Indicate a resource has
failed">
- <arg name="name" dir="IO" type="sstr"
/>
- <arg name="class" dir="IO" type="sstr"
/>
- <arg name="provider" dir="IO" type="sstr"
/>
- <arg name="type" dir="IO" type="sstr"
/>
+ <arg name="name" dir="I" type="sstr"
/>
+ <arg name="class" dir="I" type="sstr"
/>
+ <arg name="provider" dir="I" type="sstr"
/>
+ <arg name="type" dir="I" type="sstr"
/>
</method>
<!-- Something we can add later if necessary
method name="last" desc="Retrieve the last action for a
resource">
- <arg name="name" dir="IO" type="sstr"
/>
- <arg name="class" dir="IO" type="sstr"
/>
- <arg name="provider" dir="IO" type="sstr"
/>
- <arg name="type" dir="IO" type="sstr"
/>
+ <arg name="name" dir="I" type="sstr"
/>
+ <arg name="class" dir="I" type="sstr"
/>
+ <arg name="provider" dir="I" type="sstr"
/>
+ <arg name="type" dir="I" type="sstr"
/>
<arg name="action" dir="O" type="sstr"
/>
<arg name="parameters" dir="O" type="map"
/>
<arg name="interval" dir="O" type="uint32"
/>
_______________________________________________
Matahari mailing list
Matahari(a)lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/matahari