poise-application-python 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.kitchen.travis.yml +9 -0
- data/.kitchen.yml +10 -0
- data/.travis.yml +20 -0
- data/.yardopts +3 -0
- data/Berksfile +35 -0
- data/CHANGELOG.md +71 -0
- data/Gemfile +37 -0
- data/LICENSE +201 -0
- data/README.md +334 -0
- data/Rakefile +17 -0
- data/SUPPORTERS.md +81 -0
- data/chef/templates/celeryconfig.py.erb +5 -0
- data/chef/templates/settings.py.erb +13 -0
- data/lib/poise_application_python.rb +23 -0
- data/lib/poise_application_python/app_mixin.rb +67 -0
- data/lib/poise_application_python/cheftie.rb +17 -0
- data/lib/poise_application_python/error.rb +25 -0
- data/lib/poise_application_python/resources.rb +26 -0
- data/lib/poise_application_python/resources/celery_beat.rb +43 -0
- data/lib/poise_application_python/resources/celery_config.rb +109 -0
- data/lib/poise_application_python/resources/celery_worker.rb +77 -0
- data/lib/poise_application_python/resources/django.rb +355 -0
- data/lib/poise_application_python/resources/gunicorn.rb +127 -0
- data/lib/poise_application_python/resources/pip_requirements.rb +47 -0
- data/lib/poise_application_python/resources/python.rb +57 -0
- data/lib/poise_application_python/resources/python_execute.rb +89 -0
- data/lib/poise_application_python/resources/python_package.rb +62 -0
- data/lib/poise_application_python/resources/virtualenv.rb +75 -0
- data/lib/poise_application_python/service_mixin.rb +57 -0
- data/lib/poise_application_python/version.rb +19 -0
- data/poise-application-python.gemspec +45 -0
- data/test/cookbooks/application_python_test/attributes/default.rb +17 -0
- data/test/cookbooks/application_python_test/metadata.rb +20 -0
- data/test/cookbooks/application_python_test/recipes/default.rb +83 -0
- data/test/cookbooks/application_python_test/recipes/django.rb +32 -0
- data/test/cookbooks/application_python_test/recipes/flask.rb +25 -0
- data/test/gemfiles/chef-12.gemfile +19 -0
- data/test/gemfiles/master.gemfile +27 -0
- data/test/integration/default/serverspec/default_spec.rb +81 -0
- data/test/integration/default/serverspec/django_spec.rb +56 -0
- data/test/integration/default/serverspec/flask_spec.rb +39 -0
- data/test/spec/app_mixin_spec.rb +69 -0
- data/test/spec/resources/celery_config_spec.rb +58 -0
- data/test/spec/resources/django_spec.rb +303 -0
- data/test/spec/resources/gunicorn_spec.rb +96 -0
- data/test/spec/resources/python_execute_spec.rb +46 -0
- data/test/spec/resources/python_spec.rb +44 -0
- data/test/spec/resources/virtualenv_spec.rb +44 -0
- data/test/spec/spec_helper.rb +19 -0
- metadata +216 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'poise_python/resources/pip_requirements'
|
18
|
+
|
19
|
+
require 'poise_application_python/app_mixin'
|
20
|
+
|
21
|
+
|
22
|
+
module PoiseApplicationPython
|
23
|
+
module Resources
|
24
|
+
# (see PipRequirements::Resource)
|
25
|
+
# @since 4.0.0
|
26
|
+
module PipRequirements
|
27
|
+
# An `application_pip_requirements` resource to manage Python virtual
|
28
|
+
# environments inside an Application cookbook deployment.
|
29
|
+
#
|
30
|
+
# @provides application_pip_requirements
|
31
|
+
# @provides application_virtualenv
|
32
|
+
# @action install
|
33
|
+
# @action upgrade
|
34
|
+
# @example
|
35
|
+
# application '/app' do
|
36
|
+
# pip_requirements
|
37
|
+
# end
|
38
|
+
class Resource < PoisePython::Resources::PipRequirements::Resource
|
39
|
+
include PoiseApplicationPython::AppMixin
|
40
|
+
provides(:application_pip_requirements)
|
41
|
+
subclass_providers!
|
42
|
+
|
43
|
+
# @todo This should handle relative paths against parent.path.
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'poise_python/resources/python_runtime'
|
18
|
+
|
19
|
+
require 'poise_application_python/app_mixin'
|
20
|
+
|
21
|
+
|
22
|
+
module PoiseApplicationPython
|
23
|
+
module Resources
|
24
|
+
# (see Python::Resource)
|
25
|
+
# @since 4.0.0
|
26
|
+
module Python
|
27
|
+
# An `application_python` resource to manage Python runtimes
|
28
|
+
# inside an Application cookbook deployment.
|
29
|
+
#
|
30
|
+
# @provides application_python
|
31
|
+
# @provides application_python_runtime
|
32
|
+
# @action install
|
33
|
+
# @action uninstall
|
34
|
+
# @example
|
35
|
+
# application '/app' do
|
36
|
+
# python '2'
|
37
|
+
# end
|
38
|
+
class Resource < PoisePython::Resources::PythonRuntime::Resource
|
39
|
+
include PoiseApplicationPython::AppMixin
|
40
|
+
provides(:application_python)
|
41
|
+
provides(:application_python_runtime)
|
42
|
+
container_default(false)
|
43
|
+
subclass_providers!
|
44
|
+
|
45
|
+
# Set this resource as the app_state's parent python.
|
46
|
+
#
|
47
|
+
# @api private
|
48
|
+
def after_created
|
49
|
+
super.tap do |val|
|
50
|
+
app_state_python(self)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'poise_python/resources/python_execute'
|
18
|
+
|
19
|
+
require 'poise_application_python/app_mixin'
|
20
|
+
|
21
|
+
|
22
|
+
module PoiseApplicationPython
|
23
|
+
module Resources
|
24
|
+
# (see PythonExecute::Resource)
|
25
|
+
# @since 4.0.0
|
26
|
+
module PythonExecute
|
27
|
+
# An `application_python_execute` resource to run Python commands inside an
|
28
|
+
# Application cookbook deployment.
|
29
|
+
#
|
30
|
+
# @provides application_python_execute
|
31
|
+
# @action run
|
32
|
+
# @example
|
33
|
+
# application '/srv/myapp' do
|
34
|
+
# python_execute 'setup.py install'
|
35
|
+
# end
|
36
|
+
class Resource < PoisePython::Resources::PythonExecute::Resource
|
37
|
+
include PoiseApplicationPython::AppMixin
|
38
|
+
provides(:application_python_execute)
|
39
|
+
|
40
|
+
def initialize(*args)
|
41
|
+
super
|
42
|
+
# Clear some instance variables so my defaults work.
|
43
|
+
remove_instance_variable(:@cwd)
|
44
|
+
remove_instance_variable(:@group)
|
45
|
+
remove_instance_variable(:@user)
|
46
|
+
end
|
47
|
+
|
48
|
+
# #!attribute cwd
|
49
|
+
# Override the default directory to be the app path if unspecified.
|
50
|
+
# @return [String]
|
51
|
+
attribute(:cwd, kind_of: [String, NilClass, FalseClass], default: lazy { parent && parent.path })
|
52
|
+
|
53
|
+
# #!attribute group
|
54
|
+
# Override the default group to be the app group if unspecified.
|
55
|
+
# @return [String, Integer]
|
56
|
+
attribute(:group, kind_of: [String, Integer, NilClass, FalseClass], default: lazy { parent && parent.group })
|
57
|
+
|
58
|
+
# #!attribute user
|
59
|
+
# Override the default user to be the app owner if unspecified.
|
60
|
+
# @return [String, Integer]
|
61
|
+
attribute(:user, kind_of: [String, Integer, NilClass, FalseClass], default: lazy { parent && parent.owner })
|
62
|
+
end
|
63
|
+
|
64
|
+
# The default provider for `application_python_execute`.
|
65
|
+
#
|
66
|
+
# @see Resource
|
67
|
+
# @provides application_python_execute
|
68
|
+
class Provider < PoisePython::Resources::PythonExecute::Provider
|
69
|
+
provides(:application_python_execute)
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
# Override environment to add the application envivonrment instead.
|
74
|
+
#
|
75
|
+
# @return [Hash]
|
76
|
+
def environment
|
77
|
+
super.tap do |environment|
|
78
|
+
# Don't use the app_state_environment_python because we already have
|
79
|
+
# those values in place.
|
80
|
+
environment.update(new_resource.app_state_environment)
|
81
|
+
# Re-apply the resource environment for correct ordering.
|
82
|
+
environment.update(new_resource.environment) if new_resource.environment
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'poise_python/resources/python_package'
|
18
|
+
|
19
|
+
require 'poise_application_python/app_mixin'
|
20
|
+
|
21
|
+
|
22
|
+
module PoiseApplicationPython
|
23
|
+
module Resources
|
24
|
+
# (see PythonPackage::Resource)
|
25
|
+
# @since 4.0.0
|
26
|
+
module PythonPackage
|
27
|
+
# An `application_python_package` resource to install Python
|
28
|
+
# packages inside an Application cookbook deployment.
|
29
|
+
#
|
30
|
+
# @provides application_python_package
|
31
|
+
# @action install
|
32
|
+
# @action upgrade
|
33
|
+
# @action remove
|
34
|
+
# @example
|
35
|
+
# application '/srv/myapp' do
|
36
|
+
# python_package 'requests'
|
37
|
+
# end
|
38
|
+
class Resource < PoisePython::Resources::PythonPackage::Resource
|
39
|
+
include PoiseApplicationPython::AppMixin
|
40
|
+
provides(:application_python_package)
|
41
|
+
subclass_providers!
|
42
|
+
|
43
|
+
def initialize(*args)
|
44
|
+
super
|
45
|
+
# For older Chef.
|
46
|
+
@resource_name = :application_python_package
|
47
|
+
end
|
48
|
+
|
49
|
+
# #!attribute group
|
50
|
+
# Override the default group to be the app group if unspecified.
|
51
|
+
# @return [String, Integer]
|
52
|
+
attribute(:group, kind_of: [String, Integer, NilClass], default: lazy { parent && parent.group })
|
53
|
+
|
54
|
+
# #!attribute user
|
55
|
+
# Override the default user to be the app owner if unspecified.
|
56
|
+
# @return [String, Integer]
|
57
|
+
attribute(:user, kind_of: [String, Integer, NilClass], default: lazy { parent && parent.owner })
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'poise_python/resources/python_virtualenv'
|
18
|
+
|
19
|
+
require 'poise_application_python/app_mixin'
|
20
|
+
|
21
|
+
|
22
|
+
module PoiseApplicationPython
|
23
|
+
module Resources
|
24
|
+
# (see Virtualenv::Resource)
|
25
|
+
# @since 4.0.0
|
26
|
+
module Virtualenv
|
27
|
+
# An `application_virtualenv` resource to manage Python virtual
|
28
|
+
# environments inside an Application cookbook deployment.
|
29
|
+
#
|
30
|
+
# @provides application_virtualenv
|
31
|
+
# @provides application_python_virtualenv
|
32
|
+
# @action create
|
33
|
+
# @action delete
|
34
|
+
# @example
|
35
|
+
# application '/app' do
|
36
|
+
# virtualenv
|
37
|
+
# end
|
38
|
+
class Resource < PoisePython::Resources::PythonVirtualenv::Resource
|
39
|
+
include PoiseApplicationPython::AppMixin
|
40
|
+
provides(:application_virtualenv)
|
41
|
+
provides(:application_python_virtualenv)
|
42
|
+
container_default(false)
|
43
|
+
subclass_providers!
|
44
|
+
|
45
|
+
# @!attribute path
|
46
|
+
# Override the normal path property to use name/.virtualenv for better
|
47
|
+
# compatibility with the application resource DSL.
|
48
|
+
# @return [String]
|
49
|
+
attribute(:path, kind_of: String, default: lazy { default_path })
|
50
|
+
|
51
|
+
# Set this resource as the app_state's parent python.
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
def after_created
|
55
|
+
super.tap do |val|
|
56
|
+
# Force evaluation so we get any current parent if set.
|
57
|
+
parent_python
|
58
|
+
app_state_python(self)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Default value for the {#path} property.
|
65
|
+
#
|
66
|
+
# @return [String]
|
67
|
+
def default_path
|
68
|
+
# @todo This should handle relative paths as a name.
|
69
|
+
::File.join(name, '.virtualenv')
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'poise/utils'
|
18
|
+
require 'poise_application/service_mixin'
|
19
|
+
require 'poise_languages/utils'
|
20
|
+
|
21
|
+
require 'poise_application_python/app_mixin'
|
22
|
+
|
23
|
+
|
24
|
+
module PoiseApplicationPython
|
25
|
+
# A helper mixin for Python service resources and providers.
|
26
|
+
#
|
27
|
+
# @since 4.0.0
|
28
|
+
module ServiceMixin
|
29
|
+
include Poise::Utils::ResourceProviderMixin
|
30
|
+
|
31
|
+
# A helper mixin for Python service resources.
|
32
|
+
module Resource
|
33
|
+
include PoiseApplication::ServiceMixin::Resource
|
34
|
+
include PoiseApplicationPython::AppMixin::Resource
|
35
|
+
end
|
36
|
+
|
37
|
+
# A helper mixin for Python service providers.
|
38
|
+
module Provider
|
39
|
+
include PoiseApplication::ServiceMixin::Provider
|
40
|
+
include PoiseApplicationPython::AppMixin::Provider
|
41
|
+
|
42
|
+
# Set up the service for running Python stuff.
|
43
|
+
def service_options(resource)
|
44
|
+
super
|
45
|
+
# Closure scoping for #python_command below.
|
46
|
+
self_ = self
|
47
|
+
# Create a new singleton method that fills in Python for you.
|
48
|
+
resource.define_singleton_method(:python_command) do |val|
|
49
|
+
resource.command("#{self_.new_resource.python} #{PoiseLanguages::Utils.absolute_command(val, path: self_.new_resource.app_state_environment_python['PATH'])}")
|
50
|
+
end
|
51
|
+
# Include env vars as needed.
|
52
|
+
resource.environment.update(new_resource.parent_python.python_environment) if new_resource.parent_python
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
module PoiseApplicationPython
|
18
|
+
VERSION = '4.0.0'
|
19
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2015, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
lib = File.expand_path('../lib', __FILE__)
|
18
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
19
|
+
require 'poise_application_python/version'
|
20
|
+
|
21
|
+
Gem::Specification.new do |spec|
|
22
|
+
spec.name = 'poise-application-python'
|
23
|
+
spec.version = PoiseApplicationPython::VERSION
|
24
|
+
spec.authors = ['Noah Kantrowitz']
|
25
|
+
spec.email = %w{noah@coderanger.net}
|
26
|
+
spec.description = "A Chef cookbook for deploying Python application code."
|
27
|
+
spec.summary = spec.description
|
28
|
+
spec.homepage = 'https://github.com/poise/application_python'
|
29
|
+
spec.license = 'Apache 2.0'
|
30
|
+
spec.metadata['halite_name'] = 'application_python'
|
31
|
+
|
32
|
+
spec.files = `git ls-files`.split($/)
|
33
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
34
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
35
|
+
spec.require_paths = %w{lib}
|
36
|
+
|
37
|
+
spec.add_dependency 'halite', '~> 1.0'
|
38
|
+
spec.add_dependency 'poise', '~> 2.0'
|
39
|
+
spec.add_dependency 'poise-application', '~> 5.0'
|
40
|
+
spec.add_dependency 'poise-python', '~> 1.0'
|
41
|
+
spec.add_dependency 'poise-service', '~> 1.0'
|
42
|
+
|
43
|
+
spec.add_development_dependency 'poise-boiler', '~> 1.0'
|
44
|
+
spec.add_development_dependency 'poise-application-git', '~> 1.0'
|
45
|
+
end
|