Initial Cookiecutter Commit.
This commit is contained in:
commit
09658821ab
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
parts
|
||||||
|
prime
|
||||||
|
stage
|
||||||
|
*.snap
|
||||||
|
.tox
|
4
.gitreview
Normal file
4
.gitreview
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[gerrit]
|
||||||
|
host=review.openstack.org
|
||||||
|
port=29418
|
||||||
|
project=openstack-snaps/snap-gnocchi.git
|
17
CONTRIBUTING.rst
Normal file
17
CONTRIBUTING.rst
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
If you would like to contribute to the development of OpenStack, you must
|
||||||
|
follow the steps in this page:
|
||||||
|
|
||||||
|
http://docs.openstack.org/infra/manual/developers.html
|
||||||
|
|
||||||
|
If you already have a good understanding of how the system works and your
|
||||||
|
OpenStack accounts are set up, you can skip to the development workflow
|
||||||
|
section of this documentation to learn how changes to OpenStack should be
|
||||||
|
submitted for review via the Gerrit tool:
|
||||||
|
|
||||||
|
http://docs.openstack.org/infra/manual/developers.html#development-workflow
|
||||||
|
|
||||||
|
Pull requests submitted through GitHub will be ignored.
|
||||||
|
|
||||||
|
Bugs should be filed on Launchpad, not GitHub:
|
||||||
|
|
||||||
|
https://bugs.launchpad.net/snap-gnocchi
|
176
LICENSE
Normal file
176
LICENSE
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
124
README.md
Normal file
124
README.md
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
# The gnocchi snap
|
||||||
|
|
||||||
|
This repository contains the source code for the gnocchi snap.
|
||||||
|
|
||||||
|
Gnocchi is an open-source, multi-tenant timeseries, metrics and resources database. It provides an HTTP REST interface to create and manipulate the data. It is designed to store metrics at a very large scale while providing access to metrics and resources information and history.
|
||||||
|
|
||||||
|
## Installing this snap
|
||||||
|
|
||||||
|
The gnocchi snap can be installed directly from the snap store:
|
||||||
|
|
||||||
|
sudo snap install --edge gnocchi
|
||||||
|
|
||||||
|
The gnocchi snap is working towards publication across tracks for
|
||||||
|
OpenStack releases. The edge channel for each track will contain the tip
|
||||||
|
of the OpenStack project's master branch, with the beta, candidate and
|
||||||
|
release channels being reserved for released versions. These three channels
|
||||||
|
will be used to drive the CI process for validation of snap updates. This
|
||||||
|
should result in an experience such as:
|
||||||
|
|
||||||
|
sudo snap install --channel=ocata/stable gnocchi
|
||||||
|
sudo snap install --channel=pike/edge gnocchi
|
||||||
|
|
||||||
|
## Configuring gnocchi
|
||||||
|
|
||||||
|
The gnocchi snap gets its default configuration from the following $SNAP
|
||||||
|
and $SNAP_COMMON locations:
|
||||||
|
|
||||||
|
### Insert trees of /snap/gnocchi/current/etc/ and
|
||||||
|
### /var/snap/gnocchi/common/etc. If the OpenStack service has an API
|
||||||
|
### that runs behind uwsgi+nginx, the trees may like like this:
|
||||||
|
|
||||||
|
/snap/gnocchi/current/etc/
|
||||||
|
└── gnocchi
|
||||||
|
├── gnocchi.conf
|
||||||
|
└── ...
|
||||||
|
|
||||||
|
/var/snap/gnocchi/common/etc/
|
||||||
|
├── gnocchi
|
||||||
|
│ └── gnocchi.conf.d
|
||||||
|
│ └── gnocchi-snap.conf
|
||||||
|
├── nginx
|
||||||
|
│ ├── snap
|
||||||
|
│ │ ├── nginx.conf
|
||||||
|
│ │ └── sites-enabled
|
||||||
|
│ │ └── gnocchi.conf
|
||||||
|
└── uwsgi
|
||||||
|
└── snap
|
||||||
|
└── gnocchi-api.ini
|
||||||
|
|
||||||
|
### Add any details here on how to configure services for this snap.
|
||||||
|
### Insert a tree of /var/snap/gnocchi/common/etc with override files.
|
||||||
|
### If the OpenStack service has an API that runs behind uwsgi+nginx,
|
||||||
|
### the tree may like like this:
|
||||||
|
|
||||||
|
The gnocchi snap supports configuration updates via its $SNAP_COMMON writable
|
||||||
|
area. The default gnocchi configuration can be overridden as follows:
|
||||||
|
|
||||||
|
/var/snap/gnocchi/common/etc/
|
||||||
|
├── gnocchi
|
||||||
|
│ ├── gnocchi.conf.d
|
||||||
|
│ │ ├── gnocchi-snap.conf
|
||||||
|
│ │ ├── database.conf
|
||||||
|
│ │ └── rabbitmq.conf
|
||||||
|
│ └── gnocchi.conf
|
||||||
|
├── nginx
|
||||||
|
│ ├── snap
|
||||||
|
│ │ ├── nginx.conf
|
||||||
|
│ │ └── sites-enabled
|
||||||
|
│ │ └── gnocchi.conf
|
||||||
|
│ ├── nginx.conf
|
||||||
|
│ ├── sites-enabled
|
||||||
|
│ │ └── gnocchi.conf
|
||||||
|
└── uwsgi
|
||||||
|
├── snap
|
||||||
|
│ └── gnocchi-api.ini
|
||||||
|
└── gnocchi-api.ini
|
||||||
|
|
||||||
|
The gnocchi configuration can be overridden or augmented by writing
|
||||||
|
configuration snippets to files in the gnocchi.conf.d directory.
|
||||||
|
|
||||||
|
Alternatively, gnocchi configuration can be overridden by adding a full
|
||||||
|
gnocchi.conf file to the gnocchi/ directory. If overriding in this way, you'll
|
||||||
|
need to either point this config file at additional config files located in $SNAP,
|
||||||
|
or add those to $SNAP_COMMON as well.
|
||||||
|
|
||||||
|
The gnocchi nginx configuration can be overridden by adding an nginx/nginx.conf
|
||||||
|
and new site config files to the nginx/sites-enabled directory. In this case the
|
||||||
|
nginx/nginx.conf file would include that sites-enabled directory. If
|
||||||
|
nginx/nginx.conf exists, nginx/snap/nginx.conf will no longer be used.
|
||||||
|
|
||||||
|
The gnocchi uwsgi configuration can be overridden similarly by adding a
|
||||||
|
uwsgi/gnocchi.ini file. If uwsgi/gnocchi.ini exists, uwsgi/snap/gnocchi.ini
|
||||||
|
will no longer be used.
|
||||||
|
|
||||||
|
## Logging gnocchi
|
||||||
|
|
||||||
|
The services for the gnocchi snap will log to its $SNAP_COMMON writable area:
|
||||||
|
/var/snap/gnocchi/common/log.
|
||||||
|
|
||||||
|
## Restarting gnocchi services
|
||||||
|
|
||||||
|
To restart all gnocchi services:
|
||||||
|
|
||||||
|
sudo systemctl restart snap.gnocchi.*
|
||||||
|
|
||||||
|
or an individual service can be restarted by dropping the wildcard and
|
||||||
|
specifying the full service name.
|
||||||
|
|
||||||
|
## Building the gnocchi snap
|
||||||
|
|
||||||
|
Simply clone this repository and then install and run snapcraft:
|
||||||
|
|
||||||
|
git clone https://github.com/openstack-snaps/snap-gnocchi
|
||||||
|
sudo apt install snapcraft
|
||||||
|
cd snap-gnocchi
|
||||||
|
snapcraft
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
Please report any bugs related to this snap at:
|
||||||
|
[Launchpad](https://bugs.launchpad.net/snap-gnocchi/+filebug).
|
||||||
|
|
||||||
|
Alternatively you can find the OpenStack Snap team in `#openstack-snaps` on
|
||||||
|
Freenode IRC.
|
2
bindep.txt
Normal file
2
bindep.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
snapcraft [platform:dpkg]
|
||||||
|
snapd [platform:dpkg]
|
57
patches/drop-nginx-setgroups.patch
Normal file
57
patches/drop-nginx-setgroups.patch
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
Description: Drop code where nginx drops privileges for worker
|
||||||
|
processes. While setuid is covered by the browser-support plug,
|
||||||
|
setgroups isn't covered by any plugs. This code isn't required
|
||||||
|
because in strict mode we run worker processes as root:root.
|
||||||
|
The seccomp violation follows:
|
||||||
|
= Seccomp =
|
||||||
|
Time: Jun 16 01:13:15
|
||||||
|
Log: auid=4294967295 uid=0 gid=0 ses=4294967295 pid=6087 comm="nginx"
|
||||||
|
exe="/snap/gnocchi/x1/usr/sbin/nginx" sig=31 arch=c000003e
|
||||||
|
116(setgroups) compat=0 ip=0x7f40e288af09 code=0x0
|
||||||
|
Syscall: setgroups
|
||||||
|
Suggestion:
|
||||||
|
* adjust program to not use 'setgroups' until per-snap user/groups
|
||||||
|
are supported (https://launchpad.net/bugs/1446748)
|
||||||
|
Author: Corey Bryant <corey.bryant@canonical.com>
|
||||||
|
Forwarded: no
|
||||||
|
|
||||||
|
---
|
||||||
|
src/os/unix/ngx_process_cycle.c | 22 ----------------------
|
||||||
|
1 file changed, 22 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
|
||||||
|
index 1710ea8..c428673 100644
|
||||||
|
--- a/src/os/unix/ngx_process_cycle.c
|
||||||
|
+++ b/src/os/unix/ngx_process_cycle.c
|
||||||
|
@@ -824,28 +824,6 @@ ngx_worker_process_init(ngx_cycle_t *cycle, ngx_int_t worker)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (geteuid() == 0) {
|
||||||
|
- if (setgid(ccf->group) == -1) {
|
||||||
|
- ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||||
|
- "setgid(%d) failed", ccf->group);
|
||||||
|
- /* fatal */
|
||||||
|
- exit(2);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (initgroups(ccf->username, ccf->group) == -1) {
|
||||||
|
- ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||||
|
- "initgroups(%s, %d) failed",
|
||||||
|
- ccf->username, ccf->group);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (setuid(ccf->user) == -1) {
|
||||||
|
- ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||||
|
- "setuid(%d) failed", ccf->user);
|
||||||
|
- /* fatal */
|
||||||
|
- exit(2);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
if (worker >= 0) {
|
||||||
|
cpu_affinity = ngx_get_cpu_affinity(worker);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
123
patches/oslo-config-dirs.patch
Normal file
123
patches/oslo-config-dirs.patch
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
From 5256bef2fdacdb79eba386c8cad775ed996d1685 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Corey Bryant <corey.bryant@canonical.com>
|
||||||
|
Date: Wed, 14 Jun 2017 09:57:23 -0400
|
||||||
|
Subject: [PATCH] Add snap package paths to default config dirs
|
||||||
|
|
||||||
|
With snap packaging (see snapcraft.io) the package is installed into a
|
||||||
|
read-only squashfs filesystem, which includes the default config. For
|
||||||
|
example, $SNAP/etc/nova/nova.conf. To override the defaults, a separate
|
||||||
|
writable directory is used, and this directory is also unique to the snap.
|
||||||
|
For example, either $SNAP_COMMON/etc/nova/nova.conf, or
|
||||||
|
$SNAP_COMMON/etc/nova/nova.conf.d/ can be used to override config.
|
||||||
|
|
||||||
|
This patch adds these snap directories to the default config paths where
|
||||||
|
oslo looks for config.
|
||||||
|
|
||||||
|
For more details on $SNAP and $SNAP_COMMON please refer to
|
||||||
|
https://snapcraft.io/docs/reference/env.
|
||||||
|
|
||||||
|
Change-Id: I83627e0f215382aedc7b32163e0303b39e8bccf8
|
||||||
|
Closes-Bug: 1696830
|
||||||
|
(cherry picked from commit 21e70e28b3015c1619dacfad8a2218b09e8109ec)
|
||||||
|
---
|
||||||
|
oslo_config/cfg.py | 19 +++++++++++++++++--
|
||||||
|
oslo_config/tests/test_cfg.py | 24 ++++++++++++++++++++++++
|
||||||
|
2 files changed, 41 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/oslo_config/cfg.py b/oslo_config/cfg.py
|
||||||
|
index 1047bf6..a2b5b2a 100644
|
||||||
|
--- a/oslo_config/cfg.py
|
||||||
|
+++ b/oslo_config/cfg.py
|
||||||
|
@@ -614,16 +614,27 @@ def _get_config_dirs(project=None):
|
||||||
|
/etc/${project}/
|
||||||
|
/etc/
|
||||||
|
|
||||||
|
- Otherwise, these directories::
|
||||||
|
+ If a project is specified and installed from a snap package, following
|
||||||
|
+ directories are also returned:
|
||||||
|
+
|
||||||
|
+ ${SNAP}/etc/${project}
|
||||||
|
+ ${SNAP_COMMON}/etc/${project}
|
||||||
|
+
|
||||||
|
+ Otherwise, if project is not specified, these directories are returned:
|
||||||
|
|
||||||
|
~/
|
||||||
|
/etc/
|
||||||
|
"""
|
||||||
|
+ snap = os.environ.get('SNAP')
|
||||||
|
+ snap_c = os.environ.get('SNAP_COMMON')
|
||||||
|
+
|
||||||
|
cfg_dirs = [
|
||||||
|
_fixpath(os.path.join('~', '.' + project)) if project else None,
|
||||||
|
_fixpath('~'),
|
||||||
|
os.path.join('/etc', project) if project else None,
|
||||||
|
- '/etc'
|
||||||
|
+ '/etc',
|
||||||
|
+ os.path.join(snap, "etc", project) if snap and project else None,
|
||||||
|
+ os.path.join(snap_c, "etc", project) if snap_c and project else None,
|
||||||
|
]
|
||||||
|
return [x for x in cfg_dirs if x]
|
||||||
|
|
||||||
|
@@ -674,6 +685,8 @@ def find_config_files(project=None, prog=None, extension='.conf'):
|
||||||
|
~/
|
||||||
|
/etc/${project}/
|
||||||
|
/etc/
|
||||||
|
+ ${SNAP}/etc/${project}
|
||||||
|
+ ${SNAP_COMMON}/etc/${project}
|
||||||
|
|
||||||
|
We return an absolute path for (at most) one of each the default config
|
||||||
|
files, for the topmost directory it exists in.
|
||||||
|
@@ -704,6 +717,8 @@ def find_config_dirs(project=None, prog=None, extension='.conf.d'):
|
||||||
|
~/
|
||||||
|
/etc/${project}/
|
||||||
|
/etc/
|
||||||
|
+ ${SNAP}/etc/${project}
|
||||||
|
+ ${SNAP_COMMON}/etc/${project}
|
||||||
|
|
||||||
|
We return an absolute path for each of the two config dirs,
|
||||||
|
in the first place we find it (iff we find it).
|
||||||
|
diff --git a/oslo_config/tests/test_cfg.py b/oslo_config/tests/test_cfg.py
|
||||||
|
index 6a46884..0f7db8c 100644
|
||||||
|
--- a/oslo_config/tests/test_cfg.py
|
||||||
|
+++ b/oslo_config/tests/test_cfg.py
|
||||||
|
@@ -208,6 +208,18 @@ class FindConfigFilesTestCase(BaseTestCase):
|
||||||
|
|
||||||
|
self.assertEqual(cfg.find_config_files(project='blaa'), config_files)
|
||||||
|
|
||||||
|
+ def test_find_config_files_snap(self):
|
||||||
|
+ config_files = ['/snap/nova/current/etc/blaa/blaa.conf']
|
||||||
|
+ fake_env = {'SNAP': '/snap/nova/current/',
|
||||||
|
+ 'SNAP_COMMON': '/var/snap/nova/common/'}
|
||||||
|
+
|
||||||
|
+ self.useFixture(fixtures.MonkeyPatch('sys.argv', ['foo']))
|
||||||
|
+ self.useFixture(fixtures.MonkeyPatch('os.path.exists',
|
||||||
|
+ lambda p: p in config_files))
|
||||||
|
+ self.useFixture(fixtures.MonkeyPatch('os.environ', fake_env))
|
||||||
|
+
|
||||||
|
+ self.assertEqual(cfg.find_config_files(project='blaa'), config_files)
|
||||||
|
+
|
||||||
|
def test_find_config_files_with_extension(self):
|
||||||
|
config_files = ['/etc/foo.json']
|
||||||
|
|
||||||
|
@@ -233,6 +245,18 @@ class FindConfigDirsTestCase(BaseTestCase):
|
||||||
|
|
||||||
|
self.assertEqual(cfg.find_config_dirs(project='blaa'), config_dirs)
|
||||||
|
|
||||||
|
+ def test_find_config_dirs_snap(self):
|
||||||
|
+ config_dirs = ['/var/snap/nova/common/etc/blaa/blaa.conf.d']
|
||||||
|
+ fake_env = {'SNAP': '/snap/nova/current/',
|
||||||
|
+ 'SNAP_COMMON': '/var/snap/nova/common/'}
|
||||||
|
+
|
||||||
|
+ self.useFixture(fixtures.MonkeyPatch('sys.argv', ['foo']))
|
||||||
|
+ self.useFixture(fixtures.MonkeyPatch('os.path.exists',
|
||||||
|
+ lambda p: p in config_dirs))
|
||||||
|
+ self.useFixture(fixtures.MonkeyPatch('os.environ', fake_env))
|
||||||
|
+
|
||||||
|
+ self.assertEqual(cfg.find_config_dirs(project='blaa'), config_dirs)
|
||||||
|
+
|
||||||
|
def test_find_config_dirs_non_exists(self):
|
||||||
|
self.useFixture(fixtures.MonkeyPatch('sys.argv', ['foo']))
|
||||||
|
self.assertEqual(cfg.find_config_dirs(project='blaa'), [])
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Requirements to build snap
|
||||||
|
# NOTE empty for now until snapcraft installable from branch
|
4
snap/etc/gnocchi/gnocchi.conf
Normal file
4
snap/etc/gnocchi/gnocchi.conf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# The gnocchi snap may need to override default config files.
|
||||||
|
# For example if the default gnocchi.conf file located in
|
||||||
|
# $SNAP/etc/gnocchi/gnocchi.conf needs to be overridden,
|
||||||
|
# it can be done with this file.
|
54
snap/snap-openstack.yaml
Normal file
54
snap/snap-openstack.yaml
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
setup:
|
||||||
|
dirs:
|
||||||
|
- "{snap_common}/etc/gnocchi/gnocchi.conf.d"
|
||||||
|
- "{snap_common}/lib"
|
||||||
|
- "{snap_common}/lock"
|
||||||
|
- "{snap_common}/log"
|
||||||
|
- "{snap_common}/run"
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx,
|
||||||
|
# define uwsgi and nginx etc dirs.
|
||||||
|
- "{snap_common}/etc/nginx/sites-enabled"
|
||||||
|
- "{snap_common}/etc/nginx/snap/sites-enabled"
|
||||||
|
- "{snap_common}/etc/uwsgi/snap"
|
||||||
|
templates:
|
||||||
|
# The gnocchi snap will likely require a template for the corresponding
|
||||||
|
# OpenStack service(s). For example, you may need to render a template such
|
||||||
|
# as the following.
|
||||||
|
gnocchi-snap.conf.j2: "{snap_common}/etc/gnocchi/gnocchi.conf.d/gnocchi-snap.conf"
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx,
|
||||||
|
# render nginx config templates.
|
||||||
|
gnocchi-nginx.conf.j2: "{snap_common}/etc/nginx/snap/sites-enabled/gnocchi.conf"
|
||||||
|
nginx.conf.j2: "{snap_common}/etc/nginx/snap/nginx.conf"
|
||||||
|
entry_points:
|
||||||
|
# This is where entry_points are defined for the OpenStack service. For example,
|
||||||
|
# the service may have a database command-line tool such as the following.
|
||||||
|
gnocchi-manage:
|
||||||
|
binary: "{snap}/bin/gnocchi-manage"
|
||||||
|
config-files:
|
||||||
|
- "{snap}/etc/gnocchi/gnocchi.conf"
|
||||||
|
config-files-override:
|
||||||
|
- "{snap_common}/etc/gnocchi/gnocchi.conf"
|
||||||
|
config-dirs:
|
||||||
|
- "{snap_common}/etc/gnocchi/gnocchi.conf.d"
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, the
|
||||||
|
# following entry_point must be defined.
|
||||||
|
gnocchi-uwsgi:
|
||||||
|
type: uwsgi
|
||||||
|
uwsgi-dir: "{snap_common}/etc/uwsgi/snap"
|
||||||
|
uwsgi-dir-override: "{snap_common}/etc/uwsgi"
|
||||||
|
uwsgi-log: "{snap_common}/log/uwsgi.log"
|
||||||
|
config-files:
|
||||||
|
- "{snap}/etc/gnocchi/gnocchi.conf"
|
||||||
|
config-files-override:
|
||||||
|
- "{snap_common}/etc/gnocchi/gnocchi.conf"
|
||||||
|
config-dirs:
|
||||||
|
- "{snap_common}/etc/gnocchi/gnocchi.conf.d"
|
||||||
|
log-file: "{snap_common}/log/gnocchi-api.log"
|
||||||
|
templates:
|
||||||
|
gnocchi-api.ini.j2: "{snap_common}/etc/uwsgi/snap/gnocchi-api.ini"
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, the
|
||||||
|
# following entry_point must be defined.
|
||||||
|
gnocchi-nginx:
|
||||||
|
type: nginx
|
||||||
|
config-file: "{snap_common}/etc/nginx/snap/nginx.conf"
|
||||||
|
config-file-override: "{snap_common}/etc/nginx/nginx.conf"
|
16
snap/templates/gnocchi-api.ini.j2
Normal file
16
snap/templates/gnocchi-api.ini.j2
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, you'll need
|
||||||
|
# to define this template. Be sure to update the path for the wsgi-file and
|
||||||
|
# "api-name" for the socket. You may also want to rename this file according to
|
||||||
|
# the service it provides, and you may even need to provide multiple uwsgi files
|
||||||
|
# if there is more than one wsgi application.
|
||||||
|
[uwsgi]
|
||||||
|
wsgi-file = {{ snap }}/bin/gnocchi-wsgi-file-name
|
||||||
|
uwsgi-socket = {{ snap_common }}/run/api-name.sock
|
||||||
|
buffer-size = 65535
|
||||||
|
master = true
|
||||||
|
enable-threads = true
|
||||||
|
processes = 4
|
||||||
|
thunder-lock = true
|
||||||
|
lazy-apps = true
|
||||||
|
home = {{ snap }}/usr
|
||||||
|
pyargv = {{ pyargv }}
|
14
snap/templates/gnocchi-nginx.conf.j2
Normal file
14
snap/templates/gnocchi-nginx.conf.j2
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, you'll need
|
||||||
|
# to define this template. Be sure to update "listen" with the port number and
|
||||||
|
# also update "api-name" for the socket.
|
||||||
|
server {
|
||||||
|
listen 1234;
|
||||||
|
access_log {{ snap_common }}/log/nginx-access.log;
|
||||||
|
error_log {{ snap_common }}/log/nginx-error.log;
|
||||||
|
location / {
|
||||||
|
include uwsgi_params;
|
||||||
|
include {{ snap }}/usr/conf/uwsgi_params;
|
||||||
|
uwsgi_param SCRIPT_NAME '';
|
||||||
|
uwsgi_pass unix://{{ snap_common }}/run/api-name.sock;
|
||||||
|
}
|
||||||
|
}
|
7
snap/templates/gnocchi-snap.conf.j2
Normal file
7
snap/templates/gnocchi-snap.conf.j2
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[DEFAULT]
|
||||||
|
# Set state path to writable directory
|
||||||
|
state_path = /lib
|
||||||
|
|
||||||
|
[oslo_concurrency]
|
||||||
|
# Oslo Concurrency lock path
|
||||||
|
lock_path = /lock
|
41
snap/templates/nginx.conf.j2
Normal file
41
snap/templates/nginx.conf.j2
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, you'll need
|
||||||
|
# to define this template.
|
||||||
|
user root root;
|
||||||
|
worker_processes auto;
|
||||||
|
pid {{ snap_common }}/run/nginx.pid;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 768;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
##
|
||||||
|
# Basic Settings
|
||||||
|
##
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
tcp_nodelay on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
types_hash_max_size 2048;
|
||||||
|
|
||||||
|
include {{ snap }}/usr/conf/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
##
|
||||||
|
# Logging Settings
|
||||||
|
##
|
||||||
|
|
||||||
|
access_log {{ snap_common }}/log/nginx-access.log;
|
||||||
|
error_log {{ snap_common }}/log/nginx-error.log;
|
||||||
|
|
||||||
|
##
|
||||||
|
# Gzip Settings
|
||||||
|
##
|
||||||
|
|
||||||
|
gzip on;
|
||||||
|
gzip_disable "msie6";
|
||||||
|
|
||||||
|
include {{ snap_common }}/etc/nginx/conf.d/*.conf;
|
||||||
|
include {{ snap_common }}/etc/nginx/snap/sites-enabled/*;
|
||||||
|
}
|
106
snapcraft.yaml
Normal file
106
snapcraft.yaml
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
name: gnocchi
|
||||||
|
version: pike
|
||||||
|
summary: Time Series Database as a Service
|
||||||
|
description: |
|
||||||
|
Gnocchi is an open-source, multi-tenant timeseries, metrics and resources database. It provides an HTTP REST interface to create and manipulate the data. It is designed to store metrics at a very large scale while providing access to metrics and resources information and history.
|
||||||
|
confinement: strict
|
||||||
|
grade: devel
|
||||||
|
|
||||||
|
apps:
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, the folowing
|
||||||
|
# app is required.
|
||||||
|
uwsgi:
|
||||||
|
command: snap-openstack gnocchi-uwsgi
|
||||||
|
daemon: simple
|
||||||
|
plugs:
|
||||||
|
- network-bind
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, the folowing
|
||||||
|
# app is required.
|
||||||
|
nginx:
|
||||||
|
command: snap-openstack gnocchi-nginx
|
||||||
|
daemon: forking
|
||||||
|
plugs:
|
||||||
|
- network-bind
|
||||||
|
# Following is an example of creating a command app.
|
||||||
|
manage:
|
||||||
|
command: snap-openstack gnocchi-manage
|
||||||
|
plugs:
|
||||||
|
- network
|
||||||
|
|
||||||
|
parts:
|
||||||
|
# Following is an example of defining a part to build an OpenStack project
|
||||||
|
gnocchi:
|
||||||
|
plugin: python
|
||||||
|
python-version: python2
|
||||||
|
source: http://tarballs.openstack.org/gnocchi/gnocchi-stable-pike.tar.gz
|
||||||
|
python-packages:
|
||||||
|
# You may need to pull in additional python packages
|
||||||
|
- python-memcached
|
||||||
|
- pymysql
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, uwsgi is required.
|
||||||
|
- uwsgi
|
||||||
|
- git+https://github.com/openstack/snap.openstack#egg=snap.openstack
|
||||||
|
constraints: https://raw.githubusercontent.com/openstack/requirements/stable/pike/upper-constraints.txt
|
||||||
|
build-packages:
|
||||||
|
- gcc
|
||||||
|
- libffi-dev
|
||||||
|
- libssl-dev
|
||||||
|
- libxml2-dev
|
||||||
|
- libxslt1-dev
|
||||||
|
install: |
|
||||||
|
touch $SNAPCRAFT_PART_INSTALL/lib/python2.7/site-packages/paste/__init__.py
|
||||||
|
touch $SNAPCRAFT_PART_INSTALL/lib/python2.7/site-packages/repoze/__init__.py
|
||||||
|
export SNAP_ROOT="../../.."
|
||||||
|
export SNAP_SITE_PACKAGES="$SNAPCRAFT_PART_INSTALL/lib/python2.7/site-packages"
|
||||||
|
patch -d $SNAP_SITE_PACKAGES -p1 < $SNAP_ROOT/patches/oslo-config-dirs.patch
|
||||||
|
templates:
|
||||||
|
after: [gnocchi]
|
||||||
|
plugin: dump
|
||||||
|
source: snap
|
||||||
|
# Following is an example of including the OpenStack project's config
|
||||||
|
config:
|
||||||
|
after: [gnocchi]
|
||||||
|
plugin: dump
|
||||||
|
source: http://tarballs.openstack.org/gnocchi/gnocchi-stable-pike.tar.gz
|
||||||
|
organize:
|
||||||
|
etc/*.conf: etc/gnocchi/
|
||||||
|
etc/*.ini: etc/gnocchi/
|
||||||
|
etc/*.json: etc/gnocchi/
|
||||||
|
etc/*.templates: etc/gnocchi/
|
||||||
|
filesets:
|
||||||
|
etc:
|
||||||
|
- etc/gnocchi/*.conf
|
||||||
|
- etc/gnocchi/*.ini
|
||||||
|
- etc/gnocchi/*.json
|
||||||
|
- etc/gnocchi/*.templates
|
||||||
|
stage: [$etc]
|
||||||
|
prime: [$etc]
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, the following
|
||||||
|
# part is required.
|
||||||
|
nginx:
|
||||||
|
source: http://www.nginx.org/download/nginx-1.13.0.tar.gz
|
||||||
|
plugin: autotools
|
||||||
|
configflags:
|
||||||
|
- --prefix=/usr
|
||||||
|
- --http-log-path=/var/snap/gnocchi/common/log/nginx-access.log
|
||||||
|
- --error-log-path=/var/snap/gnocchi/common/log/nginx-error.log
|
||||||
|
- --lock-path=/var/snap/gnocchi/common/lock/nginx.lock
|
||||||
|
- --pid-path=/var/snap/gnocchi/common/run/nginx.pid
|
||||||
|
- --http-client-body-temp-path=/var/snap/gnocchi/common/lib/nginx_client_body
|
||||||
|
- --http-proxy-temp-path=/var/snap/gnocchi/common/lib/nginx_proxy
|
||||||
|
- --http-fastcgi-temp-path=/var/snap/gnocchi/common/lib/nginx_fastcgi
|
||||||
|
- --http-uwsgi-temp-path=/var/snap/gnocchi/common/lib/nginx_uwsgi
|
||||||
|
- --http-scgi-temp-path=/var/snap/gnocchi/common/lib/nginx_scgi
|
||||||
|
- --with-http_ssl_module
|
||||||
|
build-packages:
|
||||||
|
- libpcre3-dev
|
||||||
|
- libssl-dev
|
||||||
|
prepare: |
|
||||||
|
export SNAP_ROOT="../../.."
|
||||||
|
export SNAP_SOURCE="$SNAP_ROOT/parts/nginx/build"
|
||||||
|
patch -d $SNAP_SOURCE -p1 < $SNAP_ROOT/patches/drop-nginx-setgroups.patch
|
||||||
|
# If the OpenStack service has an API that runs behind uwsgi+nginx, the following
|
||||||
|
# part is required.
|
||||||
|
libxml2:
|
||||||
|
source: http://xmlsoft.org/sources/libxml2-2.9.4.tar.gz
|
||||||
|
plugin: autotools
|
18
tox.ini
Normal file
18
tox.ini
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[tox]
|
||||||
|
envlist = snap
|
||||||
|
skipsdist = True
|
||||||
|
|
||||||
|
[testenv]
|
||||||
|
basepython = python3.5
|
||||||
|
install_command = pip install {opts} {packages}
|
||||||
|
passenv = HOME TERM
|
||||||
|
whitelist_externals =
|
||||||
|
sudo
|
||||||
|
snapcraft
|
||||||
|
|
||||||
|
[testenv:snap]
|
||||||
|
deps = -r{toxinidir}/requirements.txt
|
||||||
|
commands =
|
||||||
|
sudo snap install core
|
||||||
|
snapcraft clean
|
||||||
|
snapcraft snap
|
Loading…
Reference in New Issue
Block a user