diff --git a/bin/dots.rb b/bin/dots.rb index 71a1b45..ee7e668 100755 --- a/bin/dots.rb +++ b/bin/dots.rb @@ -24,20 +24,7 @@ if OS.windows? puts 'It seems you are on Windows' elsif OS.mac? - stdout, _stderr, _status = Open3.capture3('sw_vers -productVersion') - if Integer(stdout.strip.split('.')[0]) == 10 - if Integer(stdout.strip.split('.')[1]) >= 12 - puts "It seems you are on macOS #{stdout.strip}" - else - puts "It seems you are on OX X #{stdout.strip}" - end - - elsif Integer(stdout.strip.split('.')[0]) < 10 - puts "Wow... you're sure running an old os (#{stdout.strip} to be exact)" - else - abort("It seems you are on a Mac but I don't know what to do on \ - v#{stdout.strip}") - end + mac_vers @files_copy.concat Dir.glob("#{@dotroot}/copy/mac/*") @files_link.concat Dir.glob("#{@dotroot}/link/mac/*") @@ -56,6 +43,7 @@ when 'copy' @files_copy.each do |file| unless @excludes.include?(File.basename(file)) puts "Copying #{file} to #{@home}/.#{File.basename(file)}" + copy_file(file, "#{@home}/.#{File.basename(file)}") end end else @@ -78,12 +66,11 @@ when 'link' link_file(file, "#{@home}/.ssh/#{File.basename(file)}") end else - puts 'no linking' + puts 'not linking' end when 'install' if @prompt.yes?('Are you sure you want to install your base packages?') - puts 'Here is where Puppet should be run.' - cmd.run('bundle exec puppet --version') + cmd.run('bundle exec rake dots:run_puppet') end end diff --git a/bin/dotutils.rb b/bin/dotutils.rb index fbc0f4b..8a337b1 100644 --- a/bin/dotutils.rb +++ b/bin/dotutils.rb @@ -12,11 +12,32 @@ def existing_symlink(source, destination) # rubocop:enable Metrics/LineLength end -def rename_file(source, destination) +# rubocop:disable Metrics/MethodLength +def rename_file(source, destination, action) puts "#{destination} exists, renaming to #{destination}.predots" File.rename(destination, "#{destination}.predots") - puts "Linking #{destination} to #{source}" - File.symlink(source, destination) + if action.eql?('link') + puts "Linking #{destination} to #{source}" + File.symlink(source, destination) + elsif action.eql?('copy') + puts "Copying #{destination} to #{source}" + FileUtils.cp_r(source, destination) + else + raise ArgumentError, "'#{action}' is not a valid action", backtrace + end +end +# rubocop:enable Metrics/MethodLength + +def copy_file(source, destination) + if File.exist?(destination) + if @prompt.yes?("#{destination} exists, do you want to replace it?") + rename_file(source, destination, 'copy') + else + puts "#{destination} is unchanged" + end + else + FileUtils.cp_r(source, destination) + end end def link_file(source, destination) @@ -24,9 +45,28 @@ def link_file(source, destination) existing_symlink(source, destination) elsif File.exist?(destination) # this catches anything that is not a symlink - rename_file(source, destination) + rename_file(source, destination, 'link') else puts "Linking #{destination} to #{source}" File.symlink(source, destination) end end + +# rubocop:disable Metrics/MethodLength, Metrics/AbcSize +def mac_vers + stdout, _stderr, _status = Open3.capture3('sw_vers -productVersion') + if Integer(stdout.strip.split('.')[0]) == 10 + if Integer(stdout.strip.split('.')[1]) >= 12 + puts "It seems you are on macOS #{stdout.strip}" + else + puts "It seems you are on OX X #{stdout.strip}" + end + + elsif Integer(stdout.strip.split('.')[0]) < 10 + puts "Wow... you're sure running an old os (#{stdout.strip} to be exact)" + else + abort("It seems you are on a Mac but I don't know what to do on \ + v#{stdout.strip}") + end +end +# rubocop:enable Metrics/MethodLength, Metrics/AbcSize diff --git a/puppet/production/hiera.yaml b/puppet/production/hiera.yaml new file mode 100644 index 0000000..d438127 --- /dev/null +++ b/puppet/production/hiera.yaml @@ -0,0 +1,11 @@ +--- +version: 5 +defaults: # Used for any hierarchy level that omits these keys. + datadir : hieradata # This path is relative to hiera.yaml's directory. + data_hash : yaml_data # Use the built-in YAML backend. + +hierarchy: + - name: "Per-node data" + path: "nodes/%{trusted.certname}.yaml" + - name: "Common data" + path: "common.yaml" diff --git a/puppet/production/hieradata/nodes/Dawns-MacBook-Pro.local.yaml b/puppet/production/hieradata/nodes/Dawns-MacBook-Pro.local.yaml new file mode 100644 index 0000000..34847d5 --- /dev/null +++ b/puppet/production/hieradata/nodes/Dawns-MacBook-Pro.local.yaml @@ -0,0 +1,2 @@ +--- +homedir: '/Users/gliverma' diff --git a/puppet/production/hieradata/nodes/example-node.yaml b/puppet/production/hieradata/nodes/example-node.yaml deleted file mode 100644 index ed97d53..0000000 --- a/puppet/production/hieradata/nodes/example-node.yaml +++ /dev/null @@ -1 +0,0 @@ ---- diff --git a/puppet/production/site/profile/manifests/mac.pp b/puppet/production/site/profile/manifests/mac.pp index 124b740..1068736 100644 --- a/puppet/production/site/profile/manifests/mac.pp +++ b/puppet/production/site/profile/manifests/mac.pp @@ -8,6 +8,8 @@ class profile::mac { # creates => '/usr/local/bin/brew', # } + $homedir = lookup('homedir') + #Package { provider => 'homebrew' } $homebrew_packages = [ 'bash-completion', @@ -40,7 +42,12 @@ class profile::mac { ] package { $homebrew_packages: - ensure => installed, + ensure => 'installed', provider => 'brew', } + + vcsrepo { "${homedir}/.vim/bundle/Vundle.vim": + ensure => 'present', + provider => 'git', + } }