2015-11-03 2 views
0

Я написал простой сценарий шеф-повара. В каталоге/DirectoryPath есть папка t1. Теперь я создаю новую папку в каталоге/DirectoryPath/t5. Но метод listDirectory() дает тот же вывод, что и новый каталог не создается. Я на MAC с поваром 11,4Выполнение команды в функции в chef-solo

Мой сценарий, как показано ниже

recipe.rb

def listDirectory() 
    ls = `ls ~/Delete` 
    return ls 
end 

log(listDirectory()) 

directory '/DirectoryPath/t5' do 
    action :create 
end 

log(listDirectory()) 

Выход

Recipe: test::default 
    * log[t1] action write[2015-11-03T15:02:47-08:00] INFO: Processing log[t1] action write 
[2015-11-03T15:02:47-08:00] INFO: t1 

    * directory[/DirectoryPath/t5] action create[2015-11-03T15:02:47-08:00] INFO: Processing directory[/DirectoryPath/t5] action create (test::default line 10) 
[2015-11-03T15:02:47-08:00] INFO: directory[/DirectoryPath/t5] created directory /DirectoryPath/t5 

    - create new directory /DirectoryPath/t5 
    * log[t1] action write[2015-11-03T15:02:47-08:00] INFO: Processing log[t1] action write 
[2015-11-03T15:02:47-08:00] INFO: t1 

По мне 2-й журнал оператор должен показывать папки t1 и t5, но он показывает только t1. Могу ли я узнать, что может быть причиной того, что команда возвращает тот же результат, даже если произошли некоторые изменения. И как мне избежать этого?

ответ

3

Это из-за two phases of a chef-client run.

Ваши звонки выполняются во время компиляции фазы, до directory ресурса выполняется (в фазе выполнения).

Вы должны ознакомиться с другими идиомами шеф-повара, такими как libraries и definitions. Вы не должны вставлять код ruby ​​непосредственно в рецепты.

Я предлагаю опубликовать новый вопрос с проблемой, которую вы хотите достичь. Довольно уверен, что есть способ повара в стиле шеф-повара.

+2

Если я могу добавить ссылку на [этот вопрос] (http://stackoverflow.com/questions/25980820/please-explain-compile-time-vs-run-time-in-chef-recipes), Tejay сделал хорошее объяснение двух пух. – Tensibai

Смежные вопросы