簡體   English   中英

僅當文件存在時才應停止puppet-service

[英]puppet-service should be stopped only if file exists

根據我的示例中的文檔,如果目標資源需求=> Exec ['checkForFile']成功應用,則將執行資源“服務x”。 僅當文件“ /etc/init.d/x”存在時,exec命令才會執行。

因此,當文件'/etc/init.d/x'不存在時,如果不執行目標資源,則不應執行Exec ['checkForFile']中的命令,並且應跳過資源“ service x”。

對我來說,資源服務x不能運行,這是正確的,但是同時我沒有收到任何錯誤或退出代碼1以顯示Exec ['checkForFile']運行失敗。 這是預期的行為嗎?

class test2::testcleanup (
         $target_location,
        )
        {
         service { 'x':
            ensure => stopped,
            restart => "service x restart",
            stop => "service x stop",
            status => "service x status",
            require => Exec['checkForFile'],
            before => [
              File["/etc/init.d/x"],
              File[ "remove_directory"],
            ],
          }

         exec { "checkForFile":
            command => "/bin/true",
            path    =>  ["/usr/bin","/usr/sbin", "/bin"],
            onlyif  => 'test -f /etc/init.d/x',
            logoutput => true, 
          }

        file {'/etc/init.d/x':
             ensure => absent,
        }

        file {'remove_directory':
           ensure => absent,
           path => $target_location,
           recurse => true,
           purge => true,
           force => true,
           }

    }

根據我的示例中的文檔,如果目標資源需求=> Exec ['checkForFile']成功應用,則將執行資源“服務x”。 僅當文件“ /etc/init.d/x”存在時,exec命令才會執行。

是的,如果未成功應用Exec['checkForFile']則不會應用Service['x']

因此,當文件'/etc/init.d/x'不存在時,不應執行Exec ['checkForFile']中的命令

是的,但這與未應用的Exec不同。

與其他任何資源一樣, Exec的模型目標計算機狀態,盡管在這種情況下,該狀態對於一個目錄運行的上下文而言是本地的。 通常將其描述為是否已運行Exec的命令,但最好以另一種方式來描述它,即是否需要運行 Exec的命令。 如果它處於“需要運行”狀態,則成功執行Exec的命令會將其轉換為“不需要運行”狀態。

unlessonlyifcreates Exec屬性用於確定相應物理(可以說)資源的初始狀態。 如果未提供任何資源,則物理資源最初將處於“需要運行”狀態。 如果提供了其中一個或多個,則它們可能指示Exec最初處於“不需要運行”狀態。 這就是目標狀態 那么,在這種情況下,無需執行命令即可成功應用Exec

如果未執行目標資源,則應跳過資源“服務x”。

否。如果應用Exec失敗,將跳過Service['x'] 僅當其命令運行並以失敗狀態退出時,這種情況才會發生。

例如,不要在您的Exec中使用onlyif ,而應使用'test ! -f /etc/init.d/x' 'test ! -f /etc/init.d/x'作為其command

對我來說,資源服務x不能運行,這是正確的,但是同時我沒有收到任何錯誤或退出代碼1以顯示Exec ['checkForFile']運行失敗。 這是預期的行為嗎?

也許。

對於您而言, Exec始終可以成功應用。 如果/etc/init.d/x存在,則運行/bin/true (成功)。 如果該文件不存在,則Exec將成功運行而不運行/bin/true Service['x']將以任何一種方式應用,但是如果物理服務已經處於其目標狀態(已停止),則Puppet將不會采取任何進一步的操作,並且默認情況下,該資源的任何內容都不會出現在其輸出中日志級別。 在代理中打開--debug日志記錄應該使情況更加清晰。


但是所有這些都是落后的。 Puppet並非旨在用作腳本引擎,並且不能像一個腳本引擎那樣運行良好。 確定機器的適當目標狀態所需的任何瞬時機器信息最好以事實的形式傳達給Puppet。 然后,您在目錄構建期間,基於這些事實和任何其他可用數據,確定要聲明的資源。

此外,最好最小化確定其目標狀態所需的當前機器狀態量。 最好將目標狀態與機器的身份相關聯,並在必要時根據不變特征(操作系統,硬件體系結構等)調整細節。 盡管此模型可能無法滿足所有需求,但通常足以滿足需要,否則它可以作為出色的基准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM