2015-07-27 1 views
1

Я пытаюсь сделать chef-solo создавать файлы knife.rb на рабах Jenkins. Итак, у меня есть ниже в атрибутах:ruby ​​Итерация или петля в ожидании

default['chef']['projects'] = ['ost', 'jt'] 
default['chef']['environments'] = ['dev', 'test', 'staging', 'production'] 

Это блок в рецепте:

node[:chef][:projects].each do |project| 
    node[:chef][:environments].each do |env| 
    template "#{node[:jenkins][:master][:home]}/.chef/knife-123#{project}-#{env}.rb" do 
     source 'knife.rb.erb' 
     owner 'jenkins' 
     group 'jenkins' 
     variables(
     :environment => env, 
     :project => project == 'ost' ? '' : project 
    ) 
    end 
    end 
end 

И шаблон: knife.rb.erb

##This file is generated by Chef 

current_dir = File.dirname(__FILE__) 
log_level    :info 
log_location    STDOUT 
node_name    "jenkins-ro" 
client_key    "#{current_dir}/jenkins-ro.pem" 
validation_client_name "123<%[email protected]%>-<%= @environment %>-validator" 
validation_key   "#{current_dir}/123<%[email protected]%>-<%= @environment %>-validator.pem" 
chef_server_url   "https://CHEF_URL/organizations/123<%[email protected]%>-<%= @environment %>" 
cache_type    'BasicFile' 
cache_options(:path => "#{ENV['HOME']}/.chef/checksums") 
cookbook_path   ["#{current_dir}/../cookbooks"] 
ssl_verify_mode   :verify_none 

Теперь, с этим, я я ожидаю, что 8 ножевых файлов именно это и создает их.

1. knife-123ost-dev.rb 
2. knife-123ost-test.rb 
3. knife-123ost-staging.rb 
4. knife-123ost-production.rb 
5. knife-123jt-dev.rb 
6. knife-123jt-test.rb 
7. knife-123jt-staging.rb 
8. knife-123jt-production.rb 

Проблема, с которой я столкнулся, состоит из следующих файлов. Другие файлы для проекта ost в массиве работают так, как ожидалось.

5. knife-123jt-dev.rb 
6. knife-123jt-test.rb 
7. knife-123jt-staging.rb 
8. knife-123jt-production.rb 

не имеет значения projectпеременной заселенной в шаблоне. Например, файл knife-123jt-dev.rb, выглядит как

##This file is generated by Chef 

current_dir = File.dirname(__FILE__) 
log_level    :info 
log_location    STDOUT 
node_name    "jenkins-ro" 
client_key    "#{current_dir}/jenkins-ro.pem" 
validation_client_name "123-dev-validator" 
validation_key   "#{current_dir}/123-dev-validator.pem" 
chef_server_url   "https://CHEF_URL/organizations/123-dev" 
cache_type    'BasicFile' 
cache_options(:path => "#{ENV['HOME']}/.chef/checksums") 
cookbook_path   ["#{current_dir}/../cookbooks"] 
ssl_verify_mode   :verify_none 

Ожидаемые файлы должны выглядеть ниже.

123jt-DEV

##This file is generated by Chef 

current_dir = File.dirname(__FILE__) 
log_level    :info 
log_location    STDOUT 
node_name    "jenkins-ro" 
client_key    "#{current_dir}/jenkins-ro.pem" 
validation_client_name "123jt-dev-validator" 
validation_key   "#{current_dir}/123jt-dev-validator.pem" 
chef_server_url   "https://CHEF_URL/organizations/123jt-dev" 
cache_type    'BasicFile' 
cache_options(:path => "#{ENV['HOME']}/.chef/checksums") 
cookbook_path   ["#{current_dir}/../cookbooks"] 
ssl_verify_mode   :verify_none 

123jt-тест

##This file is generated by Chef 

current_dir = File.dirname(__FILE__) 
log_level    :info 
log_location    STDOUT 
node_name    "jenkins-ro" 
client_key    "#{current_dir}/jenkins-ro.pem" 
validation_client_name "123jt-test-validator" 
validation_key   "#{current_dir}/123jt-test-validator.pem" 
chef_server_url   "https://CHEF_URL/organizations/123jt-test" 
cache_type    'BasicFile' 
cache_options(:path => "#{ENV['HOME']}/.chef/checksums") 
cookbook_path   ["#{current_dir}/../cookbooks"] 
ssl_verify_mode   :verify_none 

123jt-постановка

##This file is generated by Chef 

current_dir = File.dirname(__FILE__) 
log_level    :info 
log_location    STDOUT 
node_name    "jenkins-ro" 
client_key    "#{current_dir}/jenkins-ro.pem" 
validation_client_name "123jt-staging-validator" 
validation_key   "#{current_dir}/123jt-staging-validator.pem" 
chef_server_url   "https://CHEF_URL/organizations/123jt-staging" 
cache_type    'BasicFile' 
cache_options(:path => "#{ENV['HOME']}/.chef/checksums") 
cookbook_path   ["#{current_dir}/../cookbooks"] 
ssl_verify_mode   :verify_none 

123jt производство

##This file is generated by Chef 

current_dir = File.dirname(__FILE__) 
log_level    :info 
log_location    STDOUT 
node_name    "jenkins-ro" 
client_key    "#{current_dir}/jenkins-ro.pem" 
validation_client_name "123jt-production-validator" 
validation_key   "#{current_dir}/123jt-production-validator.pem" 
chef_server_url   "https://CHEF_URL/organizations/123jt-production" 
cache_type    'BasicFile' 
cache_options(:path => "#{ENV['HOME']}/.chef/checksums") 
cookbook_path   ["#{current_dir}/../cookbooks"] 
ssl_verify_mode   :verify_none 
+0

Могу ли я спросить, что _should_ это выглядит? –

+0

Проблемная область ': project => project == 'ost'? '': project' – OK999

ответ

1

Я считаю, что вам нужно добавить круглые скобки.

:project => (project == 'ost' ? '' : project) 

Но я бы предпочел:

:project => project unless project == 'ost' 
Смежные вопросы