在 opsworks 實例上調試廚師食譜 - 訪問自定義 json/數據包屬性
我想在 aws opsworks ec2 伺服器上使用chef-shell會話,這樣我就可以測試一些我想包含在自定義配方中的環境和實例特定程式碼。比如我想看節點等實例屬性的輸出
$$ :opsworks $$$$ :instance $$$$ :layers $$或節點$$ :opsworks $$$$ :instance $$$$ :public_dns_name $$以及我使用自定義 json傳遞給 opsworks 堆棧的數據。 我可以啟動 chef-shell,我只是不知道如何使用它來訪問 opsworks 屬性。
如果我 ssh 進入 opsworks ec2 實例,我可以訪問節點等屬性
$$ ’ec2’ $$$$ ‘instance_id’ $$但沒有像 node 這樣的 opsworks 特定的$$ ‘opsworks’ $$$$ ‘instance’ $$$$ ’layers’ $$
root@mongodb1:/opt/aws/opsworks/current/bin# ./chef-shell loading configuration: none (standalone session) Session type: standalone Loading......done. This is the chef-shell. Chef Version: 11.10.4 http://www.opscode.com/chef http://docs.opscode.com/ run `help' for help, `exit' or ^D to quit. Ohai2u ubuntu@mongodb1.localdomain! chef > attributes_mode chef:attributes > node['ec2']['instance_id'] => "i-c1a98f2c" chef:attributes > node['opsworks']['instance']['layers'] NoMethodError: undefined method `[]' for nil:NilClass from (irb#1):4 chef:attributes >
當 OpsWorks 事件(設置、配置、部署、取消部署、關閉)發生時,自定義 JSON 和堆棧的狀態將推送到 JSON 結構中的實例。如果您希望配方查看 OpsWorks 堆棧的最新狀態,則需要通過部署 -> 執行命令 -> 執行配方表單從 OpsWorks UI 執行配方。
OpsWorks 發送的 JSON 儲存在實例上。如果您願意使用僅與此實例上次執行 OpsWorks 事件時一樣新鮮的可能陳舊的堆棧狀態資訊,您可以在 中查找實例上的最新
*.json
文件/var/lib/aws/opsworks/chef
,並通過 Ruby 程式碼對其進行解析。您還可以使用
opsworks-agent-cli
實例上的實用程序直接從實例上的命令行從 OpsWorks 事件(重新)執行配方。此實用程序將重新執行 OpsWorks 事件 - 它不會啟動新事件,並且不會拉入堆棧狀態或自定義 JSON 的新副本,而是重用OpsWorks在該事件發生時.json
發送給實例的文件原來執行。例如,為了setup
在您的實例上重新執行事件(因為 setup 事件肯定已經執行):
sudo opsworks-agent-cli run_command setup
為了重新執行您上次從 UI 執行 Execute Recipes 時執行的同一組配方:
sudo opsworks-agent-cli run_command execute_recipes
這很糟糕,因為您需要先通過 UI 執行事件。因此,如果您想要執行自定義配方,或者想要更新自定義食譜,您首先需要從 UI 執行該事件。但是,第二次、第三次和隨後的時間,您可以通過 重新執行這些事件
opsworks-agent-cli
。有關 opsworks-agent-cli 的更多資訊,請參見此處。