| Summary: | Puppet Install Distributor should create target directory if possible | ||
|---|---|---|---|
| Product: | [Retired] Pulp | Reporter: | Mike McCune <mmccune> |
| Component: | puppet-support | Assignee: | Jeff Ortel <jortel> |
| Status: | CLOSED CURRENTRELEASE | QA Contact: | Preethi Thomas <pthomas> |
| Severity: | medium | Docs Contact: | |
| Priority: | high | ||
| Version: | Master | CC: | jortel, mhrivnak, pthomas |
| Target Milestone: | --- | Keywords: | Triaged |
| Target Release: | 2.3.0 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2013-12-09 14:30:33 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
|
Description
Mike McCune
2013-09-17 17:42:19 UTC
NOTE: I do realize the docs do state that it is the callers responsibility to create and ensure access: http://pulp-puppet-dev-guide.readthedocs.org/en/latest/plugin_conf.html#install-distributor "install_path Full path to the directory where modules should be installed. It is the user’s responsibility to ensure that Pulp can write to this directory. " but after working with the distributor a bit we are still requesting that Pulp at least attempt to create the directory in the path specified. Katello/Foreman can ensure that the parent directory exists and that apache has write access, eg: -> /etc/puppet : can be written to by apache -> /etc/puppet/ACME_Corporation-puppet-test-puppet1 : created by Pulp build: 2.3.0-0.14.alpha Looks like this is fails-qa
u'summary': u"failed to create destination directory: [Errno 13] Permission denied: '/etc/puppet/puppet-copy/'",
u'traceback': None}])
root@pulp-v2-server ~]# ipython
Python 2.6.6 (r266:84292, Oct 12 2012, 14:23:48)
Type "copyright", "credits" or "license" for more information.
IPython 0.10 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]: from pulp.common import pic
In [2]: pic.connect()
In [3]: pic.POST('/v2/repositories/puppet-copy/distributors/', {'distributor_type_id':'puppet_install_distributor', 'distributor_id':'puppet_install_distributor', 'auto_publish': False, 'distributor_config': {'install_path':'/etc/puppet/puppet-copy/'}})
Request Body
{
"distributor_id": "puppet_install_distributor",
"distributor_type_id": "puppet_install_distributor",
"distributor_config": {
"install_path": "/etc/puppet/puppet-copy/"
},
"auto_publish": false
}
Response Body
{
"repo_id": "puppet-copy",
"_ns": "repo_distributors",
"last_publish": null,
"auto_publish": false,
"scheduled_publishes": [],
"distributor_type_id": "puppet_install_distributor",
"scratchpad": null,
"_id": {
"$oid": "5241c7ffd669f040ff0003c6"
},
"config": {
"install_path": "/etc/puppet/puppet-copy/"
},
"id": "puppet_install_distributor"
}
Out[3]:
(201,
{u'_id': {u'$oid': u'5241c7ffd669f040ff0003c6'},
u'_ns': u'repo_distributors',
u'auto_publish': False,
u'config': {u'install_path': u'/etc/puppet/puppet-copy/'},
u'distributor_type_id': u'puppet_install_distributor',
u'id': u'puppet_install_distributor',
u'last_publish': None,
u'repo_id': u'puppet-copy',
u'scheduled_publishes': [],
u'scratchpad': None})
In [4]: pic.POST('/v2/repositories/puppet-copy/actions/publish/', {'id':'puppet_install_distributor'})
Request Body
{
"id": "puppet_install_distributor"
}
Response Body
{
"task_group_id": null,
"call_request_id": "6ebe2022-591a-4eb5-aee4-e673f06206c6",
"exception": null,
"_href": "/pulp/api/v2/tasks/6ebe2022-591a-4eb5-aee4-e673f06206c6/",
"task_id": "6ebe2022-591a-4eb5-aee4-e673f06206c6",
"call_request_tags": [
"pulp:repository:puppet-copy",
"pulp:action:publish"
],
"reasons": [],
"start_time": null,
"traceback": null,
"schedule_id": null,
"finish_time": null,
"state": "waiting",
"result": null,
"dependency_failures": {},
"call_request_group_id": null,
"progress": {},
"principal_login": "admin",
"response": "accepted",
"tags": [
"pulp:repository:puppet-copy",
"pulp:action:publish"
]
}
Out[4]:
(202,
{u'_href': u'/pulp/api/v2/tasks/6ebe2022-591a-4eb5-aee4-e673f06206c6/',
u'call_request_group_id': None,
u'call_request_id': u'6ebe2022-591a-4eb5-aee4-e673f06206c6',
u'call_request_tags': [u'pulp:repository:puppet-copy',
u'pulp:action:publish'],
u'dependency_failures': {},
u'exception': None,
u'finish_time': None,
u'principal_login': u'admin',
u'progress': {},
u'reasons': [],
u'response': u'accepted',
u'result': None,
u'schedule_id': None,
u'start_time': None,
u'state': u'waiting',
u'tags': [u'pulp:repository:puppet-copy', u'pulp:action:publish'],
u'task_group_id': None,
u'task_id': u'6ebe2022-591a-4eb5-aee4-e673f06206c6',
u'traceback': None})
In [5]: pic.GET('/v2/repositories/puppet-copy/history/publish/puppet_install_distributor/')
Response Body
[
{
"result": "failed",
"exception": null,
"repo_id": "puppet-copy",
"started": "2013-09-24T13:12:59-04:00",
"_ns": "repo_publish_results",
"completed": "2013-09-24T13:12:59-04:00",
"traceback": null,
"distributor_type_id": "puppet_install_distributor",
"_id": {
"$oid": "5241c81bd669f040ff0003d0"
},
"summary": "failed to create destination directory: [Errno 13] Permission denied: '/etc/puppet/puppet-copy/'",
"error_message": null,
"distributor_id": "puppet_install_distributor",
"id": "5241c81bd669f040ff0003d0",
"details": {
"errors": [],
"success_unit_keys": []
}
}
]
Out[5]:
(200,
[{u'_id': {u'$oid': u'5241c81bd669f040ff0003d0'},
u'_ns': u'repo_publish_results',
u'completed': u'2013-09-24T13:12:59-04:00',
u'details': {u'errors': [], u'success_unit_keys': []},
u'distributor_id': u'puppet_install_distributor',
u'distributor_type_id': u'puppet_install_distributor',
u'error_message': None,
u'exception': None,
u'id': u'5241c81bd669f040ff0003d0',
u'repo_id': u'puppet-copy',
u'result': u'failed',
u'started': u'2013-09-24T13:12:59-04:00',
u'summary': u"failed to create destination directory: [Errno 13] Permission denied: '/etc/puppet/puppet-copy/'",
u'traceback': None}])
In [6]:
This looks like normal behavior to me, unless you have reason to believe that apache does in fact have permission to create that directory. By default, apache cannot write in /etc/puppet/. The user is responsible for making sure that apache has permission to write in the destination directory, and that's stated in the documentation for the distributor. See the very last sentence here: http://pulp-puppet-dev-guide.readthedocs.org/en/latest/plugin_conf.html#install-distributor Agreed. Moving back to ON_QA for re-test. verified
[root@pulp-v2-server ~]# rpm -qa pulp-server
pulp-server-2.3.0-0.17.beta.el6.noarch
[root@pulp-v2-server ~]#
In [1]: from pulp.common import pic
In [2]: pic.connect()
In [3]: pic.POST('/v2/repositories/puppet-copy/distributors/', {'distributor_type_id':'puppet_install_distributor', 'distributor_id':'puppet_install_distributor', 'auto_publish': False, 'distributor_config': {'install_path':'/etc/puppet/puppet-copy/'}})
Request Body
{
"distributor_id": "puppet_install_distributor",
"distributor_type_id": "puppet_install_distributor",
"distributor_config": {
"install_path": "/etc/puppet/puppet-copy/"
},
"auto_publish": false
}
Response Body
{
"repo_id": "puppet-copy",
"_ns": "repo_distributors",
"last_publish": null,
"auto_publish": false,
"scheduled_publishes": [],
"distributor_type_id": "puppet_install_distributor",
"scratchpad": null,
"_id": {
"$oid": "524ed515d669f0087a001df1"
},
"config": {
"install_path": "/etc/puppet/puppet-copy/"
},
"id": "puppet_install_distributor"
}
Out[3]:
(201,
{u'_id': {u'$oid': u'524ed515d669f0087a001df1'},
u'_ns': u'repo_distributors',
u'auto_publish': False,
u'config': {u'install_path': u'/etc/puppet/puppet-copy/'},
u'distributor_type_id': u'puppet_install_distributor',
u'id': u'puppet_install_distributor',
u'last_publish': None,
u'repo_id': u'puppet-copy',
u'scheduled_publishes': [],
u'scratchpad': None})
In [4]: pic.POST('/v2/repositories/puppet-copy/actions/publish/', {'id':'puppet_install_distributor'})
Request Body
{
"id": "puppet_install_distributor"
}
Response Body
{
"task_group_id": null,
"call_request_id": "5cc6288e-153f-4053-b9ae-f1e259ae141a",
"exception": null,
"_href": "/pulp/api/v2/tasks/5cc6288e-153f-4053-b9ae-f1e259ae141a/",
"task_id": "5cc6288e-153f-4053-b9ae-f1e259ae141a",
"call_request_tags": [
"pulp:repository:puppet-copy",
"pulp:action:publish"
],
"reasons": [],
"start_time": null,
"traceback": null,
"schedule_id": null,
"finish_time": null,
"state": "waiting",
"result": null,
"dependency_failures": {},
"call_request_group_id": null,
"progress": {},
"principal_login": "admin",
"response": "accepted",
"tags": [
"pulp:repository:puppet-copy",
"pulp:action:publish"
]
}
Out[4]:
(202,
{u'_href': u'/pulp/api/v2/tasks/5cc6288e-153f-4053-b9ae-f1e259ae141a/',
u'call_request_group_id': None,
u'call_request_id': u'5cc6288e-153f-4053-b9ae-f1e259ae141a',
u'call_request_tags': [u'pulp:repository:puppet-copy',
u'pulp:action:publish'],
u'dependency_failures': {},
u'exception': None,
u'finish_time': None,
u'principal_login': u'admin',
u'progress': {},
u'reasons': [],
u'response': u'accepted',
u'result': None,
u'schedule_id': None,
u'start_time': None,
u'state': u'waiting',
u'tags': [u'pulp:repository:puppet-copy', u'pulp:action:publish'],
u'task_group_id': None,
u'task_id': u'5cc6288e-153f-4053-b9ae-f1e259ae141a',
u'traceback': None})
In [5]: pic.GET('/v2/repositories/puppet-copy/history/publish/puppet_install_distributor/')
Response Body
[
{
"result": "failed",
"exception": null,
"repo_id": "puppet-copy",
"started": "2013-10-04T10:48:19-04:00",
"_ns": "repo_publish_results",
"completed": "2013-10-04T10:48:20-04:00",
"traceback": null,
"distributor_type_id": "puppet_install_distributor",
"_id": {
"$oid": "524ed534d669f0087a001dfb"
},
"summary": "failed to create destination directory: [Errno 13] Permission denied: '/etc/puppet/puppet-copy/'",
"error_message": null,
"distributor_id": "puppet_install_distributor",
"id": "524ed534d669f0087a001dfb",
"details": {
"errors": [],
"success_unit_keys": []
}
}
]
Out[5]:
(200,
[{u'_id': {u'$oid': u'524ed534d669f0087a001dfb'},
u'_ns': u'repo_publish_results',
u'completed': u'2013-10-04T10:48:20-04:00',
u'details': {u'errors': [], u'success_unit_keys': []},
u'distributor_id': u'puppet_install_distributor',
u'distributor_type_id': u'puppet_install_distributor',
u'error_message': None,
u'exception': None,
u'id': u'524ed534d669f0087a001dfb',
u'repo_id': u'puppet-copy',
u'result': u'failed',
u'started': u'2013-10-04T10:48:19-04:00',
u'summary': u"failed to create destination directory: [Errno 13] Permission denied: '/etc/puppet/puppet-copy/'",
u'traceback': None}])
In [6]:
In [7]:
In [8]: pic.POST('/v2/repositories/puppet-copy/distributors/', {'distributor_type_id':'puppet_install_distributor', 'distributor_id':'puppet_install_distributor', 'auto_publish': False, 'distributor_config': {'install_path':'/tmp/preethi-puppet'}})
Request Body
{
"distributor_id": "puppet_install_distributor",
"distributor_type_id": "puppet_install_distributor",
"distributor_config": {
"install_path": "/tmp/preethi-puppet"
},
"auto_publish": false
}
Response Body
{
"repo_id": "puppet-copy",
"_ns": "repo_distributors",
"last_publish": null,
"auto_publish": false,
"scheduled_publishes": [],
"distributor_type_id": "puppet_install_distributor",
"scratchpad": null,
"_id": {
"$oid": "524ed597d669f0087a001e06"
},
"config": {
"install_path": "/tmp/preethi-puppet"
},
"id": "puppet_install_distributor"
}
Out[8]:
(201,
{u'_id': {u'$oid': u'524ed597d669f0087a001e06'},
u'_ns': u'repo_distributors',
u'auto_publish': False,
u'config': {u'install_path': u'/tmp/preethi-puppet'},
u'distributor_type_id': u'puppet_install_distributor',
u'id': u'puppet_install_distributor',
u'last_publish': None,
u'repo_id': u'puppet-copy',
u'scheduled_publishes': [],
u'scratchpad': None})
In [9]: pic.POST('/v2/repositories/puppet-copy/actions/publish/', {'id':'puppet_install_distributor'})
Request Body
{
"id": "puppet_install_distributor"
}
Response Body
{
"task_group_id": null,
"call_request_id": "1884fdf1-6ce3-4d2b-8c2d-2ab93b924b25",
"exception": null,
"_href": "/pulp/api/v2/tasks/1884fdf1-6ce3-4d2b-8c2d-2ab93b924b25/",
"task_id": "1884fdf1-6ce3-4d2b-8c2d-2ab93b924b25",
"call_request_tags": [
"pulp:repository:puppet-copy",
"pulp:action:publish"
],
"reasons": [],
"start_time": null,
"traceback": null,
"schedule_id": null,
"finish_time": null,
"state": "waiting",
"result": null,
"dependency_failures": {},
"call_request_group_id": null,
"progress": {},
"principal_login": "admin",
"response": "accepted",
"tags": [
"pulp:repository:puppet-copy",
"pulp:action:publish"
]
}
Out[9]:
(202,
{u'_href': u'/pulp/api/v2/tasks/1884fdf1-6ce3-4d2b-8c2d-2ab93b924b25/',
u'call_request_group_id': None,
u'call_request_id': u'1884fdf1-6ce3-4d2b-8c2d-2ab93b924b25',
u'call_request_tags': [u'pulp:repository:puppet-copy',
u'pulp:action:publish'],
u'dependency_failures': {},
u'exception': None,
u'finish_time': None,
u'principal_login': u'admin',
u'progress': {},
u'reasons': [],
u'response': u'accepted',
u'result': None,
u'schedule_id': None,
u'start_time': None,
u'state': u'waiting',
u'tags': [u'pulp:repository:puppet-copy', u'pulp:action:publish'],
u'task_group_id': None,
u'task_id': u'1884fdf1-6ce3-4d2b-8c2d-2ab93b924b25',
u'traceback': None})
In [10]: pic.GET('/v2/repositories/puppet-copy/history/publish/puppet_install_distributor/')
Response Body
[
{
"result": "success",
"exception": null,
"repo_id": "puppet-copy",
"started": "2013-10-04T10:50:07-04:00",
"_ns": "repo_publish_results",
"completed": "2013-10-04T10:50:07-04:00",
"traceback": null,
"distributor_type_id": "puppet_install_distributor",
"_id": {
"$oid": "524ed59fd669f0087a001e10"
},
"summary": "success",
"error_message": null,
"distributor_id": "puppet_install_distributor",
"id": "524ed59fd669f0087a001e10",
"details": {
"errors": [],
"success_unit_keys": [
{
"version": "4.1.0",
"name": "stdlib",
"author": "puppetlabs"
}
]
}
},
{
"result": "failed",
"exception": null,
"repo_id": "puppet-copy",
"started": "2013-10-04T10:48:19-04:00",
"_ns": "repo_publish_results",
"completed": "2013-10-04T10:48:20-04:00",
"traceback": null,
"distributor_type_id": "puppet_install_distributor",
"_id": {
"$oid": "524ed534d669f0087a001dfb"
},
"summary": "failed to create destination directory: [Errno 13] Permission denied: '/etc/puppet/puppet-copy/'",
"error_message": null,
"distributor_id": "puppet_install_distributor",
"id": "524ed534d669f0087a001dfb",
"details": {
"errors": [],
"success_unit_keys": []
}
}
]
Out[10]:
(200,
[{u'_id': {u'$oid': u'524ed59fd669f0087a001e10'},
u'_ns': u'repo_publish_results',
u'completed': u'2013-10-04T10:50:07-04:00',
u'details': {u'errors': [],
u'success_unit_keys': [{u'author': u'puppetlabs',
u'name': u'stdlib',
u'version': u'4.1.0'}]},
u'distributor_id': u'puppet_install_distributor',
u'distributor_type_id': u'puppet_install_distributor',
u'error_message': None,
u'exception': None,
u'id': u'524ed59fd669f0087a001e10',
u'repo_id': u'puppet-copy',
u'result': u'success',
u'started': u'2013-10-04T10:50:07-04:00',
u'summary': u'success',
u'traceback': None},
{u'_id': {u'$oid': u'524ed534d669f0087a001dfb'},
u'_ns': u'repo_publish_results',
u'completed': u'2013-10-04T10:48:20-04:00',
u'details': {u'errors': [], u'success_unit_keys': []},
u'distributor_id': u'puppet_install_distributor',
u'distributor_type_id': u'puppet_install_distributor',
u'error_message': None,
u'exception': None,
u'id': u'524ed534d669f0087a001dfb',
u'repo_id': u'puppet-copy',
u'result': u'failed',
u'started': u'2013-10-04T10:48:19-04:00',
u'summary': u"failed to create destination directory: [Errno 13] Permission denied: '/etc/puppet/puppet-copy/'",
u'traceback': None}])
[root@pulp-v2-server ~]# ls -l /tmp/preethi-puppet/
total 4
drwxr-xr-x. 6 apache apache 4096 May 13 10:53 stdlib
[root@pulp-v2-server ~]#
Pulp 2.3 released. |