vagrant puppet 在下载包时卡住了

vagrant puppet is stuck when downloading package

试图让 vagrant 运行 建立我的测试环境,但是当我尝试启动时出现此错误:

==> default: Running provisioner: puppet...
==> default: Running Puppet with base.pp...
==> default: notice: Scope(Class[Sandbox]): Setting up sandbox box
==> default: notice: /Stage[main]//Exec[update_apt]/returns: executed successfully
==> default: notice: /Stage[main]/sandbox/Package[http://pypi.python.org/packages/source/h/hurry.filesize/hurry.filesize-0.9.tar.gz]/ensure: created
==> default: err: /Stage[main]/sandbox/Exec[update_pip]/returns: change from notrun to 0 failed: Could not find command '/usr/bin/pip'
==> default: err: /Stage[main]/sandbox/Exec[update_python_packages]/returns: change from notrun to 0 failed: Could not find command '/usr/bin/pip'
==> default: notice: Finished catalog run in 5.94 seconds

现在我认为主要问题在这里:

==> default: err: /Stage[main]/sandbox/Exec[update_pip]/returns: change from notrun to 0 failed: Could not find command '/usr/bin/pip'
==> default: err: /Stage[main]/sandbox/Exec[update_python_packages]/returns: change from notrun to 0 failed: Could not find command '/usr/bin/pip'

我将其追溯到我的 base.pp 文件。我认为问题出在这里。

 95   exec { "update_pip":
 96     command => "/usr/bin/pip install --upgrade pip",
 97   }
 98 
 99   exec { "update_python_packages":
100     command => "/usr/bin/pip install -r /vagrant/requirements.txt",
101   }

如果 pip 提示我无法使用“/usr/bin/pip..”,我该如何安装它?

我对 vagrant 还很陌生,所以如果我有什么新东西,请告诉我。谢谢。

您可能应该使用 this module 来处理 Python 和所有相关内容的安装。 Puppet 中的 Exec 登录可能非常困难,因此让一些完善的模块来处理它几乎总是更好。

这个简单的资源可以确保 pip 将在您的路径中安装并可用。

class { 'python' :
  version    => 'system',
  pip        => 'present',
  dev        => 'absent',
  virtualenv => 'absent',
  gunicorn   => 'absent',

}

由于我链接的 Puppet 模块,您甚至可以告诉 Puppet 在某些目录中创建 virtualenv 和 运行 pip install -r requirements

如果您不想使用外部模块,我建议您登录 Vagrant 机器并仔细检查 pip 是否已安装且可用。您可以 运行 which pip 查看您需要指定用于 运行 pip in exec 资源的确切路径。

这是我最终解决所有问题的方法:

新代码:

 90   exec { "update_pip":
 91     command => "/usr/bin/env pip install --upgrade pip",
 92   }
 93   exec { "update_python_packages":
 94     command => "/usr/bin/env pip install -r /vagrant/requirements.txt",
 95   }

原代码

 98
 99 #  exec { "update_pip":
100 #    command => "/usr/bin/pip install --upgrade pip",
101 #  }
102 #
103 #  exec { "update_python_packages":
104 #    command => "/usr/bin/pip install -r /vagrant/requirements.txt",
105 #  }

我注意到发生的事情是它找不到 /usr/bin/pip 所以我使用了 env 标志,我认为这意味着在安装它的任何地方升级。这解决了问题。