...
In this example, we will create a custom service called "SAMPLESRV". This service includes MASTER, SLAVE and CLIENT components.
Create
...
a Custom Service
Create a directory named
SAMPLESRV
that will contain the service definition for SAMPLESRV.Code Block mkdir SAMPLESRV cd SAMPLESRV
Within the
SAMPLESRV
directory, create ametainfo.xml
file that describes the new service. For example:Code Block <?xml version="1.0"?> <metainfo> <schemaVersion>2.0</schemaVersion> <services> <service> <name>SAMPLESRV</name> <displayName>New Sample Service</displayName> <comment>A New Sample Service</comment> <version>1.0.0</version> <components> <component> <name>SAMPLESRV_MASTER</name> <displayName>Sample Srv Master</displayName> <category>MASTER</category> <cardinality>1</cardinality> <commandScript> <script>scripts/master.py</script> <scriptType>PYTHON</scriptType> <timeout>600</timeout> </commandScript> </component> <component> <name>SAMPLESRV_SLAVE</name> <displayName>Sample Srv Slave</displayName> <category>SLAVE</category> <cardinality>1+</cardinality> <commandScript> <script>scripts/slave.py</script> <scriptType>PYTHON</scriptType> <timeout>600</timeout> </commandScript> </component> <component> <name>SAMPLESRV_CLIENT</name> <displayName>Sample Srv Client</displayName> <category>CLIENT</category> <cardinality>1+</cardinality> <commandScript> <script>scripts/sample_client.py</script> <scriptType>PYTHON</scriptType> <timeout>600</timeout> </commandScript> </component> </components> <osSpecifics> <osSpecific> <osFamily>any</osFamily> </osSpecific> </osSpecifics> </service> </services> </metainfo>
- In the above, the service name is "SAMPLESRV", and it contains:
- one MASTER component "SAMPLESRV_MASTER"
- one SLAVE component "SAMPLESRV_SLAVE"
- one CLIENT component "SAMPLESRV_CLIENT"
Next, let's create that command script. Create a directory for the command script
SAMPLESRV
/
package/scripts
that we designated in the service metainfo.Code Block mkdir -p package/scripts cd package/scripts
Within the scripts directory, create the
.py
command script files mentioned in the metainfo.For example
master.py
file:Code Block import sys from resource_management import * class Master(Script): def install(self, env): print 'Install the Sample Srv Master'; def configure(self, env): print 'Configure the Sample Srv Master'; def stop(self, env): print 'Stop the Sample Srv Master'; def start(self, env): print 'Start the Sample Srv Master'; def status(self, env): print 'Status of the Sample Srv Master'; if __name__ == "__main__": Master().execute()
For example
slave
.py
file:Code Block import sys from resource_management import * class Slave(Script): def install(self, env): print 'Install the Sample Srv Slave'; def configure(self, env): print 'Configure the Sample Srv Slave'; def stop(self, env): print 'Stop the Sample Srv Slave'; def start(self, env): print 'Start the Sample Srv Slave'; def status(self, env): print 'Status of the Sample Srv Slave'; if __name__ == "__main__": Slave().execute()
For example
sample_client
.py
file:Code Block import sys from resource_management import * class SampleClient(Script): def install(self, env): print 'Install the Sample Srv Client'; def configure(self, env): print 'Configure the Sample Srv Client'; if __name__ == "__main__": SampleClient().execute()
Implementing a
...
Custom Command
Browse to the
SAMPLESRV
directory, and edit themetainfo.xml
file that describes the service. For example, adding a custom command to the SAMPLESRV_CLIENT:Code Block <component> <name>SAMPLESRV_CLIENT</name> <displayName>Sample Srv Client</displayName> <category>CLIENT</category> <cardinality>1+</cardinality> <commandScript> <script>scripts/sample_client.py</script> <scriptType>PYTHON</scriptType> <timeout>600</timeout> </commandScript> <customCommands> <customCommand> <name>SOMETHINGCUSTOM</name> <commandScript> <script>scripts/sample_client.py</script> <scriptType>PYTHON</scriptType> <timeout>600</timeout> </commandScript> </customCommand> </customCommands> </component> </components>
Next, let's create that command script by editing the package/scripts/sample_client.py file that we designated in the service metainfo.
Code Block import sys from resource_management import * class SampleClient(Script): def install(self, env): print 'Install the Sample Srv Client'; def configure(self, env): print 'Configure the Sample Srv Client'; def somethingcustom(self, env): print 'Something custom'; if __name__ == "__main__": SampleClient().execute()
...