0

ローカルでうまく動作する vagrant と puppet を使用したプロビジョニング設定があり、 vagrant -awsを使用して AWS に移動しようとしています。

私が理解しているように、指定されたようにvagrantのAWSユーザーデータフィールドを使用して、新しいvmの最初の起動時に次のようにコマンドを実行できます。

aws.user_data = File.read("user_data.txt")

user_data.txt の内容:

#!/bin/bash
sudo apt-get install -y puppet-common

その後、既存のパペット プロビジョニング スクリプトを実行できるようになります。ただし、vagrant up コマンドで次のエラーが発生します。

[aws] Running provisioner: puppet...
The `puppet` binary appears to not be in the PATH of the guest. This
could be because the PATH is not properly setup or perhaps Puppet is not
installed on this guest. Puppet provisioning can not continue without
Puppet properly installed.

しかし、マシンに SSH 接続すると、ユーザー データが解析され、パペットが正常にインストールされていることがわかります。ユーザーデータのインストールパペットの前に、パペットプロビジョナーが実行されていますか? または、プロビジョニングを試みる前に仮想マシンにパペットをインストールするより良い方法はありますか?

4

2 に答える 2

2

これは壊れていますが、独自の AMI を構築するよりもはるかに簡単な Ubuntu を使用している場合の回避策があります。

次の行を構成に追加します。

aws.user_data = "#cloud-config\nbootcmd:\n - echo 'manual' > /etc/init/ssh.override\npackages:\n - puppet\nruncmd:\n - [ 'rm', '/etc/init/ssh.override' ]\n - [ 'service', 'ssh', 'start' ]\n"

これにより、起動プロセスの早い段階で SSH の起動を無効にし、パッケージがインストールされたら再度有効にするように Cloudinit に指示します。パッケージが完全にインストールされると、Vagrant は SSH でのみ puppet を実行できるようになりました。

これは、Ubuntu 以外の Cloudinit を使用する他のディストリビューションでも機能する可能性がありますが、Upstart 固有であるため、コマンドを微調整する必要がある場合があります。

于 2013-07-22T23:02:51.560 に答える