Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Browse to the SAMPLESRV directory, and edit the metainfo.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>
  2. 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()

...

In this example, we will add a configuration type "test-config" to our SAMPLESRV.

  1. Modify the metainfo.xmlCreate a directory for the configuration dictionary file SAMPLESRV/configuration

    Add the configuration files to the CLIENT component will make it available in the client tar ball downloaded from Ambari.

    Code Block
    mkdir -p configuration
    cd configuration
                    <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>
                        <configFiles>
                          <configFile>
                            <type>xml</type>
                            <fileName>test-config.xml</fileName>
                            <dictionaryName>test-config</dictionaryName>
                          </configFile>
                        </configFiles>
                    </component>    
  2. Create a directory for the configuration dictionary file SAMPLESRV/configuration.

    Code Block
    mkdir -p configuration
    cd configuration
  3. Create the test-config.xml file. For example:

    Code Block
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
      <property>
        <name>some.test.property</name>
        <value>this.is.the.default.value</value>
        <description>This is a test description.</description>
      </property>
      <property>
        <name>another.test.property</name>
        <value>5</value>
        <description>This is a second test description.</description>
      </property>
    </configuration>
    
    
  4. There is an optional setting "configuration-dir".  Custom services should either not include the setting or should leave it as the default value "configuration".

     

    Code Block
    <configuration-dir>configuration</configuration-dir>
  5. Configuration dependencies can be included in the metainfo.xml in the a "configuration-dependencies" section.  This section can be added to the service as a whole or a particular component. One of the implications of this dependency is that whenever the config-type is updated, Ambari automatically marks the component or service as requiring restart.

    For example, HIVE defines a component level configuration dependencies for the HIVE_METASTORE component
    Code Block
          <component>
              <name>HIVE_METASTORE</name>
              <displayName>Hive Metastore</displayName>
              <category>MASTER</category>
              <cardinality>1</cardinality>
              <versionAdvertised>true</versionAdvertised>
              <reassignAllowed>true</reassignAllowed>
              <clientsToUpdateConfigs></clientsToUpdateConfigs>
    ... ...
              <configuration-dependencies>
                <config-type>hive-site</config-type>
              </configuration-dependencies>
            </component>

     

    HIVE also defines service level configuration dependencies.

    Code Block
         <configuration-dependencies>
            <config-type>core-site</config-type>
            <config-type>hive-log4j</config-type>
            <config-type>hive-exec-log4j</config-type>
            <config-type>hive-env</config-type>
            <config-type>hivemetastore-site.xml</config-type>
            <config-type>webhcat-site</config-type>
            <config-type>webhcat-env</config-type>
            <config-type>parquet-logging</config-type>
            <config-type>ranger-hive-plugin-properties</config-type>
            <config-type>ranger-hive-audit</config-type>
            <config-type>ranger-hive-policymgr-ssl</config-type>
            <config-type>ranger-hive-security</config-type>
            <config-type>mapred-site</config-type>
            <config-type>application.properties</config-type>
            <config-type>druid-common</config-type>
          </configuration-dependencies>

    Create the test-config.xml file. For example:

    Code Block
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    
    <configuration>
      <property>
        <name>some.test.property</name>
        <value>this.is.the.default.value</value>
        <description>This is a test description.</description>
     </property>
    </configuration>