<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國際加速解決方案。 廣告
                ### 使用純 Ruby 代碼書寫配置清單 你會說西班牙語嗎?學習一門語言可能會很有趣,但并非所有人都想這么做。 Puppet 有時會因為它使用自己專用的配置語言而不是現存的通用語言(如 Ruby)書寫配置清單而遭到批評。 不是每個人都認為這是個缺點。計算機科學家 Dennis Ritchie 說: > A language that doesn’t have everything is actually easier to program in than some that do. > > — Dennis Ritchie 無論你是什么觀點,這種批評已不再適用。因為 Puppet 已經擁有了使用 Ruby 語言書寫配置清單的實驗性支持,這在生產環境上是相當有用的,即使還處于早期開發階段。 在你的配置清單中可以混合使用兩種語言,Puppet 以文件擴展名進行區別,擴展名 .rb 表示用 Ruby 語言書寫的配置清單文件,而擴展名 .pp 表示 Puppet 專用的配置語言文件。 為了書寫配置清單使用的 Ruby 的 **特定領域語言**(**domain-specific language,DSL**) 看上去與標準的 Puppet 語言非常相似。 在下面的例子中,我將向你展示如何將典型的 Puppet 配置清單轉換成 Ruby 的。 Puppet 語法的原始配置清單如下: ``` class admin::exim { package { "exim4": ensure => installed } service { "exim4": ensure => running, require => Package["exim4"], } file { "/etc/exim4/exim4.conf": content => template("admin/exim4.conf"), notify => Service["exim4"], require => Package["exim4"], } } ``` #### 操作步驟 1. 使用如下內容創建 /etc/puppet/modules/admin/manifests/exim.rb 文件: ``` hostclass "admin::exim" do package "exim4", :ensure =&gt; :installed service "exim4", :ensure =&gt; :running, :require =&gt; "Package[exim4]" file "/etc/exim4/exim4.conf", :content =&gt; template(["admin/exim4.conf"]), :notify =&gt; "Service[exim4]", :require =&gt; "Package[exim4]" end ``` 2. 在一個節點中包含這個類并運行 Puppet。 #### 工作原理 1. 關鍵字 hostclass 聲明一個類,就像 Puppet 中的 class:hostclass admin::exim do 2. 然后跟一個 do … end 語句塊,這相當于 Puppet 的一對大括號。 3. 通過在資源類型后調用函數來聲明資源: 例如 package 或 service:package "exim4", :ensure =&gt; :installed 4. 傳遞給函數的參數是一個用逗號分割的列表,參數必須要用雙引號括起來, 或者在參數前使用前導的冒號使其成為 Ruby symbol 對象: :ensure =&gt; :running, 又如,像 :installed 或 :running 這樣的 Puppet 內置名字都是 Ruby 的 symbol 對象。 | ![注記](https://box.kancloud.cn/2016-05-12_5733eec619643.png) | 譯者注 有關 Ruby Symbol 的詳細介紹請參考: [http://www.ibm.com/developerworks/cn/opensource/os-cn-rubysbl/](http://www.ibm.com/developerworks/cn/opensource/os-cn-rubysbl/) | 5. 當我們需要引用資源來表示相互關系時,就要使用 :require, 資源標識符通過首字母大寫的資源類型跟上寫在一對方括號中的資源名給出,例如: require =&gt; "Package[exim4]" 在調用像模板這樣的函數時可以使用函數名跟一對圓括號,在圓括號中傳遞的參數是 一對用方括號聲明的數組,例如::content =&gt; template(["admin/exim4.conf"]),。 #### 更多用法 Ruby DSL 尚處于早期開發階段。試驗雖然有趣,除非你有使用 Ruby 的令人信服的理由否則先別用它, 至今我仍舊使用標準的 Puppet 語言。或許將來 Ruby DSL 會被廣泛應用,但在此期間, 你會發現沒有它的生活會更輕松。然而,若你堅持要使用它,下面介紹幾個非常有用的提示。 ##### 變量 當你像常規的 Ruby 程序一樣使用 Ruby 變量時,可以使用 scope.lookupvar 訪問你的 Puppet 變量,例如: ``` notice( "I am running on node %s" % scope.lookupvar("fqdn") ) ``` 將得到: ``` notice: I am running on node cookbook.bitfieldconsulting.com ``` 要在你的 Puppet 配置清單范圍內設置變量,使用 scope.setvar,例如: ``` require 'time' scope.setvar("now", Time.now) notice( "At the third stroke, the time sponsored by Bitfield Consulting will be: %s" % scope.lookupvar("now") ) ``` 上面的代碼將獲得如下結果: ``` notice: At the third stroke, the time sponsored by Bitfield Consulting will be: Wed Mar 23 05:58:16 -0600 2011 ``` ##### 文檔 你可以在 Puppet Labs 網站找到更多如何使用 Ruby DSL 的詳細資料,包括諸如 **virtual resources** 和 **collections** 這樣的高級主題: [http://projects.puppetlabs.com/projects/1/wiki/Ruby_Dsl](http://projects.puppetlabs.com/projects/1/wiki/Ruby_Dsl) 。 Ken Barber 提供了一些語法例子,并對 Puppet 語法和 Ruby DSL 結構做了比較,網址在 [https://github.com/bobsh/puppet-rubydsl-examples](https://github.com/bobsh/puppet-rubydsl-examples) 。 最后,James Turnbull 發布過一篇 blog, 展示了使用 Ruby 連接 MySQL 服務器的高級方法: [http://www.puppetlabs.com/blog/using-ruby-inthe-puppet-ruby-dsl/](http://www.puppetlabs.com/blog/using-ruby-inthe-puppet-ruby-dsl/) 。
                  <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>

                              哎呀哎呀视频在线观看