2020-09-25 06:15:06 +08:00
|
|
|
require 'json'
|
|
|
|
|
|
|
|
require "erb"
|
|
|
|
include ERB::Util
|
|
|
|
|
|
|
|
configuration = JSON.parse(File.read('./vagrant-configuration.json'))
|
|
|
|
|
|
|
|
server = {
|
|
|
|
:hostname => configuration['machine_name'],
|
|
|
|
:box => configuration['box_name'],
|
|
|
|
:box_version => configuration['box_version'],
|
|
|
|
:disk_size => configuration['disk_size'],
|
|
|
|
:ram => 12000,
|
|
|
|
:cpu => 5
|
|
|
|
}
|
|
|
|
|
|
|
|
brew_formulas = [
|
|
|
|
'autoconf',
|
|
|
|
'automake',
|
|
|
|
'bison',
|
|
|
|
'libtool',
|
|
|
|
'mono',
|
|
|
|
'pkg-config',
|
|
|
|
'yasm' ]
|
|
|
|
|
|
|
|
brew_cask_formulas = [
|
|
|
|
'powershell',
|
|
|
|
'gfortran' ]
|
|
|
|
|
|
|
|
azure_agent_url = 'https://vstsagentpackage.azureedge.net/agent/2.171.1/vsts-agent-osx-x64-2.171.1.tar.gz'
|
|
|
|
devops_url = configuration['devops_url']
|
|
|
|
agent_pool = configuration['agent_pool']
|
|
|
|
pat = configuration['pat']
|
|
|
|
archives = configuration['archives']
|
2020-09-30 07:49:49 +08:00
|
|
|
archives_username = archives['username']
|
|
|
|
archives_urn = archives['urn']
|
|
|
|
archives_path = archives['path']
|
2020-09-25 06:15:06 +08:00
|
|
|
|
|
|
|
Vagrant.configure('2') do |config|
|
|
|
|
# give them extra time to boot up
|
|
|
|
config.vm.boot_timeout = 600
|
|
|
|
|
|
|
|
config.vm.box = server[:box]
|
|
|
|
config.vm.box_version = server[:box_version]
|
|
|
|
config.vm.hostname = server[:hostname]
|
|
|
|
config.vm.synced_folder '.', '/vagrant', disabled: true
|
|
|
|
|
|
|
|
diskname = "#{server[:hostname]}-data.vmdk"
|
|
|
|
|
|
|
|
# I don't like this, but as far as I can tell, it's the only way
|
|
|
|
# to do this. When vagrant finishes the `disk` feature, switch
|
|
|
|
# over to that -- Nicole Mazzuca
|
|
|
|
if (not File.exists? diskname) then
|
|
|
|
system "VBoxManage createmedium --filename #{diskname} --size #{1024 * server[:disk_size]}"
|
|
|
|
end
|
|
|
|
|
|
|
|
config.vm.provider 'virtualbox' do |vb|
|
|
|
|
vb.memory = server[:ram]
|
|
|
|
vb.cpus = server[:cpu]
|
|
|
|
vb.customize ['modifyvm', :id, '--ioapic', 'on']
|
|
|
|
vb.customize ['storageattach', :id,
|
|
|
|
'--storagectl', 'SATA Controller',
|
|
|
|
'--port', '1', '--device', '0', '--type', 'hdd',
|
|
|
|
'--medium', "#{diskname}"
|
|
|
|
]
|
|
|
|
end
|
|
|
|
|
|
|
|
config.vm.provision 'shell',
|
|
|
|
run: 'once',
|
|
|
|
name: 'Format and mount the data filesystem',
|
|
|
|
inline: 'diskutil partitionDisk /dev/disk0 1 GPT jhfs+ data 0',
|
|
|
|
privileged: true
|
|
|
|
|
|
|
|
config.vm.provision 'shell',
|
|
|
|
run: 'once',
|
|
|
|
name: 'Link the data filesystem to the home directory',
|
|
|
|
inline: "ln -s /Volumes/data ~/Data",
|
|
|
|
privileged: false
|
|
|
|
|
|
|
|
config.vm.provision 'shell',
|
|
|
|
run: 'once',
|
|
|
|
name: 'Download azure agent',
|
|
|
|
inline: "curl -s -o ~/Downloads/azure-agent.tar.gz #{azure_agent_url}",
|
|
|
|
privileged: false
|
|
|
|
|
|
|
|
config.vm.provision 'shell',
|
|
|
|
run: 'once',
|
|
|
|
name: 'Unpack azure agent',
|
|
|
|
inline: 'mkdir myagent; cd myagent; tar xf ~/Downloads/azure-agent.tar.gz',
|
|
|
|
privileged: false
|
|
|
|
|
|
|
|
config.vm.provision 'shell',
|
|
|
|
run: 'once',
|
|
|
|
name: 'Install brew applications',
|
|
|
|
inline: "brew install #{brew_formulas.join(' ')} && brew cask install #{brew_cask_formulas.join(' ')}",
|
|
|
|
privileged: false
|
|
|
|
|
|
|
|
config.vm.provision 'shell',
|
|
|
|
run: 'once',
|
|
|
|
name: 'Create archives mountpoint',
|
|
|
|
inline: 'mkdir ~/Data/archives',
|
|
|
|
privileged: false
|
|
|
|
|
|
|
|
config.vm.provision "shell",
|
|
|
|
run: 'once',
|
|
|
|
name: 'Mount archives directory',
|
2020-09-30 07:49:49 +08:00
|
|
|
inline: "sshfs #{archives_username}@#{archives_urn}:#{archives_path} ~/Data/archives",
|
2020-09-25 06:15:06 +08:00
|
|
|
privileged: false
|
|
|
|
|
|
|
|
config.vm.provision 'shell',
|
|
|
|
run: 'once',
|
|
|
|
name: 'Add VM to azure agent pool',
|
|
|
|
inline: "cd ~/myagent;\
|
|
|
|
./config.sh --unattended \
|
|
|
|
--url #{devops_url} \
|
|
|
|
--work ~/Data/work \
|
|
|
|
--auth pat --token #{pat} \
|
|
|
|
--pool #{agent_pool} \
|
|
|
|
--agent `hostname` \
|
|
|
|
--replace \
|
|
|
|
--acceptTeeEula",
|
|
|
|
privileged: false
|
|
|
|
|
|
|
|
# Start listening for jobs
|
|
|
|
config.vm.provision 'shell',
|
|
|
|
run: 'always',
|
|
|
|
name: 'Start running azure pipelines',
|
|
|
|
inline: 'cd /Users/vagrant/myagent;\
|
|
|
|
nohup ./run.sh&',
|
|
|
|
privileged: false
|
|
|
|
end
|