diff --git a/.gitignore b/.gitignore index a19b1a0..4a95451 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ bin/* .bundle/* .DS_Store coverage/ + +.kitchen/ +.kitchen.local.yml diff --git a/.kitchen.yml b/.kitchen.yml new file mode 100644 index 0000000..c5cdf70 --- /dev/null +++ b/.kitchen.yml @@ -0,0 +1,16 @@ +--- +driver: + name: vagrant + +provisioner: + name: chef_solo + +platforms: + - name: ubuntu-12.04 + - name: centos-6.4 + +suites: + - name: default + run_list: + - recipe[solrcloud::default] + attributes: diff --git a/.rspec b/.rspec index 8ada15f..e2adae8 100644 --- a/.rspec +++ b/.rspec @@ -1 +1,3 @@ ---format documentation --color --fail-fast +--color +--format progress +--fail-fast diff --git a/Berksfile b/Berksfile new file mode 100644 index 0000000..0ac9b78 --- /dev/null +++ b/Berksfile @@ -0,0 +1,3 @@ +source "https://supermarket.getchef.com" + +metadata diff --git a/Gemfile b/Gemfile index df7b2ba..7fe1ecc 100644 --- a/Gemfile +++ b/Gemfile @@ -5,6 +5,7 @@ gem 'berkshelf', '~> 3.1.4' gem 'chefspec', '~> 3.0' gem 'foodcritic', '~> 3.0' gem 'rubocop', '~> 0.24' +gem 'berkshelf' # ohai attributes override gem 'fauxhai' @@ -24,3 +25,15 @@ group :development do gem 'knife-spork', '~> 1.0.17' gem 'knife-spec' end + +# Uncomment these lines if you want to live on the Edge: +# +# group :development do +# gem "berkshelf", github: "berkshelf/berkshelf" +# gem "vagrant", github: "mitchellh/vagrant", tag: "v1.6.3" +# end +# +# group :plugins do +# gem "vagrant-berkshelf", github: "berkshelf/vagrant-berkshelf" +# gem "vagrant-omnibus", github: "schisamo/vagrant-omnibus" +# end diff --git a/Rakefile b/Rakefile index efb86fc..a83f4e4 100644 --- a/Rakefile +++ b/Rakefile @@ -40,3 +40,10 @@ desc 'Run ChefSpec Test' puts 'Running ChefSpec Test' RSpec::Core::RakeTask.new(:spec) end + +begin + require 'kitchen/rake_tasks' + Kitchen::RakeTasks.new +rescue LoadError + puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV['CI'] +end diff --git a/Thorfile b/Thorfile new file mode 100644 index 0000000..b23ee16 --- /dev/null +++ b/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 diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..4f67c0e --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,88 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! +VAGRANTFILE_API_VERSION = "2" + +Vagrant.require_version ">= 1.5.0" + +Vagrant.configure(VAGRANTFILE_API_VERSION) 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 = "solrcloud-berkshelf" + + # Set the version of chef to install using the vagrant-omnibus plugin + config.omnibus.chef_version = :latest + + # Every Vagrant virtual environment requires a box to build off of. + # If this value is a shorthand to a box in Vagrant Cloud then + # config.vm.box_url doesn't need to be specified. + config.vm.box = "chef/ubuntu-14.04" + + # The url from where the 'config.vm.box' box will be fetched if it + # is not a Vagrant Cloud box and if it doesn't already exist on the + # user's system. + # config.vm.box_url = "https://vagrantcloud.com/chef/ubuntu-14.04/version/1/provider/virtualbox.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, type: "dhcp" + + # 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. + + # 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[solrcloud::default]" + ] + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..753adb3 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,22 @@ +# This file was generated by the `rspec --init` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# Require this file using `require "spec_helper"` to ensure that it is only +# loaded once. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration + +require 'rspec/expectations' +require 'chefspec' +require 'chefspec/berkshelf' + +RSpec.configure do |config| + config.treat_symbols_as_metadata_keys_with_true_values = true + config.run_all_when_everything_filtered = true + # config.filter_run :focus + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + # config.order = 'random' +end diff --git a/spec/unit/recipes/user_spec.rb b/spec/unit/recipes/user_spec.rb new file mode 100644 index 0000000..085246b --- /dev/null +++ b/spec/unit/recipes/user_spec.rb @@ -0,0 +1,33 @@ +# +# Cookbook Name:: solrcloud +# Recipe:: user +# +# Copyright 2014, Virender Khatri +# +# 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 'spec_helper' + +describe 'solrcloud::user' do + let(:chef_run) { ChefSpec::Runner.new(:platform => 'ubuntu', :version => '12.04').converge(described_recipe) } + + it 'adds group solr' do + expect(chef_run).to create_group('solr') + end + + it 'adds user solr' do + expect(chef_run).to create_user('solr') + end + +end