Move csrgen templates into ipaclient package

csrgen broke packaging of ipaclient for PyPI. All csrgen related
resources are now package data of ipaclient package. Package data is
accessed with Jinja's PackageLoader() or through pkg_resources.

https://pagure.io/freeipa/issue/6714

Signed-off-by: Christian Heimes <cheimes@redhat.com>
Reviewed-By: Ben Lipton <blipton@redhat.com>
Reviewed-By: Martin Basti <mbasti@redhat.com>
This commit is contained in:
Christian Heimes 2017-03-02 16:09:53 +01:00 committed by David Kupka
parent f8d7e37a09
commit 80be181629
19 changed files with 30 additions and 52 deletions

View File

@ -463,7 +463,6 @@ AC_CONFIG_FILES([
install/share/Makefile
install/share/advise/Makefile
install/share/advise/legacy/Makefile
install/share/csrgen/Makefile
install/share/profiles/Makefile
install/share/schema.d/Makefile
install/ui/Makefile

View File

@ -1231,13 +1231,6 @@ fi
%{_usr}/share/ipa/advise/legacy/*.template
%dir %{_usr}/share/ipa/profiles
%{_usr}/share/ipa/profiles/*.cfg
%dir %{_usr}/share/ipa/csrgen
%dir %{_usr}/share/ipa/csrgen/templates
%{_usr}/share/ipa/csrgen/templates/*.tmpl
%dir %{_usr}/share/ipa/csrgen/profiles
%{_usr}/share/ipa/csrgen/profiles/*.json
%dir %{_usr}/share/ipa/csrgen/rules
%{_usr}/share/ipa/csrgen/rules/*.json
%dir %{_usr}/share/ipa/html
%{_usr}/share/ipa/html/ffconfig.js
%{_usr}/share/ipa/html/ffconfig_page.js
@ -1364,6 +1357,9 @@ fi
%{python_sitelib}/ipaclient/plugins/*.py*
%{python_sitelib}/ipaclient/remote_plugins/*.py*
%{python_sitelib}/ipaclient/remote_plugins/2_*/*.py*
%{python_sitelib}/ipaclient/csrgen/profiles/*.json
%{python_sitelib}/ipaclient/csrgen/rules/*.json
%{python_sitelib}/ipaclient/csrgen/templates/*.tmpl
%{python_sitelib}/ipaclient-*.egg-info
@ -1384,6 +1380,9 @@ fi
%{python3_sitelib}/ipaclient/remote_plugins/__pycache__/*.py*
%{python3_sitelib}/ipaclient/remote_plugins/2_*/*.py
%{python3_sitelib}/ipaclient/remote_plugins/2_*/__pycache__/*.py*
%{python3_sitelib}/ipaclient/csrgen/profiles/*.json
%{python3_sitelib}/ipaclient/csrgen/rules/*.json
%{python3_sitelib}/ipaclient/csrgen/templates/*.tmpl
%{python3_sitelib}/ipaclient-*.egg-info
%endif # with_python3

View File

@ -2,7 +2,6 @@ NULL =
SUBDIRS = \
advise \
csrgen \
profiles \
schema.d \
$(NULL)

View File

@ -1,35 +0,0 @@
NULL =
profiledir = $(IPA_DATA_DIR)/csrgen/profiles
profile_DATA = \
profiles/caIPAserviceCert.json \
profiles/userCert.json \
$(NULL)
ruledir = $(IPA_DATA_DIR)/csrgen/rules
rule_DATA = \
rules/dataDNS.json \
rules/dataEmail.json \
rules/dataHostCN.json \
rules/dataUsernameCN.json \
rules/dataSubjectBase.json \
rules/syntaxSAN.json \
rules/syntaxSubject.json \
$(NULL)
templatedir = $(IPA_DATA_DIR)/csrgen/templates
template_DATA = \
templates/certutil_base.tmpl \
templates/openssl_base.tmpl \
templates/openssl_macros.tmpl \
$(NULL)
EXTRA_DIST = \
$(profile_DATA) \
$(rule_DATA) \
$(template_DATA) \
$(NULL)
MAINTAINERCLEANFILES = \
*~ \
Makefile.in

View File

@ -8,6 +8,8 @@ import os.path
import pipes
import traceback
import pkg_resources
import jinja2
import jinja2.ext
import jinja2.sandbox
@ -15,7 +17,6 @@ import six
from ipalib import errors
from ipalib.text import _
from ipaplatform.paths import paths
from ipapython.ipa_log_manager import log_mgr
if six.PY3:
@ -72,10 +73,14 @@ class Formatter(object):
"""
base_template_name = None
def __init__(self, csr_data_dir=paths.CSR_DATA_DIR):
self.jinja2 = jinja2.sandbox.SandboxedEnvironment(
def __init__(self, csr_data_dir=None):
if csr_data_dir is not None:
loader = jinja2.FileSystemLoader(
os.path.join(csr_data_dir, 'templates')),
os.path.join(csr_data_dir, 'templates'))
else:
loader = jinja2.PackageLoader('ipaclient', 'csrgen/templates')
self.jinja2 = jinja2.sandbox.SandboxedEnvironment(
loader=loader,
extensions=[jinja2.ext.ExprStmtExtension, IPAExtension],
keep_trailing_newline=True, undefined=IndexableUndefined)
@ -277,8 +282,12 @@ class RuleProvider(object):
class FileRuleProvider(RuleProvider):
def __init__(self, csr_data_dir=paths.CSR_DATA_DIR):
def __init__(self, csr_data_dir=None):
self.rules = {}
if csr_data_dir is None:
self.csr_data_dir = pkg_resources.resource_filename(
'ipaclient', 'csrgen')
else:
self.csr_data_dir = csr_data_dir
def _rule(self, rule_name, helper):

View File

@ -43,6 +43,13 @@ if __name__ == '__main__':
"ipaclient.remote_plugins.2_156",
"ipaclient.remote_plugins.2_164",
],
package_data={
'ipaclient': [
'csrgen/profiles/*.json',
'csrgen/rules/*.json',
'csrgen/templates/*.tmpl',
],
},
install_requires=[
"cryptography",
"ipalib",
@ -56,5 +63,6 @@ if __name__ == '__main__':
extras_require={
"install": ["ipaplatform"],
"otptoken_yubikey": ["yubico", "usb"]
}
},
zip_safe=False,
)

View File

@ -238,7 +238,6 @@ class BasePathNamespace(object):
SCHEMA_COMPAT_ULDIF = "/usr/share/ipa/schema_compat.uldif"
IPA_JS_PLUGINS_DIR = "/usr/share/ipa/ui/js/plugins"
UPDATES_DIR = "/usr/share/ipa/updates/"
CSR_DATA_DIR = "/usr/share/ipa/csrgen"
DICT_WORDS = "/usr/share/dict/words"
CACHE_IPA_SESSIONS = "/var/cache/ipa/sessions"
VAR_KERBEROS_KRB5KDC_DIR = "/var/kerberos/krb5kdc/"