Làm cách nào để sao chép các repos riêng trong Vagrant VM, sử dụng các khóa SSH của máy chủ?


11

Tôi có thể sử dụng PuppetLabs vcsrepođể sao chép các repos git công khai, nhưng tôi cũng muốn có thể sao chép các repos riêng, sử dụng các khóa SSH của máy chủ.

Cấu hình sẽ trông như thế nào Vagrantfilevà / hoặc manifests/default.ppđể thực hiện điều này?

Câu trả lời:


10

Tôi không thể giúp với phần Puppet, nhưng bạn có thể chuyển tiếp Tác nhân SSH bằng cách cài đặt:

Vagrant.configure("2") do |config|
  config.ssh.forward_agent = true
  # ...
end

Bằng cách này, các kết nối SSH (cũng được tạo bởi git) cố gắng sử dụng các khóa riêng của bạn từ máy chủ lưu trữ.


Có một lỗi khiến điều này không hoạt động trên Windows trong hầu hết các trường hợp.
Chase Sandmann

@ChaseSandmann bạn có thể cung cấp thêm thông tin về lỗi không? Bạn có một liên kết đến vấn đề github? Tôi đã tìm thấy cái này nhưng tôi nghĩ nó không phải cái này vì nó có vẻ liên quan đến VirtualBox 5: github.com/mitchellh/vagrant/issues/6225
mastazi

5

Hoạt động trên máy của tôi!

Vagrantfile:

VAGRANTFILE_API_VERSION = '2'

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = 'precise64'
  config.vm.box_url = 'http://files.vagrantup.com/precise64.box'

  #
  # Use host authenticaton for git and maven.
  #
  # Ensure host private key is registered with host SSH agent:
  #
  # ssh-add -L
  # ssh-add ~/.ssh/id_rsa
  # ssh-add -L
  #

  config.ssh.private_key_path = ['~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa']
  config.ssh.forward_agent = true

  config.vm.synced_folder "~/.m2", "/home/vagrant/.m2"

  config.vm.provision :shell, path: 'upgrade-puppet.sh'

  # Install puppet modules
  config.vm.provision :shell, path: 'bootstrap.rb', args: %w(
    puppetlabs-stdlib
    puppetlabs/apt
    puppetlabs/vcsrepo
  )

  config.vm.provision :puppet do |puppet|
    puppet.options = ENV['PUPPET_OPTIONS']
  end
end

nâng cấp-puppet.sh:

#!/bin/bash

apt-get install --yes lsb-release > /dev/null
DISTRIB_CODENAME=$(lsb_release --codename --short)
DEB="puppetlabs-release-${DISTRIB_CODENAME}.deb"
DEB_PROVIDES="/etc/apt/sources.list.d/puppetlabs.list" # Assume that this file's existence means we have the Puppet Labs repo added

if [ ! -e $DEB_PROVIDES ]
then
    # Print statement useful for debugging, but automated runs of this will interpret any output as an error
    # print "Could not find $DEB_PROVIDES - fetching and installing $DEB"
    wget -q http://apt.puppetlabs.com/$DEB
    sudo dpkg -i $DEB
fi
sudo apt-get update > /dev/null
sudo apt-get install --yes puppet > /dev/null

mkdir -p /etc/puppet
touch /etc/puppet/hiera.yaml

bootstrap.sh:

#!/usr/bin/env ruby

modules_dir = '/etc/puppet/modules'

puts `mkdir -p #{modules_dir}` unless File::exists? modules_dir

mods = ARGV

installed = `puppet module list`.split "\n"

mods.each do |mod|
  puts `puppet module install #{mod}` unless installed.any? { |i| i.include?(mod.sub('/','-')) }
end

bảng kê khai / default.pp:

exec { 'ssh know github':
  command => 'ssh -Tv git@github.com -o StrictHostKeyChecking=no; echo Success',
  path    => '/bin:/usr/bin',
  user    => 'vagrant'
}

vcsrepo { '/home/vagrant/a-private-repo':
  ensure   => latest,
  provider => git,
  source   => 'git@github.com:mcandre/a-private-repo.git',
  user     => 'vagrant',
  owner    => 'vagrant',
  group    => 'vagrant',
  require  => Exec['ssh know github']
}

bootstrap.shcần bootstrap.rbphải làm việc này
Monkpit

2

Tôi biết bạn đang sử dụng Puppet nhưng tôi đã tải nó lên và chạy bằng tập lệnh bash này ( provisioners/shell/application.setup.sh):

#!/bin/bash

local_user=vagrant

if [ ! -n "$(grep "^bitbucket.org " /home/$local_user/.ssh/known_hosts)" ]; then 
    ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null;
fi

if [[ ! -d "/home/$local_user/app" ]]; then
    git clone git@bitbucket.org:czerasz/some-app.git /home/$local_user/app

    chown -R $local_user:$local_user /home/$local_user/app

    su - $local_user -c "source /usr/local/bin/virtualenvwrapper.sh && mkvirtualenv some-env && workon some-env && pip install -r /home/$local_user/app/requirements.txt"
fi

Người ta có thể dễ dàng chuyển đổi nó thành một bản kê khai con rối ...

Cùng với điều này Vagrantfile

config.vm.define "web1", primary: true do |web1_config|
    web1_config.ssh.forward_agent = true

    # Create a private network, which allows host-only access to the machine
    web1_config.vm.network "private_network", ip: "192.168.11.10"
    web1_config.vm.hostname = "web1.#{domain}"

    web1_config.vm.provision "shell", path: "provisioners/shell/python.setup.sh"
    web1_config.vm.provision "shell", path: "provisioners/shell/application.setup.sh"
end

Điểm mấu chốt đối với tôi là khi tôi thực hiện:

su - $local_user -c "ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts 2>/dev/null;"
su - $local_user -c "git clone git@bitbucket.org:czerasz/some-app.git /home/$local_user/app"

Nó không thành công. Như thể các phím không được sử dụng su. Vì vậy, tôi đã nhân bản repo là root và sau đó thay đổi quyền sở hữu.

Bài đăng này rất hữu ích.


Mate ..... Tôi tìm thấy một loạt các bài viết khá hữu ích xung quanh điều này cho đến khi bạn. Chúc mừng !!!
Eric Hodonsky
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.