【问题标题】:How to use the python LWRP with Opsworks/Chef 11如何在 Opsworks/Chef 11 中使用 python LWRP
【发布时间】:2013-11-29 04:06:26
【问题描述】:

我是 Chef/OpsWorks 的新手,我正在尝试一个简单的方法来在 Ubuntu 12.04 实例上安装 Django 1.6:

python_pip "Django" do
    version "1.6"
    action :install
end

我的 providers/pip.rb 和 providers/virtualenv.rb 似乎覆盖了表面上已经加载的内容:

DEBUG: Loading cookbook python's providers from /opt/aws/opsworks/releases/20131107153140_213/site-cookbooks/python/providers/pip.rb

DEBUG: Loaded contents of /opt/aws/opsworks/releases/20131107153140_213/site-cookbooks/python/providers/pip.rb into a provider named python_pip defined in Chef::Provider::PythonPip

DEBUG: Loading cookbook python's providers from /opt/aws/opsworks/releases/20131107153140_213/site-cookbooks/python/providers/virtualenv.rb

DEBUG: Loaded contents of /opt/aws/opsworks/releases/20131107153140_213/site-cookbooks/python/providers/virtualenv.rb into a provider named python_virtualenv defined in Chef::Provider::PythonVirtualenv

DEBUG: Loading cookbook python's providers from /opt/aws/opsworks/releases/20131107153140_213/site-cookbooks/python/providers/pip.rb

INFO: PythonPip light-weight provider already initialized -- overriding!

DEBUG: Loaded contents of /opt/aws/opsworks/releases/20131107153140_213/site-cookbooks/python/providers/pip.rb into a provider named python_pip defined in Chef::Provider::PythonPip

DEBUG: Loading cookbook python's providers from /opt/aws/opsworks/releases/20131107153140_213/site-cookbooks/python/providers/virtualenv.rb

INFO: PythonVirtualenv light-weight provider already initialized -- overriding!

但是当我尝试使用 python_pip 时,我收到一个错误:

ERROR: Caught exception while compiling OpsWorks custom run list: NameError - Cannot find a resource for python_pip on ubuntu version 12.04 

我尝试在 metadata.rb 中添加 depends "python",但这没有帮助。任何建议表示赞赏。

我的食谱“python”的目录结构:

.
├── python
│   ├── attributes
│   │   └── default.rb
│   ├── metadata.rb
│   ├── providers
│   │   ├── pip.rb
│   │   └── virtualenv.rb
│   ├── recipes
│   │   ├── default.rb
│   │   ├── django.rb
│   │   ├── package.rb
│   │   ├── pip.rb
│   │   ├── source.rb
│   │   └── virtualenv.rb
│   ├── specs
│   │   └── configure_spec.rb
│   └── templates
│       └── default
└── README.md

【问题讨论】:

  • 您找到解决方案了吗?请不要忘记将答案标记为正确! :)

标签: python chef-infra chef-solo aws-opsworks lwrp


【解决方案1】:

在您可以使用 python_pip LWRP 之前,您需要在运行列表中包含 python 或在您自己的配方中包含 include_recipe "python"。

这是一个示例,假设您有一个名为 dj 的用户,并且已经设置了主目录。

# Note that the recipe will install Python, setuptools and pip
include_recipe "python"


# Create a virtual environment
python_virtualenv '/home/dj/virtenv' do
   interpreter "python2.7"
   owner 'dj'
   group 'dj'
   action :create
end

# Install Django to a virtualenv
python_pip "django" do
   virtualenv '/home/dj/virtenv'
   user 'dj'
   group 'dj'
   action :install
end

【讨论】:

  • 感谢您的回复。我已经尝试过了,但无法让它工作。我是否可能需要在我的食谱中使用“providers”文件夹(providers/virtualenv.rb、providers/pip.rb)以及这些食谱,然后将其添加到运行列表中?
  • +不,你不应该自己设置providers。它们由python 食谱提供。你能把你目前的目录结构放在你原来的问题中吗?
【解决方案2】:

不要尝试修改 python 食谱,除非它还没有满足您的需求。您的食谱目录至少应如下所示:

cookbooks/
    ├─python/ <clone of https://github.com/poise/python>
    |
    └─application_cookbook/
        ├─recipes/
        |   └─default.rb <containing the resource declaration you have in the question>
        └─metadata.rb <with a `depends "python"` statement in it>

就是这样,无需修改python食谱。现在只需将您的运行列表设置为[ "python", "application_cookbook" ],您就可以开始了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多