-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathVagrantfile
149 lines (131 loc) · 4.88 KB
/
Vagrantfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# -*- mode: ruby -*-
# vi: set ft=ruby :
# ----------------------------
def envd(name, default)
case ENV[name]
when nil then
default
else
ENV[name]
end
end
# --- configuration paramters -------------------------
OS = envd("VAG_OS", "centos")
AMIROCKY = envd("AWS_AMI_ROCKY", "ami-004b161a1cceb1ceb") # rocky 8.6/us-east-1
AMIFEDORA = envd("AWS_AMI_FEDORA", "ami-0c830793775595d4b") # fedora 31/us-east-1
AMICENTOS = envd("AWS_AMI_CENTOS", "ami-02eac2c0129f6376b") # centos 7.5/us-east-1/1901_01
AMIFEDORAATOMIC = envd("AWS_AMI_FEDORA_ATOMIC", "ami-064e38c5a50a6c0d0") # fedora atomic 31/us-east-1
AMICENTOSATOMIC = envd("AWS_AMI_CENTOS_ATOMIC", "ami-a06447da") # centos atomic 7/us-east-1/7.1712.1
AWSRG = envd("AWS_RG", "us-east-1") # AWS region
AWSAZ = envd("AWS_AZ", "us-east-1a") # AWS availability zone
AWSSG = envd("AWS_SG", "sg-05525f5871576788b") # AWS security group/us-east-1
AWSSN = envd("AWS_SN", "subnet-0a0a41189aa786501") # AWS subnet/us-east-1
AWSIT = envd("AWS_IT", "r5.2xlarge") # 8 vcpu 64 GiB
AKEY = envd("AWS_ACCESS_KEY_ID", "none")
SKEY = envd("AWS_SECRET_ACCESS_KEY", "none")
KEYPAIR = envd("AWS_KEYPAIR_NAME", "none")
KEYPATH = envd("AWS_KEY_PATH", "~/.ssh/aws_ssh_key")
DOCKER_PKG_REPO = envd("DOCKER_PKG_REPO", "docker.com")
# docker.com: docker.com repository
# os: OS repository
K8S = envd("K8S", "")
NOMAD = envd("NOMAD", "")
#puts "os: " + OS
case OS
when "fedora-atomic" then
LIBVIRTBOX = "fedora/28-atomic-host"
AMI = AMIFEDORAATOMIC
AWSUSER = "fedora"
INSTALL = envd("INST", "install-atomic.sh")
when "fedora" then
LIBVIRTBOX = "fedora/30-cloud-base"
AMI = AMIFEDORA
AWSUSER = "fedora"
INSTALL = envd("INST", "install.sh")
when "centos-atomic" then
LIBVIRTBOX = "centos/atomic-host"
AMI = AMICENTOSATOMIC
AWSUSER = "centos"
SYNC = "/home/centos/sync"
INSTALL = envd("INST", "install-atomic.sh")
when "centos" then
LIBVIRTBOX = "centos/7"
AMI = AMICENTOS
AWSUSER = "centos"
INSTALL = envd("INST", "install.sh")
when "rocky" then
LIBVIRTBOX = "rockylinux/8"
AMI = AMIROCKY
AWSUSER = "rocky"
INSTALL = envd("INST", "install.sh")
else
puts "invalid OS name:" + OS + ":"
end
#puts "aws ssh user: " + AWSUSER
# -----------------------------------------------------
Vagrant.configure(2) do |config|
config.vm.synced_folder ".", "/vagrant", disabled: true
# --- use fixed uuid for "v1" only ---
config.vm.define "v1" do |node|
node.vm.provider :libvirt do |libvirt|
libvirt.uuid = 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA'
end
end
(1..6).each do |i|
config.vm.define "v#{i}" do |node|
node.vm.provision :shell, inline: "hostname v#{i}"
node.vm.provision :shell, inline: "echo v#{i} > /etc/hostname"
node.vm.provision "shell", path: INSTALL, env: {"DOCKER_PKG_REPO" => DOCKER_PKG_REPO, "K8S" => K8S, "NOMAD" => NOMAD}
# --- port forwarding for virtualbox --------------------
node.vm.network "forwarded_port", guest: 22, host: 7221+i, id: "ssh"
node.vm.network "forwarded_port", guest: 8443, host: 18442+i, id: "https"
end
end
config.vm.provider "virtualbox" do |v, override|
override.vm.box = LIBVIRTBOX
override.vm.synced_folder ".", "/home/vagrant/sync", type: "rsync"
# export VAGRANT_EXPERIMENTAL="disks" is necessary for following disk options
override.vm.disk :disk, size: "50GB", primary: true
v.cpus = 2
#v.memory = 10240
v.memory = 8192
# v.customize ["modifyvm", :id, "--audio", "none"]
end
config.vm.provider :libvirt do |libvirt, override|
override.vm.box = LIBVIRTBOX
override.vm.synced_folder ".", "/home/vagrant/sync", type: "rsync"
#libvirt.uuid = 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA'
libvirt.cpus = 8
#libvirt.memory = 32768
libvirt.memory = 40960
libvirt.machine_virtual_size = 70 # 70GB
end
config.vm.provider :aws do |aws, override|
override.nfs.functional = false
override.vm.synced_folder ".", "/home/" + AWSUSER + "/sync", type: "rsync"
override.vm.box = "dummy"
override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
override.ssh.username = AWSUSER
override.ssh.private_key_path = KEYPATH
aws.region_config AWSRG do |region|
region.spot_instance = true
region.spot_max_price = "0.8"
end
aws.region = AWSRG
aws.availability_zone = AWSAZ
aws.access_key_id = AKEY
aws.secret_access_key = SKEY
aws.keypair_name = KEYPAIR
aws.ami = AMI
aws.instance_type = AWSIT
aws.block_device_mapping = [{ "DeviceName" => "/dev/sda1", "Ebs.VolumeType" => "gp2", "Ebs.VolumeSize" => 70 }] # 70GB
aws.security_groups = [AWSSG]
aws.subnet_id = AWSSN
aws.associate_public_ip = true
aws.elastic_ip = false
aws.user_data =<<USER_DATA
#!/bin/sh
sed -i -e "s/^\\(Defaults.*requiretty\\)/#\\1/" /etc/sudoers
USER_DATA
end
end