[ https://issues.apache.org/jira/browse/AMBARI-13398?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Laszlo Puskas updated AMBARI-13398: ----------------------------------- Attachment: (was: AMBARI-13398.patch) > Blueprints: Implement REST resource for storing Kerberos descriptors > -------------------------------------------------------------------- > > Key: AMBARI-13398 > URL: https://issues.apache.org/jira/browse/AMBARI-13398 > Project: Ambari > Issue Type: Bug > Components: ambari-server > Affects Versions: trunk > Reporter: Laszlo Puskas > Assignee: Laszlo Puskas > Labels: patch > Fix For: 2.1.3 > > Attachments: AMBARI-13398.patch > > > h2. Support for saving a Kerberos descriptor to the REST API in Ambari > In order to support referring to a Kerberos descriptor by name in the Cluster > Creation Template (POST-ing a Kerberos descriptor to a REST resource, then > referring to it during Blueprint deployment), we’ll need a new REST resource > defined in the Ambari REST API. > We’ll need the ability to POST a kerberos.json descriptor document to: > http://ambari-host:ambari-port/api/v1/kerberos_descriptors/kerberos_descriptor_name > Where {code}kerberos_descriptors{code} is the collection resource for all > Kerberos descriptors to be saved to the back end. This can be any number of > descriptors that are POST-ed, and the fact that a descriptor is posted here > is not necessarily an indicator that it is used in a cluster deployment. > This is similar to how the {code}blueprints{code} resource works, in that the > documents are saved in the Ambari DB to be referenced later by deployments > (Blueprint deployments in our case). > The {code}kerberos_descriptor_name{code} can be any arbitrary name given to > the customer’s customized kerberos descriptor. This can be a partial > document, listing only the overrides necessary, as the default Kerberos > descriptors will be merged by the Kerberos framework when the Kerberization > is setup. > For most Blueprint deployments that require Kerberos, the Blueprint or > Cluster creation template will reference this “kerberos_descriptor_name” when > indicating the kerberos descriptor used to configure Kerberos for this > cluster. > There needs to be support for: > 1. POST-ing a Kerberos descriptor to this REST endpoint > 2. Obtaining the list of Kerberos descriptors by making a GET call on the > following URL: > http://ambari-host:ambari-port/api/v1/kerberos_descriptors > 3. Obtaining a named Kerberos descriptor by making a GET call on the > following URL: > http://ambari-host:ambari-port/api/v1/kerberos_descriptors/kerberos_descriptor_name > This portion of the Blueprints Kerberos support is not necessarily > Blueprint-specific, and should be implemented without any direct references > to Blueprint code or constructs. > h2. Ambari Database Upgrade issues > The addition of this new resource type will require the creation of one more > more database tables in order to store the Kerberos descriptors in the Ambari > back-end. > This current task will encompass any Database table changes needed to make > these additions, and will also likely require some ambari-server Upgrade > handling. This will involve using the existing Ambari Upgrade utilities to > support moving from older Ambari installs to Ambari 2.2. The main work here > will be updating existing database tables to support the new structure. For > this particular task, this will likely mean that an upgrade will need to add > the new tables to the Ambari Database. > h2. Existing Example of this type of resource > The Ambari REST API includes many services and ResourceProvider > implementations that could serve as a model for this implementation. The > "blueprints" resource is probably the most straightforward in this case. > Example of a Service interface that must be defined for each resource: > {code}org.apache.ambari.server.api.services.BlueprintService{code} > Example of a ResourceProvider implementation that must be defined for each > resource: > {code}org.apache.ambari.server.controller.internal.BlueprintResourceProvider{code} > Example of a resource definition that must be defined for a new resource: > {code}org.apache.ambari.server.api.resources.BlueprintResourceDefinition{code} > There may be other classes required for this implementation, but the > Blueprint resource pattern is probably the best starting point for this > current task. > h2. Ambari REST API Documentation > The following link shows the Ambari REST API Documentation, which will likely > be useful during this task: > https://github.com/apache/ambari/blob/trunk/ambari-server/docs/api/v1/index.md > h2. Examples of Kerberos Descriptors > The default Kerberos descriptors are defined in the stacks, and can be found > at the service-level and stack-level. > In the trunk repo, the stack definitions for the "HDP" stack can be found in: > {code}ambari/ambari-server/src/main/resources/stacks/HDP{code} > All of the Kerberos Descriptors in the stacks are named "kerberos.json". > From the directory mentioned above in the stack definitions, the following > shows the default kerberos descriptors for the "HDP" stacks: > {code} > find . -name "kerberos.json" > ./2.0.6/kerberos.json > ./2.2/services/YARN/kerberos.json > ./2.3/services/ACCUMULO/kerberos.json > ./2.3/services/KAFKA/kerberos.json > ./2.3/services/TEZ/kerberos.json > ./2.3/services/YARN/kerberos.json > ./2.3.GlusterFS/services/ACCUMULO/kerberos.json > ./2.3.GlusterFS/services/TEZ/kerberos.json > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)