2017-03-26 3 views
0

정책 파일을 사용하여 databag을 사용하여 환경 별 설정을 정의하는 방법을 실행하려고합니다.Databag에서 ​​정의한 환경 속성이 정책 파일과 함께 사용되었습니다.

나는 databag에서 ​​다음 databag 항목은 "ENV"라고했다 : 나는 내 레시피에 정의 된 다음 한

{ 
    "id": "enviornment_local", 
    "filename": "environment_local.json", 
    "efs": { 
     "database_mount": "fs-c2fa7d8b" 
    } 
} 

:

속성이에 포착되지 않는

environment = data_bag_item('env', "environment_#{Chef::Config.policy_group}") 
Chef::Mixin::DeepMerge.hash_only_merge!(node.role_default, environment) 

efs_database_mount = node['efs']['database_mount'] 
여기 코드 :

az = node['ec2']['placement_availability_zone'] 
region = az[0..-2] # trim last char 
file_system_id = efs_database_mount #'fs-c2fa7d8b' 
efs_uri = "#{az}.#{file_system_id}.efs.#{region}.amazonaws.com:/" 

오류 :

NoMethodError 
    ------------- 
    undefined method `[]' for nil:NilClass 

내가 잘못하고있는 것에 대한 아이디어가 있습니까?

답변

0

여러분이 셰프의 아주 오래된 버전을 사용하고 있지 않다면 처음에는 그룹 이름을 얻는 올바른 방법은 아마도 node.policy_group 일 것입니다. 다음 문제는 주문 방법에 따라 node.env_default으로 병합하는 것이 좋습니다. 여러분이 코드를 작성한 방법을 감안할 때, 저는 여러분이 저의 poise-hoist 라이브러리에 익숙하다는 것을 추측하고 있습니다. 나머지 예제들을 살펴보십시오.

그렇다면 정확히 어떤 줄이 예외를 제기하고 있습니까? 만약 값이 각 레벨에서 설정되는 방법 확인 node.debug_value을 사용할 수

require 'pp' 
# For node['foo']['bar'] 
pp node.debug_value('foo', 'bar') 
# Output 
[["set_unless_enabled?", false], 
["default", "attributes default"], 
["env_default", :not_present], 
["role_default", "role default"], 
["force_default", :not_present], 
["normal", "attributes normal"], 
["override", "attr override"], 
["role_override", "role override"], 
["env_override", :not_present], 
["force_override", :not_present], 
["automatic", :not_present]] 
+0

efs_database_mount = 노드 [ 'EFS'] [ 'database_mount'는 상기 예외를 제기한다. 나는 당신이 내가 Chef : Mixin :: DeepMerge.hash_only_merge (node.policy_group, environment) 또는 Chef : Mixin :: DeepMerge.hash_only_merge (node.env_default, environment)를 시도해야한다고 말하고 있다고 가정하고있다. 내가 이보다 더 똑똑해 보인 것처럼 보입니다 ... 저는 http://hedge-ops.com/policyfile-attributes/을 읽었습니다. 이것은 원래 값을 얻은 곳입니다. – TyMac

+0

정의 된 내용이 없습니다 ... [ "default", : not_present], [ "env_default", : not_present], [ "role_default", : not_present], [ "force_default" not_present] [ "정상": not_present] [ "재정": not_present] [ "role_override": not_present] [ "env_override": not_present] [ "force_override": [not_present], [ "자동", : not_present]] ... 벼락치기로 인해 유감스럽게 생각합니다 ... 어쩌면 나는 아직도이 포럼에서 회신하기로되어있는 방법을 모르겠다. lol – TyMac

+0

댓글이 없습니다. 읽을 수 있도록 편집을 통해 질문에 출력을 추가하십시오. – coderanger