2013-05-23 3 views
2

저는 소프트웨어를 테스트하기 위해 주방장을 사용하고 있습니다. 따라서 상기 소프트웨어의 파일명 및 다운로드 위치는 속성으로서 전달 될 것이다.요리사의 속성을 프로그래밍 방식으로 재정의

테스트 절차의 일부로 운영 팀에서 사용하는 요리사 스크립트 및 요리법을 사용해야합니다. 그들은 환경 적 수준과 default.rb 요리 책 수준에서 문제의 가치를 지니고 있습니다. 그들은 REST API를 통해 요리사 해당 서버를 추가 & & OpenStack은 칼을 통해 VM 설정에 루비 스크립트를 사용 : 이상적으로 파일 이름과 위치는 명령 행 매개 변수로 파이썬 응용 프로그램에 전달 될

Chef::Config.from_file("/root/.chef/knife.rb") 
    rest = Chef::REST.new(CHEF_API) 
    newserver= 
     { 
      :name => server.hostname, 
      :chef_type => "node", 
      :chef_environment => server.environment, 
      :json_class => "Chef::Node", 
      :attributes => { 
      :cobbler_profile => server.profile 
      }, 
      :overrides => { 
      }, 
      :defaults => { 
      }, 
      :run_list => server.roles 
     } 

    begin 
     result = rest.post_rest("/nodes",newserver) 
     .... 

하고, 기존 노드 레벨 속성을 설정/재정의하려면 나이프 또는 pychef (또는 루비)를 사용하십시오.

서버를 추가하는 데 사용하는 방법은 다른 유사한 질문에서 본 옵션을 제외합니다. 내가

node = chef.Node('myNode') 
node.override['testSoftware']['downloads']['testSoftwareInstaller'] = 'http://location/of/download' 
node.save() 

그러나 node.override['testSoftware']['downloads']['testSoftwareInstaller'] 이후에 원래의 값을 반환 시도 (그리고 원래로 볼 수있다

하지만이 편집기의 사용을 필요로 .. -

나는 knife node edit을 시도 UI). 새 속성은이 방법으로 만 설정할 수 있지만 기존 항목을 편집/덮어 쓸 수는 없습니다.

나는 environment.json 파일을 동적으로 생성하는 것을 고려하고 있지만, 어떤 작업이 사용하고있는 것에서 벗어나지 않는 것을 선호합니다.

아이디어가 있으십니까?

답변

1

저는 요리사에게 아주 익숙하며 아마 3 년 후에도 필요 없을 것입니다.하지만 ... node.override['attribute'] 대신 node['override']['attribute']을 사용해야한다고 생각합니다. 전자는 값을 설정하기위한 것이고 후자는 값을 얻기위한 것입니다.

저는 이것이 요리사를 파이썬과 함께 사용하지 않았기 때문에 작동한다는 말은 아닙니다만, 그것이 작동하는 방식이라고 생각합니다.