Jonathan Hurley created AMBARI-23147:
----------------------------------------
Summary: Expose Repository CRUD via the Mpack Endpoint
Key: AMBARI-23147
URL: https://issues.apache.org/jira/browse/AMBARI-23147
Project: Ambari
Issue Type: Task
Affects Versions: 3.0.0
Reporter: Jonathan Hurley
Assignee: Jonathan Hurley
Fix For: 3.0.0
With the removal of version definitions and repository versions, we need a new
way of exposing and managing repositories. Since repositories are now
associated with management packs, it makes sense to expose these off of the
{{mpack}} endpoint.
The question is whether we want to continue our model of having
OperatingSystems read-only and adding sub-resources of repositories off of the
OS or changing to something simpler like having a single object serialized
which contains all of the information.
h5. Scenario 1: Operating Systems are 1st Class Resources
I think that having each repository as a sub-resource is a bit of an overkill.
We certainly don't need that level of granularity. But we could make the
{{operating_system}} the lowest level so that you could update all repositories
for a given operating system at once. For example:
{code:title=http://c7001.ambari.apache.org:8080/api/v1/mpacks/1}
{
{
"href": "http://c7401.ambari.apache.org:8080/api/v1/mpacks/1",
"MpackInfo": {
"id": 1,
"mpack_description": "Hortonworks Data Platform Core",
"mpack_id": "hdpcore",
"mpack_name": "HDPCORE",
"mpack_uri":
"http://repo.ambari.apache.org/hdpcore/centos7/HDPCORE-1.0.0-b96/mpack.json",
"mpack_version": "1.0.0-b96",
"operating_systems": [
{
"href":
"http://c7401.ambari.apache.org:8080/api/v1/stacks/HDPCORE/versions/1.0.0-b96/operating_systems/redhat7",
"OperatingSystems": {
"os_type": "redhat7",
"stack_name": "HDPCORE",
"stack_version": "1.0.0-b96"
}
},
{
"href":
"http://c7401.ambari.apache.org:8080/api/v1/stacks/HDPCORE/versions/1.0.0-b96/operating_systems/ubuntu12",
"OperatingSystems": {
"os_type": "ubuntu12",
"stack_name": "HDPCORE",
"stack_version": "1.0.0-b96"
}
}
]
}
}
{code}
This allows us to use the operating system type (like {{redhat7}} or
{{ubuntu12}}) as a key so we can get more information about the OS:
{code:title=http://c7401.ambari.apache.org:8080/api/v1/stacks/HDPCORE/versions/1.0.0-b96/operating_systems/redhat7}
{
"href":
"http://c7401.ambari.apache.org:8080/api/v1/stacks/HDPCORE/versions/1.0.0-b96/operating_systems/redhat7?fields=repositories/*",
"OperatingSystems": {
"os_type": "redhat7",
"stack_name": "HDPCORE",
"stack_version": "1.0.0-b96"
},
"repositories": [
{
"href":
"http://c7401.ambari.apache.org:8080/api/v1/stacks/HDPCORE/versions/1.0.0-b96/operating_systems/redhat7/repositories/HDP-UTILS-1.1.0.21",
"Repositories": {
"base_url":
"http://repo.ambari.apache.org/hdpcore/centos7/HDP-UTILS-1.1.0.22/",
"components": null,
"default_base_url":
"http://repo.ambari.apache.org/hdpcore/centos7/HDP-UTILS-1.1.0.22/",
"distribution": null,
"mirrors_list": null,
"os_type": "redhat7",
"repo_id": "HDP-UTILS-1.1.0.21",
"repo_name": "HDP-UTILS",
"stack_name": "HDPCORE",
"stack_version": "1.0.0-b96",
"tags": [],
"unique": false
}
},
{
"href":
"http://c7401.ambari.apache.org:8080/api/v1/stacks/HDPCORE/versions/1.0.0-b96/operating_systems/redhat7/repositories/HDPCORE-1.0.0-b96",
"Repositories": {
"base_url":
"http://repo.ambari.apache.org/hdpcore/centos7/HDPCORE-1.0.0-b96",
"components": null,
"default_base_url":
"http://repo.ambari.apache.org/hdpcore/centos7/HDPCORE-1.0.0-b96",
"distribution": null,
"mirrors_list": null,
"os_type": "redhat7",
"repo_id": "HDPCORE-1.0.0-b96",
"repo_name": "HDPCORE",
"stack_name": "HDPCORE",
"stack_version": "1.0.0-b96",
"tags": [],
"unique": false
}
}
]
}
{code}
This maintains the current structure of {{operating_systems}} being the wrapper
around each repository. Each {{operating_system}} contains the actual
repositories:
{code:title=http://c7001.ambari.apache.org:8080/api/v1/stacks/HDPCORE/versions/1.0.0-b96/operating_systems/redhat7/repositories/HDPCORE-1.0.0-b96}
{
"href" :
"http://c7001.ambari.apache.org:8080/api/v1/stacks/HDPCORE/versions/1.0.0-b96/operating_systems/redhat7/repositories/HDPCORE-1.0.0-b96",
"Repositories" : {
"base_url" :
"http://repo.ambari.apache.org/hdpcore/centos7/HDPCORE-1.0.0-b96",
"components" : null,
"default_base_url" :
"http://repo.ambari.apache.org/hdpcore/centos7/HDPCORE-1.0.0-b96",
"distribution" : null,
"mirrors_list" : null,
"os_type" : "redhat7",
"repo_id" : "HDPCORE-1.0.0-b96",
"repo_name" : "HDPCORE",
"stack_name" : "HDPCORE",
"stack_version" : "1.0.0-b96",
"tags" : [ ],
"unique" : false
}
}
{code}
- Allows querying by the OS type (not sure if we need or want that)
- Allows updating all repositories for an OS type in 1 call
- Requires 1 call per operating system to update all repos
h5. Scenario 2: Serialized Object without ResourceProvider Support
The other option is just to serialize the information we have directly as part
of the mpack endpoint.
{code:title=http://c7401.ambari.apache.org:8080/api/v1/mpacks/1}
{
"href": "http://c7401.ambari.apache.org:8080/api/v1/mpacks/1",
"MpackInfo": {
"id": 1,
"mpack_description": "Hortonworks Data Platform Core",
"mpack_id": "hdpcore",
"mpack_name": "HDPCORE",
"mpack_uri":
"http://repo.ambari.apache.org/hdpcore/centos7/HDPCORE-1.0.0-b96/mpack.json",
"mpack_version": "1.0.0-b96",
"operating_systems": [
{
"repositories": [
{
"distribution": null,
"components": null,
"unique": true,
"tags": [],
"base_url":
"http://repo.ambari.apache.org/hdpcore/centos7/HDPCORE-1.0.0-b96",
"os_type": "redhat7",
"repo_id": null,
"repo_name": null,
"mirrors_list": null,
"default_base_url": null,
"ambari_managed": true
},
{
"distribution": null,
"components": null,
"unique": false,
"tags": [],
"base_url":
"http://repo.ambari.apache.org/hdpcore/centos7/HDP-UTILS-1.1.0.22/",
"os_type": "redhat7",
"repo_id": null,
"repo_name": null,
"mirrors_list": null,
"default_base_url": null,
"ambari_managed": true
}
],
"os_type": "redhat7",
"ambari_managed": true
},
{
"repositories": [
{
"distribution": null,
"components": null,
"unique": false,
"tags": [],
"base_url":
"http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.21/repos/ubuntu12",
"os_type": "ubuntu12",
"repo_id": null,
"repo_name": null,
"mirrors_list": null,
"default_base_url": null,
"ambari_managed": true
},
{
"distribution": null,
"components": null,
"unique": true,
"tags": [],
"base_url":
"http://dev.hortonworks.com.s3.amazonaws.com/HDPCORE/ubuntu12/1.x/BUILDS/1.0.0-b96",
"os_type": "ubuntu12",
"repo_id": null,
"repo_name": null,
"mirrors_list": null,
"default_base_url": null,
"ambari_managed": true
}
],
"os_type": "ubuntu12",
"ambari_managed": true
}
],
"registry_id": null,
"stack_name": "",
"stack_version": ""
},
"operating_system": [],
"version": []
}
{code}
- Operating systems and repositories are no longer really "resources". You
can't query by them and can't update them individually
- Much simpler to implement
- Requires updating all repos together, but can be done in 1 call
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)