Chef 12.5 사용자 정의 리소스 - 레시피의 리소스에 액세스

Chef 12.5 사용자 정의 리소스 - 레시피의 리소스에 액세스

저는 Chef 12.5에 있는 사용자 정의 리소스를 사용하는 요리책을 작성 중입니다. 템플릿 리소스를 사용하는 사용자 지정 리소스가 있고알린다관련 서비스를 다시 로드합니다.

그러나 관련 서비스는 기본 레시피에서 관리됩니다. 현재는 서비스가 없다고 불평하므로 실패합니다.

이전 버전에서는 LWRP를 사용할 때 이 문제가 발생했습니다.use_inline_resources, LWRP에 이 기능을 포함하지 않으면 이 특정 문제를 피할 수 있다고 생각합니다.

이제 내 사용자 정의 리소스에 이 줄을 포함하지 않지만 동작은 존재합니다. 이 동작을 해제할 수 있는 방법이 있나요?

또는 여러 리소스에 서비스를 "포함"하여 여러 위치에서 똑같은 코드를 가질 필요가 없도록 하는 다른 방법이 있습니까?

답변1

delerious010의 답변을 바탕으로 나와 동료는 이 특정 상황에 대한 더 나은 해결 방법을 생각해 낼 수 있었습니다.

action :create do
  global_nginx = resources('service[nginx]')

  template "/etc/nginx/conf.d/#{name.tr(' ', '_')}.conf" do
    cookbook 'nginx_server'
    source 'server_block.conf.erb'
    owner 'root'
    group 'root'
    mode '0644'
    variables(
      listen: listen,
      server_name: real_server_name,
      root: root,
      index: index,
      config: config
    )
    notifies :reload, global_nginx, :delayed
  end
end

분명히 이 예에는 관리되는 리소스가 하나만 있지만 여러 개를 가질 수 있고 원하는 리소스에 대해서만 알릴 수 있습니다.

편집: 이는 버그에 의존한다는 점에 유의하십시오(https://github.com/chef/chef/issues/4669) Chef 개발자가 수정할 예정입니다. 12.9.38에서는 리소스 컬렉션에 대한 검색이 외부 run_contexts로 위쪽으로 재귀되도록 만들어졌기 때문에 이 코드는 계속 작동하지만 더 이상 필요하지 않습니다(그리고 루트에서 리소스를 가져와야 하는 경우 다중 중첩 하위 컨텍스트를 올바르게 처리합니다. 단지 부모 run_context). 여기서 가장 좋은 해결책은 업그레이드하는 것입니다.

답변2

Chef 12.5에서는 use_inline_resources가 기본적으로 켜져 있습니다. 이는 하위 리소스가 업데이트될 때마다 LWRP가 변경된 것으로 플래그 지정되는 효과가 있습니다. 따라서 항상 "상위" LWRP에 리소스 알림을 정의할 수 있습니다.

또는 LWRP의 모든 인스턴스에 대해notify 절을 정의하려면 언제든지 작업 블록에서 직접 알림을 만들 수 있습니다.

notifies_delayed(:restart, resources("service[rsyslog]"))

하지만 명심하세요.어느LWRP 내에서 리소스를 수정하면 서비스가 다시 시작됩니다. 하지만 리소스에 대한 호출을 사용하여 notifies하위 리소스에 대한 속성을 정의하는 것이 가능할 수도 있습니다 . 아직 테스트해보지 않았기 때문에 확실하지는 않습니다.

답변3

12.9.38에서는 하위 리소스 컬렉션/use_inline_resources 공급자에서 외부 리소스 컬렉션으로 알림을 보내는 기능이 다음과 같이 추가되었습니다.

https://github.com/chef/chef/commit/0ca27b6f30ccd327505bd3a44bd319fb3eba956b

이는 이제 알림의 기본 동작이므로 업그레이드만 하면 됩니다.

관련 정보