Browse Source

Initial FreeBSD pkgng cookbook.

Douglas Thrift 10 years ago
commit
a5956e903e
12 changed files with 366 additions and 0 deletions
  1. 17 0
      .gitignore
  2. 27 0
      .kitchen.yml
  3. 3 0
      Berksfile
  4. 5 0
      Gemfile
  5. 13 0
      LICENSE
  6. 13 0
      README.md
  7. 12 0
      Thorfile
  8. 86 0
      Vagrantfile
  9. 96 0
      chefignore
  10. 59 0
      libraries/pkgng.rb
  11. 9 0
      metadata.rb
  12. 26 0
      recipes/default.rb

+ 17 - 0
.gitignore

@@ -0,0 +1,17 @@
+.vagrant
+Berksfile.lock
+*~
+*#
+.#*
+\#*#
+.*.sw[a-z]
+*.un~
+/cookbooks
+
+# Bundler
+Gemfile.lock
+bin/*
+.bundle/*
+
+.kitchen/
+.kitchen.local.yml

+ 27 - 0
.kitchen.yml

@@ -0,0 +1,27 @@
+---
+driver_plugin: vagrant
+driver_config:
+  require_chef_omnibus: true
+
+platforms:
+- name: ubuntu-12.04
+  driver_config:
+    box: opscode-ubuntu-12.04
+    box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-12.04_provisionerless.box
+- name: ubuntu-10.04
+  driver_config:
+    box: opscode-ubuntu-10.04
+    box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-10.04_provisionerless.box
+- name: centos-6.4
+  driver_config:
+    box: opscode-centos-6.4
+    box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-6.4_provisionerless.box
+- name: centos-5.9
+  driver_config:
+    box: opscode-centos-5.9
+    box_url: https://opscode-vm.s3.amazonaws.com/vagrant/opscode_centos-5.9_provisionerless.box
+
+suites:
+- name: default
+  run_list: ["recipe[pkgng]"]
+  attributes: {}

+ 3 - 0
Berksfile

@@ -0,0 +1,3 @@
+site :opscode
+
+metadata

+ 5 - 0
Gemfile

@@ -0,0 +1,5 @@
+source 'https://rubygems.org'
+
+gem 'berkshelf'
+gem 'test-kitchen', :group => :integration
+gem 'kitchen-vagrant', :group => :integration

+ 13 - 0
LICENSE

@@ -0,0 +1,13 @@
+Copyright (C) 2013 Douglas Thrift
+
+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.

+ 13 - 0
README.md

@@ -0,0 +1,13 @@
+# pkgng cookbook
+
+# Requirements
+
+# Usage
+
+# Attributes
+
+# Recipes
+
+# Author
+
+Author:: Douglas Thrift (<douglas@douglasthrift.net>)

+ 12 - 0
Thorfile

@@ -0,0 +1,12 @@
+# encoding: utf-8
+
+require 'bundler'
+require 'bundler/setup'
+require 'berkshelf/thor'
+
+begin
+  require 'kitchen/thor_tasks'
+  Kitchen::ThorTasks.new
+rescue LoadError
+  puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV['CI']
+end

+ 86 - 0
Vagrantfile

@@ -0,0 +1,86 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure("2") do |config|
+  # All Vagrant configuration is done here. The most common configuration
+  # options are documented and commented below. For a complete reference,
+  # please see the online documentation at vagrantup.com.
+
+  config.vm.hostname = "pkgng-berkshelf"
+
+  # Every Vagrant virtual environment requires a box to build off of.
+  config.vm.box = "Berkshelf-CentOS-6.3-x86_64-minimal"
+
+  # The url from where the 'config.vm.box' box will be fetched if it
+  # doesn't already exist on the user's system.
+  config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box"
+
+  # Assign this VM to a host-only network IP, allowing you to access it
+  # via the IP. Host-only networks can talk to the host machine as well as
+  # any other machines on the same network, but cannot be accessed (through this
+  # network interface) by any external networks.
+  config.vm.network :private_network, ip: "33.33.33.10"
+
+  # Create a public network, which generally matched to bridged network.
+  # Bridged networks make the machine appear as another physical device on
+  # your network.
+
+  # config.vm.network :public_network
+
+  # Create a forwarded port mapping which allows access to a specific port
+  # within the machine from a port on the host machine. In the example below,
+  # accessing "localhost:8080" will access port 80 on the guest machine.
+
+  # Share an additional folder to the guest VM. The first argument is
+  # the path on the host to the actual folder. The second argument is
+  # the path on the guest to mount the folder. And the optional third
+  # argument is a set of non-required options.
+  # config.vm.synced_folder "../data", "/vagrant_data"
+
+  # Provider-specific configuration so you can fine-tune various
+  # backing providers for Vagrant. These expose provider-specific options.
+  # Example for VirtualBox:
+  #
+  # config.vm.provider :virtualbox do |vb|
+  #   # Don't boot with headless mode
+  #   vb.gui = true
+  #
+  #   # Use VBoxManage to customize the VM. For example to change memory:
+  #   vb.customize ["modifyvm", :id, "--memory", "1024"]
+  # end
+  #
+  # View the documentation for the provider you're using for more
+  # information on available options.
+
+  config.ssh.max_tries = 40
+  config.ssh.timeout   = 120
+
+  # The path to the Berksfile to use with Vagrant Berkshelf
+  # config.berkshelf.berksfile_path = "./Berksfile"
+
+  # Enabling the Berkshelf plugin. To enable this globally, add this configuration
+  # option to your ~/.vagrant.d/Vagrantfile file
+  config.berkshelf.enabled = true
+
+  # An array of symbols representing groups of cookbook described in the Vagrantfile
+  # to exclusively install and copy to Vagrant's shelf.
+  # config.berkshelf.only = []
+
+  # An array of symbols representing groups of cookbook described in the Vagrantfile
+  # to skip installing and copying to Vagrant's shelf.
+  # config.berkshelf.except = []
+
+  config.vm.provision :chef_solo do |chef|
+    chef.json = {
+      :mysql => {
+        :server_root_password => 'rootpass',
+        :server_debian_password => 'debpass',
+        :server_repl_password => 'replpass'
+      }
+    }
+
+    chef.run_list = [
+        "recipe[pkgng::default]"
+    ]
+  end
+end

+ 96 - 0
chefignore

@@ -0,0 +1,96 @@
+# Put files/directories that should be ignored in this file when uploading
+# or sharing to the community site.
+# Lines that start with '# ' are comments.
+
+# OS generated files #
+######################
+.DS_Store
+Icon?
+nohup.out
+ehthumbs.db
+Thumbs.db
+
+# SASS #
+########
+.sass-cache
+
+# EDITORS #
+###########
+\#*
+.#*
+*~
+*.sw[a-z]
+*.bak
+REVISION
+TAGS*
+tmtags
+*_flymake.*
+*_flymake
+*.tmproj
+.project
+.settings
+mkmf.log
+
+## COMPILED ##
+##############
+a.out
+*.o
+*.pyc
+*.so
+*.com
+*.class
+*.dll
+*.exe
+*/rdoc/
+
+# Testing #
+###########
+.watchr
+.rspec
+spec/*
+spec/fixtures/*
+test/*
+features/*
+Guardfile
+Procfile
+
+# SCM #
+#######
+.git
+*/.git
+.gitignore
+.gitmodules
+.gitconfig
+.gitattributes
+.svn
+*/.bzr/*
+*/.hg/*
+*/.svn/*
+
+# Berkshelf #
+#############
+Berksfile
+Berksfile.lock
+cookbooks/*
+tmp
+
+# Cookbooks #
+#############
+CONTRIBUTING
+CHANGELOG*
+
+# Strainer #
+############
+Colanderfile
+Strainerfile
+.colander
+.strainer
+
+# Vagrant #
+###########
+.vagrant
+Vagrantfile
+
+# Travis #
+##########
+.travis.yml

+ 59 - 0
libraries/pkgng.rb

@@ -0,0 +1,59 @@
+#
+# Cookbook Name:: pkgng
+# Library:: pkgng
+#
+# Copyright (C) 2013 Douglas Thrift
+# 
+# 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.
+#
+
+require 'chef/provider/package/freebsd'
+require 'chef/platform'
+
+class Chef
+  class Provider
+    class Package
+      class Pkgng < Freebsd
+        def current_installed_version
+          pkg_info = shell_out!("pkg info -q #{package_name}", :env => nil, :returns => [0, 70])
+          pkg_info.stdout[/^#{package_name}-(.*)/, 1]
+        end
+
+        def install_package(name, version)
+          unless @current_resource.version
+            case @new_resource.source
+            when 'ports'
+              super(name, version)
+            when /^http/, /^ftp/
+              if @new_resource.source =~ /\/$/
+                shell_out!("pkg install -y #{package_name}", :env => {'PACKAGESITE' => @new_resource.source, 'LC_ALL' => nil}).status
+              else
+                shell_out!("pkg add #{@new_resource.source}/#{package_name}", :env => {'LC_ALL' => nil}).status
+              end
+              Chef::Log.debug("#{@new_resource} installed from: #{@new_resource.source}")
+            when /^\//
+              shell_out!("pkg add #{file_candidate_version_path}", :env => {'LC_ALL' => nil}).status
+              Chef::Log.debug("#{@new_resource} installed from: #{@new_resource.source}")
+            else
+              shell_out!("pkg install -y #{latest_link_name}", :env => nil).status
+            end
+          end
+        end
+
+        def remove_package(name, version)
+          shell_out!("pkg delete -y #{package_name}", :env => nil).status
+        end
+      end
+    end
+  end
+end

+ 9 - 0
metadata.rb

@@ -0,0 +1,9 @@
+name             'pkgng'
+maintainer       'Douglas Thrift'
+maintainer_email 'douglas@douglasthrift.net'
+license          'Apache 2.0'
+description      'Installs/Configures pkgng'
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version          '0.1.0'
+
+supports 'freebsd'

+ 26 - 0
recipes/default.rb

@@ -0,0 +1,26 @@
+#
+# Cookbook Name:: pkgng
+# Recipe:: default
+#
+# Copyright (C) 2013 Douglas Thrift
+# 
+# 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.
+#
+
+# TODO: bootstrap pkgng
+
+ruby_block 'set pkgng provider' do
+  block do
+    Chef::Platform.set :platform => :freebsd, :resource => :package => Chef::Provider::Package::Pkgng
+  end
+end