Parent

Class/Module Index [+]

Quicksearch

Chef::Knife::CookbookCreate

Public Instance Methods

create_changelog(dir, cookbook_name) click to toggle source
# File lib/chef/knife/cookbook_create.rb, line 183
def create_changelog(dir, cookbook_name)
  msg("** Creating CHANGELOG for cookbook: #{cookbook_name}")
  unless File.exists?(File.join(dir,cookbook_name,'CHANGELOG.md'))
    open(File.join(dir, cookbook_name, 'CHANGELOG.md'),'w') do |file|
      file.puts # CHANGELOG for #{cookbook_name}This file is used to list changes made in each version of #{cookbook_name}.## 0.1.0:* Initial release of #{cookbook_name}- - -Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown.The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown.
    end
  end
end
create_cookbook(dir, cookbook_name, copyright, license) click to toggle source
# File lib/chef/knife/cookbook_create.rb, line 82
def create_cookbook(dir, cookbook_name, copyright, license)
  msg("** Creating cookbook #{cookbook_name}")
  FileUtils.mkdir_p "#{File.join(dir, cookbook_name, "attributes")}"
  FileUtils.mkdir_p "#{File.join(dir, cookbook_name, "recipes")}"
  FileUtils.mkdir_p "#{File.join(dir, cookbook_name, "definitions")}"
  FileUtils.mkdir_p "#{File.join(dir, cookbook_name, "libraries")}"
  FileUtils.mkdir_p "#{File.join(dir, cookbook_name, "resources")}"
  FileUtils.mkdir_p "#{File.join(dir, cookbook_name, "providers")}"
  FileUtils.mkdir_p "#{File.join(dir, cookbook_name, "files", "default")}"
  FileUtils.mkdir_p "#{File.join(dir, cookbook_name, "templates", "default")}"
  unless File.exists?(File.join(dir, cookbook_name, "recipes", "default.rb"))
    open(File.join(dir, cookbook_name, "recipes", "default.rb"), "w") do |file|
      file.puts ## Cookbook Name:: #{cookbook_name}# Recipe:: default## Copyright #{Time.now.year}, #{copyright}#
      case license
      when "apachev2"
        file.puts # Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at##     http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.#
      when "gplv2"
        file.puts # This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License along# with this program; if not, write to the Free Software Foundation, Inc.,# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.#
      when "gplv3"
        file.puts # This program is free software: you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation, either version 3 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program.  If not, see <http://www.gnu.org/licenses/>.#
      when "mit"
        file.puts # Permission is hereby granted, free of charge, to any person obtaining# a copy of this software and associated documentation files (the# "Software"), to deal in the Software without restriction, including# without limitation the rights to use, copy, modify, merge, publish,# distribute, sublicense, and/or sell copies of the Software, and to# permit persons to whom the Software is furnished to do so, subject to# the following conditions:## The above copyright notice and this permission notice shall be# included in all copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.#
      when "none"
        file.puts # All rights reserved - Do Not Redistribute#
      end
    end
  end
end
create_metadata(dir, cookbook_name, copyright, email, license, readme_format) click to toggle source
# File lib/chef/knife/cookbook_create.rb, line 401
def create_metadata(dir, cookbook_name, copyright, email, license, readme_format)
  msg("** Creating metadata for cookbook: #{cookbook_name}")

  license_name = case license
                 when "apachev2"
                   "Apache 2.0"
                 when "gplv2"
                   "GNU Public License 2.0"
                 when "gplv3"
                   "GNU Public License 3.0"
                 when "mit"
                   "MIT"
                 when "none"
                   "All rights reserved"
                 end

  unless File.exists?(File.join(dir, cookbook_name, "metadata.rb"))
    open(File.join(dir, cookbook_name, "metadata.rb"), "w") do |file|
      if File.exists?(File.join(dir, cookbook_name, "README.#{readme_format}"))
        long_description = "long_description IO.read(File.join(File.dirname(__FILE__), 'README.#{readme_format}'))"
      end
      file.puts name             '#{cookbook_name}'maintainer       '#{copyright}'maintainer_email '#{email}'license          '#{license_name}'description      'Installs/Configures #{cookbook_name}'#{long_description}version          '0.1.0'
    end
  end
