<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 使用類的繼承和重載 正如節點可以從其他節點繼承一樣,這可以為相似的節點復制很多代碼, 同樣的思想也可以用于類。 例如,假設你有一個管理 Apache Web 服務器的 apache 類, 你想要使用略有不同的配置文件設置一臺新的 Apache 機器?—?也許是監聽的端口不同。 你可以復制整個 apache 類,除了配置文件。另外,你可以從 apache 類中提取配置文件并創建兩個新類,每個新類都包含 apache 基類并添加一個新版本的配置文件。 一個更簡潔的做法是從 apache 類繼承,而后僅覆蓋其配置文件。 #### 準備工作 1. 為新的 apache 模塊創建目錄結構: ``` # mkdir /etc/puppet/modules/apache # mkdir /etc/puppet/modules/apache/manifests # mkdir /etc/puppet/modules/apache/files ``` 2. 使用如下代碼創建 /etc/puppet/modules/apache/manifests/init.pp 文件: ``` class apache { package { "apache2-mpm-worker": ensure =&gt; installed } service { "apache2": enable =&gt; true, ensure =&gt; running, require =&gt; Package["apache2-mpm-worker"], } file { "/etc/apache2/ports.conf": source =&gt; "puppet:///modules/apache/port80.conf.apache", notify =&gt; Service["apache2"], } } ``` 3. 若 Apache 軟件包還未安裝,安裝它,復制其包含的文件 ports.conf 到 Puppet: ``` # apt-get install apache2-mpm-worker # cp /etc/apache2/ports.conf \ /etc/puppet/modules/apache/files/port80.conf.apache ``` 4. 添加 apache 類到一個節點,例如: ``` node cookbook { include apache } ``` 5. 運行 Puppet 驗證配置清單是否正常工作。 #### 操作步驟 1. 創建 port80.conf.apache 文件的一個新版本 port8000.conf.apache,并做如下改動: ``` NameVirtualHost *:8000 Listen 8000 ``` 2. 使用如下內容創建一個新文件 /etc/puppet/modules/apache/manifests/port8000.pp: ``` class apache::port8000 inherits apache { File["/etc/apache2/ports.conf"] { source =&gt; "puppet:///modules/apache/port8000.conf.apache", } } ``` 3. 改變你的節點配置,使其包含 apache::port8000 類而不是 apache 類: ``` node cookbook { include apache::port8000 } ``` 4. 運行 Puppet 檢查它是否會按照要求的那樣發生改變: ``` # puppet agent --test info: Retrieving plugin info: Caching catalog for cookbook.bitfieldconsulting.com info: Applying configuration version '1302970905' --- /etc/apache2/ports.conf 2010-11-18 14:16:23.000000000 -0700 +++ /tmp/puppet-file20110416-6165-pzeivi-0 2011-04-16 10:21:47.204294334 -0600 @@ -5,8 +5,8 @@ # Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and # README.Debian.gz -NameVirtualHost *:80 -Listen 80 +NameVirtualHost *:8000 +Listen 8000 &lt;IfModule mod_ssl.c&gt; # If you add NameVirtualHost *:443 here, you will also have to change info: FileBucket adding /etc/apache2/ports.conf as {md5}38b31d2032 6f3640a8dfbe1ff5d1c4ad info: /Stage[main]/Apache/File[/etc/apache2/ports.conf]: Filebucketed /etc/apache2/ports.conf to puppet with sum 38b31d20326f3640a8dfbe1ff5d1c4ad notice: /Stage[main]/Apache/File[/etc/apache2/ports.conf]/content: content changed '{md5}38b31d20326f3640a8dfbe1ff5d1c4ad' to '{md5}4 1d9d446f779c55f13c5fe5a7477d943' info: /Stage[main]/Apache/File[/etc/apache2/ports.conf]: Scheduling refresh of Service[apache2] notice: /Stage[main]/Apache/Service[apache2]: Triggered 'refresh' from 1 events notice: Finished catalog run in 4.85 seconds ``` #### 工作原理 讓我們再看看這個新類: ``` class apache::port8000 inherits apache { File["/etc/apache2/ports.conf"] { source => "puppet:///modules/apache/port8000.conf.apache", } } ``` 你可以從類名后看出,此類繼承(inherits)自 apache 類。這將創建一個與 apache 類完全相同的副本,除了跟隨其后的變化。 如下的代碼片段: ``` File["/etc/apache2/ports.conf"] { ``` 指定了我們想要改變父類中名為 /etc/apache2/ports.conf 的 file 資源 (注意 File 是首字母大寫的,這意味著,我們指的是現有的資源,而不是定義一個新資源)。 如下的代碼片段: ``` source => "puppet:///modules/apache/port8000.conf.apache", ``` 意味著我們將使用一個新的值覆蓋父類中 source 資源的參數值。 如果我們復制整個 apache 類的定義并改變資源 source 的值,那么結果將是完全一樣的: ``` class apache { package { "apache2-mpm-worker": ensure => installed } service { "apache2": enable => true, ensure => running, require => Package["apache2-mpm-worker"], } file { "/etc/apache2/ports.conf": source => "puppet:///modules/apache/port8000.conf.apache", notify => Service["apache2"], } } ``` #### 更多用法 首先覆蓋被繼承的類看上去有些復雜。然而一旦你掌握了這種思想,就會發現這實際上很簡單。 這是一種使你的配置清單更具可讀性的強大方式,因為這樣消除了大量的重復代碼, 使你僅專注于編寫不同的代碼部分。下面給出幾種使用覆蓋的方法。 ##### 取消參數的定義 有時候你不想改變一個參數的值,只是想完全移除它的值。 為了實現這一點,可以使用 undef 值覆蓋原有值。 其結果就像是此參數從未在先前定義過一樣。 ``` class apache::norestart inherits apache { File["/etc/apache2/ports.conf"] { notify => undef, } } ``` ##### 使用 +&gt; 操作符添加額外的值 與替換一個值類似,你可能想要在父類定義的基礎上添加更多的值。 使用 **plusignment** 操作符 +&gt; 可以實現這一功能: ``` class apache::ssl inherits apache { file { "/etc/ssl/certs/cookbook.pem": source => "puppet:///modules/apache/cookbook.pem", } Service["apache2"] { require +> File["/etc/ssl/certs/cookbook.pem"], } } ``` 操作符 +&gt; 在父類定義的值的基礎上添加一個值(或使用方括號括起來的一個數組)。 對于上面的例子,我們最終得到的代碼相當于: ``` service { "apache2": enable => true, ensure => running, require => [ Package["apache2-mpm-worker"], File["/etc/ssl/certs/ cookbook.pem"] ], } ``` ##### 禁用資源 繼承和覆蓋最常見的用途之一就是禁用服務或其他資源: ``` class apache::disabled inherits apache { Service["apache2"] { enable => false, ensure => stopped, } } ``` #### 參見本書 * 第 4 章的 [使用節點繼承](#ch04sec04) 一節 * 第 4 章的 [給類傳遞參數](#ch04sec06) 一節 * 第 3 章的 [使用標準的命名規范](#ch03sec03) 一節
                  <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>

                              哎呀哎呀视频在线观看