Unify tox/requirements/setup.py requirement specifications.
Do not set upper version limits if possible.
Drop uuid as dependency included with standard library.
Drop import of unmaintained cloudify_importer without python3 version.
Use PEP 508 URLs in requirements for non-PyPI (github) releases.
Use cloudify-common 5 release; pre-release package for python3.
Rewrite uses of map with loops/comprehensions.
Signed-off-by: Miroslav Los <miroslav.los@pantheon.tech>
Issue-ID: DCAEGEN2-1956
Change-Id: I7b3ceb97a628e3af5bda3178d182f4207069e86d
onap-dcae-dcaepolicy-lib==1.0.0
-uuid==1.30
+cloudify-common>=5.0.0; python_version<"3"
+cloudify-common @ git+https://github.com/cloudify-cosmo/cloudify-common@cy-1374-python3#egg=cloudify-common==5.0.0; python_version>="3"
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
url = "https://gerrit.onap.org/r/#/admin/projects/dcaegen2/platform/plugins",
zip_safe=False,
install_requires = [
- "onap-dcae-dcaepolicy-lib>=1.0.0,<2.0.0"
- "uuid==1.30"
+ # FIXME: not compatible with latest version
+ 'onap-dcae-dcaepolicy-lib==1.0.0',
+ 'cloudify-common>=5.0.0',
]
)
[tox]
-envlist = py27
+envlist = py27,py36
+
[testenv]
deps=
- -rrequirements.txt
- cloudify==3.4
+ -rrequirements.txt
pytest
coverage
pytest-cov
-commands=pytest --cov {envsitepackagesdir}/cdapcloudify --cov-report html
+commands=
+ pytest --cov {envsitepackagesdir}/cdapcloudify --cov-report html
[tox]
-envlist = py27
+envlist = py27,py36
+
[testenv]
deps=
- -rrequirements.txt
- cloudify==3.4
+ -rrequirements.txt
pytest
coverage
pytest-cov
-setenv=
- PYTHONPATH={toxinidir}
commands=
pytest --junitxml xunit-results.xml --cov cdapcloudify --cov-report xml
coverage xml
-requests>=2.11.0,<3.0.0
\ No newline at end of file
+requests>=2.11.0
+cloudify-common>=5.0.0; python_version<"3"
+cloudify-common @ git+https://github.com/cloudify-cosmo/cloudify-common@cy-1374-python3#egg=cloudify-common==5.0.0; python_version>="3"
# ================================================================================
# Copyright (c) 2019 Wipro Limited Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
author='Vignesh K',
packages=['clamppolicyplugin'],
install_requires=[
- "requests>=2.11.0,<3.0.0"
+ 'requests>=2.11.0',
+ 'cloudify-common>=5.0.0',
],
keywords='clamp policy model cloudify plugin',
classifiers=[
# tox -c tox-local.ini | tee -a logs/test_clamppolicyplugin.log 2>&1
[tox]
-envlist = py27
+envlist = py27,py36
[testenv]
deps=
-rrequirements.txt
- cloudify-plugins-common==3.4
pytest
coverage
pytest-cov
-setenv =
- PYTHONPATH={toxinidir}
# recreate = True
-commands=pytest -v --cov clamppolicyplugin --cov-report html
+commands=
+ pytest -v --cov clamppolicyplugin --cov-report html
# content of: tox.ini , put in same dir as setup.py
[tox]
-envlist = py27
+envlist = py27,py36
[testenv]
deps=
-rrequirements.txt
- cloudify-plugins-common==3.4
pytest
coverage
pytest-cov
-setenv =
- PYTHONPATH={toxinidir}
commands=
- -mkdir logs
- pytest --junitxml xunit-results.xml --cov clamppolicyplugin --cov-report xml
- coverage xml
+ pytest --junitxml xunit-results.xml --cov clamppolicyplugin --cov-report xml
+ coverage xml
# ================================================================================
# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
policy_required = ctx.node.properties.get(POLICY_REQUIRED)
try:
- policy_filter = copy.deepcopy(dict(
- (k, v) for (k, v) in dict(ctx.node.properties.get(POLICY_FILTER, {})).iteritems()
- if v or isinstance(v, (int, float))
- ))
- _fix_policy_filter(policy_filter)
+ policy_filter = ctx.node.properties.get(POLICY_FILTER)
+ if policy_filter:
+ policy_filter = {
+ k: copy.deepcopy(v) for k, v in policy_filter.items()
+ if v or isinstance(v, (int, float))
+ }
+ _fix_policy_filter(policy_filter)
+ else:
+ policy_filter = {}
if REQUEST_ID not in policy_filter:
policy_filter[REQUEST_ID] = str(uuid.uuid4())
-requests>=2.11.0,<3.0.0
+requests>=2.11.0
+cloudify-common>=5.0.0; python_version<"3"
+cloudify-common @ git+https://github.com/cloudify-cosmo/cloudify-common@cy-1374-python3#egg=cloudify-common==5.0.0; python_version>="3"
# ================================================================================
# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
author='Alex Shatov',
packages=['dcaepolicyplugin'],
install_requires=[
- "requests>=2.11.0,<3.0.0"
+ 'requests>=2.11.0',
+ 'cloudify-common>=5.0.0',
],
keywords='policy dcae controller cloudify plugin',
classifiers=[
# ================================================================================
# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
{tasks.DCAE_POLICY_PLUGIN: {
tasks.PolicyHandler.SERVICE_NAME_POLICY_HANDLER: {
"url": POLICY_HANDLER_FROM_KV}}}
- ))
+ ).encode()).decode()
return MonkeyedResponse(full_path, {}, [{"Value": value}])
return MonkeyedResponse(full_path)
# tox -c tox-local.ini | tee -a logs/test_dcaepolicyplugin.log 2>&1
[tox]
-envlist = py27
+envlist = py27,py36
[testenv]
deps=
-rrequirements.txt
- cloudify-plugins-common==3.4
pytest
coverage
pytest-cov
-setenv =
- PYTHONPATH={toxinidir}
+whitelist_externals=
+ /bin/mkdir
# recreate = True
-commands=pytest -v --cov dcaepolicyplugin --cov-report html
+commands=
+ mkdir -p logs
+ pytest -v --cov dcaepolicyplugin --cov-report html
# content of: tox.ini , put in same dir as setup.py
[tox]
-envlist = py27
+envlist = py27,py36
[testenv]
deps=
-rrequirements.txt
- cloudify-plugins-common==3.4
pytest
coverage
pytest-cov
-setenv =
- PYTHONPATH={toxinidir}
+whitelist_externals=
+ /bin/mkdir
commands=
- -mkdir logs
- pytest --junitxml xunit-results.xml --cov dcaepolicyplugin --cov-report xml
- coverage xml
+ mkdir -p logs
+ pytest --junitxml xunit-results.xml --cov dcaepolicyplugin --cov-report xml
+ coverage xml
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
def add_to_entry(conn, key, add_name, add_value):
"""
- Find 'key' in consul.
+ Find 'key' in consul.
Treat its value as a JSON string representing a dict.
Extend the dict by adding an entry with key 'add_name' and value 'add_value'.
Turn the resulting extended dict into a JSON string.
def _find_matching_services(services, name_search, tags):
"""Find matching services given search criteria"""
- def is_match(service):
- srv_name, srv_tags = service
- return name_search in srv_name and \
- all(map(lambda tag: tag in srv_tags, tags))
-
- return [ srv[0] for srv in services.items() if is_match(srv) ]
+ tags = set(tags)
+ return [srv_name for srv_name in services
+ if name_search in srv_name and tags <= set(services[srv_name])]
def search_services(conn, name_search, tags):
"""Search for services that match criteria
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
"""Parse streams and setup for DMaaP plugin"""
# The DMaaP plugin requires this plugin to set the runtime properties
# keyed by the node name.
- def setup_publishes(s):
- kwargs[s["name"]] = s
+ for stream in kwargs["streams_publishes"]:
+ kwargs[stream["name"]] = stream
- map(setup_publishes, kwargs["streams_publishes"])
-
- def setup_subscribes(s):
- if s["type"] == "data_router":
- # If username and password has been provided then generate it. The
- # DMaaP plugin doesn't generate for subscribers. The generation code
- # and length of username password has been lifted from the DMaaP
+ # NOTE: That the delivery url is constructed and setup in the start operation
+ for stream in kwargs["streams_subscribes"]:
+ if stream["type"] == "data_router":
+ # If either username or password is missing then generate it. The
+ # DMaaP plugin doesn't generate them for subscribers.
+ # The code and length of username/password are lifted from the DMaaP
# plugin.
# Don't want to mutate the source
- s = copy.deepcopy(s)
- if not s.get("username", None):
- s["username"] = utils.random_string(8)
- if not s.get("password", None):
- s["password"] = utils.random_string(10)
+ stream = copy.deepcopy(stream)
+ if not stream.get("username", None):
+ stream["username"] = utils.random_string(8)
+ if not stream.get("password", None):
+ stream["password"] = utils.random_string(10)
- kwargs[s["name"]] = s
-
- # NOTE: That the delivery url is constructed and setup in the start operation
- map(setup_subscribes, kwargs["streams_subscribes"])
+ kwargs[stream["name"]] = stream
return kwargs
+
def _setup_for_discovery_streams(**kwargs):
"""Setup for discovery of streams
v = { "location": dr_sub["location"], "delivery_url": None,
"username": dr_sub["username"], "password": dr_sub["password"],
"subscriber_id": None }
- return dis.add_to_entry(conn, dmaap_kv_key, dr_sub["name"], v) != None
+ return dis.add_to_entry(conn, dmaap_kv_key, dr_sub["name"], v)
try:
- if all(map(add_feed, dr_subs)):
- return kwargs
+ for dr_sub in dr_subs:
+ if add_feed(dr_sub) is None:
+ raise NonRecoverableError(
+ "Failure updating feed streams in Consul")
except Exception as e:
raise NonRecoverableError(e)
- # You should never get here
- raise NonRecoverableError("Failure updating feed streams in Consul")
- else:
- return kwargs
+ return kwargs
@merge_inputs_for_create
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Update dict d with dict u
"""
- for k, v in u.iteritems():
+ for k, v in u.items():
if isinstance(v, collections.Mapping):
r = update_dict(d.get(k, {}), v)
d[k] = r
-onap-dcae-dockering==1.4.0
-onap-dcae-dcaepolicy-lib>=2.4.1,<3.0.0
+python-consul>=0.6.0
+onap-dcae-dockering>=1.4.0
+onap-dcae-dcaepolicy-lib>=2.4.1
+cloudify-common>=5.0.0; python_version<"3"
+cloudify-common @ git+https://github.com/cloudify-cosmo/cloudify-common@cy-1374-python3#egg=cloudify-common==5.0.0; python_version>="3"
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
packages=['dockerplugin'],
zip_safe=False,
install_requires=[
- "python-consul>=0.6.0,<1.0.0",
- "onap-dcae-dockering>=1.0.0,<2.0.0",
- "uuid==1.30",
- "onap-dcae-dcaepolicy-lib>=2.4.1,<3.0.0"
+ 'python-consul>=0.6.0',
+ 'onap-dcae-dockering>=1.4.0',
+ 'onap-dcae-dcaepolicy-lib>=2.4.1',
+ 'cloudify-common>=5.0.0',
]
)
# content of: tox.ini , put in same dir as setup.py
[tox]
-envlist = py27
+envlist = py27,py36
[testenv]
deps=
-rrequirements.txt
- cloudify-plugins-common==3.4
pytest
coverage
pytest-cov
-setenv=
- PYTHONPATH={toxinidir}
commands=
- pytest --junitxml xunit-results.xml --cov dockerplugin --cov-report xml
- coverage xml
+ pytest --junitxml xunit-results.xml --cov dockerplugin --cov-report xml
+ coverage xml
# org.onap.dcae
# ================================================================================
# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
"""
from cloudify.exceptions import NonRecoverableError
- import ConfigParser
+ try:
+ import configparser
+ except ImportError:
+ import ConfigParser as configparser
from k8splugin import discovery
config = _set_defaults()
try:
# Get Consul address from a config file
- c = ConfigParser.ConfigParser()
+ c = configparser.ConfigParser()
c.read(config_path)
config["consul_host"] = c.get('consul','address')
# org.onap.dcae
# ================================================================================
# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
def _create_container_object(name, image, always_pull, env={}, container_ports=[], volume_mounts = [], resources = None, readiness = None, liveness = None):
# Set up environment variables
# Copy any passed in environment variables
- env_vars = [client.V1EnvVar(name=k, value=env[k]) for k in env.keys()]
+ env_vars = [client.V1EnvVar(name=k, value=env[k]) for k in env]
# Add POD_IP with the IP address of the pod running the container
pod_ip = client.V1EnvVarSource(field_ref = client.V1ObjectFieldSelector(field_path="status.podIP"))
env_vars.append(client.V1EnvVar(name="POD_IP",value_from=pod_ip))
if port_map:
service_ports = [] # Ports exposed internally on the k8s network
exposed_ports = [] # Ports to be mapped to ports on the k8s nodes via NodePort
- for (cport, proto), hport in port_map.iteritems():
+ for (cport, proto), hport in port_map.items():
service_ports.append(client.V1ServicePort(port=int(cport),protocol=proto,name="port-{0}-{1}".format(proto[0].lower(), cport)))
if int(hport) != 0:
exposed_ports.append(client.V1ServicePort(port=int(cport),protocol=proto,node_port=int(hport),name="xport-{0}-{1}".format(proto[0].lower(),cport)))
field_selector = "status.phase=Running"
).items]
- def do_execute(pod_name):
- return _execute_command_in_pod(location, namespace, pod_name, command)
-
# Execute command in the running pods
- return map(do_execute, pod_names)
+ return [_execute_command_in_pod(location, namespace, pod_name, command)
+ for pod_name in pod_names]
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
def _find_matching_services(services, name_search, tags):
"""Find matching services given search criteria"""
- def is_match(service):
- srv_name, srv_tags = service
- return name_search in srv_name and \
- all(map(lambda tag: tag in srv_tags, tags))
+ tags = set(tags)
+ return [srv_name for srv_name in services
+ if name_search in srv_name and tags <= set(services[srv_name])]
- return [ srv[0] for srv in services.items() if is_match(srv) ]
def search_services(conn, name_search, tags):
"""Search for services that match criteria
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# Lifecycle interface calls for containerized components
-# Needed by Cloudify Manager to load google.auth for the Kubernetes python client
-import cloudify_importer
-
import time, copy
import json
from cloudify import ctx
"""Parse streams and setup for DMaaP plugin"""
# The DMaaP plugin requires this plugin to set the runtime properties
# keyed by the node name.
- def setup_publishes(s):
- kwargs[s["name"]] = s
-
- map(setup_publishes, kwargs["streams_publishes"])
+ for stream in kwargs["streams_publishes"]:
+ kwargs[stream["name"]] = stream
- def setup_subscribes(s):
- if s["type"] == "data_router":
+ for stream in kwargs["streams_subscribes"]:
+ if stream["type"] == "data_router":
# Don't want to mutate the source
- s = copy.deepcopy(s)
+ stream = copy.deepcopy(stream)
# Set up the delivery URL
# Using service_component_name as the host name in the subscriber URL
# more remote ("edge") locations depends on how networking and DNS is set
# up in a multi-cluster deployment
service_component_name = kwargs["name"]
- ports,_ = k8sclient.parse_ports(kwargs["ports"])
- (dport, _) = ports[0]
+ ports, _ = k8sclient.parse_ports(kwargs["ports"])
+ dport, _ = ports[0]
subscriber_host = "{host}:{port}".format(host=service_component_name, port=dport)
- scheme = s["scheme"] if "scheme" in s else DEFAULT_SCHEME
- if "route" not in s:
+ scheme = stream.get("scheme", DEFAULT_SCHEME)
+ if "route" not in stream:
raise NonRecoverableError("'route' key missing from data router subscriber")
- path = s["route"]
- s["delivery_url"] = "{scheme}://{host}/{path}".format(
+ path = stream["route"]
+ stream["delivery_url"] = "{scheme}://{host}/{path}".format(
scheme=scheme, host=subscriber_host, path=path)
# If username and password has not been provided then generate it. The
# DMaaP plugin doesn't generate for subscribers. The generation code
# and length of username password has been lifted from the DMaaP
# plugin.
- if not s.get("username", None):
- s["username"] = utils.random_string(8)
- if not s.get("password", None):
- s["password"] = utils.random_string(10)
-
- kwargs[s["name"]] = s
+ if not stream.get("username", None):
+ stream["username"] = utils.random_string(8)
+ if not stream.get("password", None):
+ stream["password"] = utils.random_string(10)
- map(setup_subscribes, kwargs["streams_subscribes"])
+ kwargs[stream["name"]] = stream
return kwargs
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Update dict d with dict u
"""
- for k, v in u.iteritems():
+ for k, v in u.items():
if isinstance(v, collections.Mapping):
r = update_dict(d.get(k, {}), v)
d[k] = r
-python-consul>=0.6.0,<1.0.0
-uuid==1.30
-onap-dcae-dcaepolicy-lib>=2.4.1,<3.0.0
-kubernetes==9.0.0
-cloudify-plugins-common==3.4
+python-consul>=0.6.0
+onap-dcae-dcaepolicy-lib>=2.4.1
+kubernetes>=9.0.0
+cloudify-common>=5.0.0; python_version<"3"
+cloudify-common @ git+https://github.com/cloudify-cosmo/cloudify-common@cy-1374-python3#egg=cloudify-common==5.0.0; python_version>="3"
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
packages=['k8splugin','k8sclient','msb','configure'],
zip_safe=False,
install_requires=[
- "python-consul>=0.6.0,<1.0.0",
- "uuid==1.30",
- "onap-dcae-dcaepolicy-lib>=2.4.1,<3.0.0",
- "cloudify-plugins-common==3.4",
- "cloudify-python-importer==0.1.0",
- "kubernetes==9.0.0"
+ 'python-consul>=0.6.0',
+ 'onap-dcae-dcaepolicy-lib>=2.4.1',
+ 'kubernetes>=9.0.0',
+ 'cloudify-common>=5.0.0',
]
)
# org.onap.dcae
# ================================================================================
# Copyright (c) 2018-2019 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
(354123, 354123),
("354123", 354123),
("354123s", 354123),
- (1234567890123456789012345678901234567890L,1234567890123456789012345678901234567890L),
- ("1234567890123456789012345678901234567890",1234567890123456789012345678901234567890L),
- ("1234567890123456789012345678901234567890s",1234567890123456789012345678901234567890L),
+ (1234567890123456789012345678901234567890,1234567890123456789012345678901234567890),
+ ("1234567890123456789012345678901234567890",1234567890123456789012345678901234567890),
+ ("1234567890123456789012345678901234567890s",1234567890123456789012345678901234567890),
("05s", 5),
("00000000000000000000000000000000005m", 5 * 60)
]
# content of: tox.ini , put in same dir as setup.py
[tox]
-envlist = py27
+envlist = py27,py36
[testenv]
deps=
pytest
coverage
pytest-cov
-setenv=
- PYTHONPATH={toxinidir}
commands=
- pytest --junitxml xunit-results.xml --cov configure --cov k8sclient --cov k8splugin --cov msb --cov-report xml
- coverage xml
+ pytest --junitxml xunit-results.xml --cov configure --cov k8sclient --cov k8splugin --cov msb --cov-report xml
+ coverage xml
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-from urlparse import urlparse
+try:
+ from urllib.parse import urlparse
+except ImportError:
+ from urlparse import urlparse
import json
import consul
-python-consul==0.6.1
+python-consul>=0.6.1
+cloudify-common>=5.0.0; python_version<"3"
+cloudify-common @ git+https://github.com/cloudify-cosmo/cloudify-common@cy-1374-python3#egg=cloudify-common==5.0.0; python_version>="3"
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (c) 2019 Pantheon.tech. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
packages=['relationshipplugin'],
zip_safe=False,
install_requires=[
- "python-consul>=0.6.0"
+ 'python-consul>=0.6.1',
+ 'cloudify-common>=5.0.0',
]
)
# content of: tox.ini , put in same dir as setup.py
[tox]
-envlist = py27
+envlist = py27,py36
[testenv]
deps=
- cloudify-plugins-common==3.4
+ -rrequirements.txt
pytest
coverage
pytest-cov
-setenv=
- PYTHONPATH={toxinidir}
commands=
- pytest --junitxml xunit-results.xml --cov relationshipplugin --cov-report xml
- coverage xml
+ pytest --junitxml xunit-results.xml --cov relationshipplugin --cov-report xml
+ coverage xml