end
create_readme(dir, cookbook_name, readme_format) click to toggle source
# File lib/chef/knife/cookbook_create.rb, line 205
def create_readme(dir, cookbook_name, readme_format)
  msg("** Creating README for cookbook: #{cookbook_name}")
  unless File.exists?(File.join(dir, cookbook_name, "README.#{readme_format}"))
    open(File.join(dir, cookbook_name, "README.#{readme_format}"), "w") do |file|
      case readme_format
      when "rdoc"
        file.puts = #{cookbook_name} CookbookTODO: Enter the cookbook description here.e.g.This cookbook makes your favorite breakfast sandwhich.== RequirementsTODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc.e.g.==== packages- +toaster+ - #{cookbook_name} needs toaster to brown your bagel.== AttributesTODO: List you cookbook attributes here.e.g.==== #{cookbook_name}::default<table>  <tr>    <th>Key</th>    <th>Type</th>    <th>Description</th>    <th>Default</th>  </tr>  <tr>    <td><tt>['#{cookbook_name}']['bacon']</tt></td>    <td>Boolean</td>    <td>whether to include bacon</td>    <td><tt>true</tt></td>  </tr></table>== Usage==== #{cookbook_name}::defaultTODO: Write usage instructions for each cookbook.e.g.Just include +#{cookbook_name}+ in your node's +run_list+:    {      "name":"my_node",      "run_list": [        "recipe[#{cookbook_name}]"      ]    }== ContributingTODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.e.g.1. Fork the repository on Github2. Create a named feature branch (like `add_component_x`)3. Write you change4. Write tests for your change (if applicable)5. Run the tests, ensuring they all pass6. Submit a Pull Request using Github== License and AuthorsAuthors: TODO: List authors
      when "md","mkd","txt"
        file.puts #{cookbook_name} Cookbook#{'='*"#{cookbook_name} Cookbook".length}TODO: Enter the cookbook description here.e.g.This cookbook makes your favorite breakfast sandwhich.Requirements------------TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc.e.g.#### packages- `toaster` - #{cookbook_name} needs toaster to brown your bagel.Attributes----------TODO: List you cookbook attributes here.e.g.#### #{cookbook_name}::default<table>  <tr>    <th>Key</th>    <th>Type</th>    <th>Description</th>    <th>Default</th>  </tr>  <tr>    <td><tt>['#{cookbook_name}']['bacon']</tt></td>    <td>Boolean</td>    <td>whether to include bacon</td>    <td><tt>true</tt></td>  </tr></table>Usage-----#### #{cookbook_name}::defaultTODO: Write usage instructions for each cookbook.e.g.Just include `#{cookbook_name}` in your node's `run_list`:```json{  "name":"my_node",  "run_list": [    "recipe[#{cookbook_name}]"  ]}```Contributing------------TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.e.g.1. Fork the repository on Github2. Create a named feature branch (like `add_component_x`)3. Write you change4. Write tests for your change (if applicable)5. Run the tests, ensuring they all pass6. Submit a Pull Request using GithubLicense and Authors-------------------Authors: TODO: List authors
      else
        file.puts #{cookbook_name} Cookbook#{'='*"#{cookbook_name} Cookbook".length}  TODO: Enter the cookbook description here.  e.g.  This cookbook makes your favorite breakfast sandwhich.Requirements  TODO: List your cookbook requirements. Be sure to include any requirements this cookbook has on platforms, libraries, other cookbooks, packages, operating systems, etc.  e.g.  toaster         #{cookbook_name} needs toaster to brown your bagel.Attributes  TODO: List you cookbook attributes here.  #{cookbook_name}  Key                                   Type        Description                           Default  ['#{cookbook_name}']['bacon']         Boolean     whether to include bacon              trueUsage  #{cookbook_name}  TODO: Write usage instructions for each cookbook.  e.g.  Just include `#{cookbook_name}` in your node's `run_list`:  [code]  {    "name":"my_node",    "run_list": [      "recipe[#{cookbook_name}]"    ]  }  [/code]Contributing  TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.  e.g.  1. Fork the repository on Github  2. Create a named feature branch (like `add_component_x`)  3. Write you change  4. Write tests for your change (if applicable)  5. Run the tests, ensuring they all pass  6. Submit a Pull Request using GithubLicense and Authors  Authors: TODO: List authors
      end
    end
  end
end
run() click to toggle source
# File lib/chef/knife/cookbook_create.rb, line 58
def run
  self.config = Chef::Config.merge!(config)
  if @name_args.length < 1
    show_usage
    ui.fatal("You must specify a cookbook name")
    exit 1
  end

  if default_cookbook_path_empty? && parameter_empty?(config[:cookbook_path])
    raise ArgumentError, "Default cookbook_path is not specified in the knife.rb config file, and a value to -o is not provided. Nowhere to write the new cookbook to."
  end

  cookbook_path = File.expand_path(Array(config[:cookbook_path]).first)
  cookbook_name = @name_args.first
  copyright = config[:cookbook_copyright] || "YOUR_COMPANY_NAME"
  email = config[:cookbook_email] || "YOUR_EMAIL"
  license = ((config[:cookbook_license] != "false") && config[:cookbook_license]) || "none"
  readme_format = ((config[:readme_format] != "false") && config[:readme_format]) || "md"
  create_cookbook(cookbook_path, cookbook_name, copyright, license)
  create_readme(cookbook_path, cookbook_name, readme_format)
  create_changelog(cookbook_path, cookbook_name)
  create_metadata(cookbook_path, cookbook_name, copyright, email, license, readme_format)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.