<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 使用虛擬資源 什么是虛擬資源(Virtual Resource),我們為什么需要它們? 下面我們來看一個可能會使用虛擬資源的典型例子。 你負責管理 facesquare 和 twitstagram 兩個應用程序,他們都是運行在 Apache 上的 Web 應用程序。 facesquare 的定義看起來可能像這樣: ``` class app::facesquare { package { "apache2-mpm-worker": ensure => installed } } ``` twitstagram 的定義看起來可能像這樣: ``` class app::twitstagram { package { "apache2-mpm-worker": ensure => installed } } ``` 一切都很好,直到你需要將兩個應用程序同時應用到單臺服務器上: ``` node micawber { include app::facesquare include app::twitstagram } ``` 現在 Puppet 會出錯,因為你試圖用相同的名字 apache2-mpm-worker 定義兩個 package 資源。 錯誤輸出信息如下: ``` err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate definition: Package[apache2-mpm-worker] is already defined in file /etc/puppet/modules/app/manifests/facesquare.pp at line 2; cannot redefine at /etc/puppet/modules/app/manifests/twitstagram.pp:2 on node cookbook.bitfieldconsulting.com ``` 你可以從其中的一個類中移除重復的包定義,但是這樣話,如果試圖在另一個服務器包含 app 類時,就會因為沒有準備好 Apache 而失敗。 通過在自己的類中放置 Apache 的包資源并使用 include apache 包含它,你就可以解決這個問題, 因為 Puppet 不介意多次包含一個相同的類。但是這有一個缺點,即每個具有潛在沖突的資源都必須有它自己的類。 虛擬資源可以解決這個問題。虛擬資源就像是個普通的資源,特別之處在于它以 @ 字符開始,例如: ``` @package { "apache2-mpm-worker": ensure => installed } ``` 你可以把它看作是個 “FYI(僅供參考)” 資源:我只是告訴 Puppet 這個資源存在,但不希望用它做任何事情。 Puppet 將會讀取并記住虛擬資源定義,但實際上不會創建這個資源,直到你明確指出要創建此資源。 要創建這個資源,使用如下的 realize 函數: ``` realize( Package["apache2-mpm-worker"] ) ``` 對于你想要的資源,可以多次調用 realize 而且不會產生沖突。 因此,虛擬資源用于:當在幾個不同的類中都需要相同的資源,且它們可能會在相同的節點上共存的情況。 #### 操作步驟 1. 創建名為 app 的新模塊: ``` # mkdir -p /etc/puppet/modules/app/manifests ``` 2. 使用如下內容創建 /etc/puppet/modules/app/manifests/facesquare.pp 文件: ``` class app::facesquare { realize( Package["apache2-mpm-worker"] ) } ``` 3. 使用如下內容創建 /etc/puppet/modules/app/manifests/twitstagram.pp 文件: ``` class app::twitstagram { realize( Package["apache2-mpm-worker"] ) } ``` 4. 使用如下內容創建 /etc/puppet/modules/admin/manifests/virtualpackages.pp 文件: ``` class admin::virtual-packages { @package { "apache2-mpm-worker": ensure =&gt; installed } } ``` 5. 在一個節點上包含如下代碼: ``` node cookbook { include admin::virtual-packages include app::facesquare include app::twitstagram } ``` 6. 運行 Puppet。 #### 工作原理 你可以在 admin::virtual-packages 類中定義一個包的虛擬資源。 所有節點都可以包含這個類,并且你可以將所有虛擬資源都放在此類中。 這些虛擬資源都不會實際安裝到節點上,直到你調用 realize: ``` class admin::virtual-packages { @package { "apache2-mpm-worker": ensure => installed } } ``` 每個需要 Apache 包的類都可以對虛擬資源調用 realize : ``` class app::twitstagram { realize( Package["apache2-mpm-worker"] ) } ``` Puppet 知道如何處理它,因為你設置了相應的虛擬資源,你打算多次引用同一個包, 而不會意外地創建具有相同名子的兩個資源。所以,這正確地實現了我們的需求。 #### 更多用法 為了實現(realize)虛擬資源,你也可以使用 **collection** 語法: ``` Package <| title = "apache2-mpm-worker" |> ``` 使用這種語法的好處是,你不僅可以指定資源名,而且可以指定 tag,例如: ``` Package <| tag = "security" |> ``` 或者,你可以指定資源類型的所有實例,在查詢部分保留一個空格即可: ``` Package <| |> ``` #### 參見本書 * 本章的 [使用虛擬資源管理用戶](#ch06sec02) 一節
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看