Skip to content

Instantly share code, notes, and snippets.

@Twansparant
Created July 6, 2022 10:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Twansparant/9b087bb122aa74aed1a88fe916c6e908 to your computer and use it in GitHub Desktop.
Save Twansparant/9b087bb122aa74aed1a88fe916c6e908 to your computer and use it in GitHub Desktop.
DNS resolution Landrush aarch64
# This file is only used for Windows hosts.
#
# Windows
# -------------------------------------------------------------
# If you want to run `dev.yml` manually you can SSH into the VM
# to the directory with the `dev.yml` playbook and run:
# `ansible-playbook dev.yml`
#
# Non-Windows
# -------------------------------------------------------------
# If you want to run `dev.yml` manually via the `ansible-playbook`
# command (vs. `vagrant up` or `vagrant provision`), you might be
# inclined to define your development host information in this file.
# We recommend instead that you use the `-i` (inventory) option with
# your `ansible-playbook` command to specify the custom inventory file
# Vagrant has created for the VM. Vagrant's custom inventory
# includes necessary non-standard SSH connection information.
#
# Here is an example command:
#
# `ansible-playbook dev.yml -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory`
#
# The `.vagrant` directory above is usually in the same directory as
# your `Vagrantfile`. If not, you will need to adjust this path in the
# command.
#
# Why run `dev.yml` manually?
# -------------------------------------------------------------
# One reason you may want to run `dev.yml` via the `ansible-playbook`
# command is for the convenience of adding Ansible options via the
# command line (e.g., `--tags`, `--skip-tags`, or `-vvvv`). In contrast,
# the commands `vagrant up` and `vagrant provision` would only run the
# `dev.yml` playbook with such options if you were edit the options
# into the Vagrantfile's `config.vm.provision` section.
[development]
192.168.56.5 ansible_connection=local
[web]
192.168.56.5 ansible_connection=local
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
10.211.55.6 mydomain.test.shared mydomain.test #prl_hostonly shared
---
vagrant_ip: '192.168.56.5'
vagrant_cpus: 1
vagrant_memory: 1024 # in MB
vagrant_box: 'bento/ubuntu-20.04'
vagrant_box_version: '>= 202012.23.0'
vagrant_ansible_version: '2.9.10'
vagrant_ansible_python_interpreter: '/usr/bin/python3'
vagrant_skip_galaxy: false
vagrant_mount_type: 'nfs'
vagrant_install_plugins: true
vagrant_plugins:
- name: vagrant-bindfs
- name: vagrant-hostmanager
# Array of synced folders:
# - local_path: .
# destination: /path/on/vm
# create: false
# type: nfs
# bindfs: true
# mount_options: []
# bindfs_options: {}
# See https://www.vagrantup.com/docs/synced-folders/basic_usage.html#mount_options
vagrant_synced_folders: []
vagrant_box: 'jeffnoxon/ubuntu-20.04-arm64'
vagrant_box_version: '>= 1.0.0'
ANSIBLE_PATH = __dir__ # absolute path to Ansible directory on host machine
ANSIBLE_PATH_ON_VM = '/home/vagrant/trellis'.freeze # absolute path to Ansible directory on virtual machine
require File.join(ANSIBLE_PATH, 'lib', 'trellis', 'vagrant')
require File.join(ANSIBLE_PATH, 'lib', 'trellis', 'config')
require 'yaml'
vconfig = YAML.load_file("#{ANSIBLE_PATH}/vagrant.default.yml")
if File.exist?("#{ANSIBLE_PATH}/vagrant.local.yml")
local_config = YAML.load_file("#{ANSIBLE_PATH}/vagrant.local.yml")
vconfig.merge!(local_config) if local_config
end
ensure_plugins(vconfig.fetch('vagrant_plugins')) if vconfig.fetch('vagrant_install_plugins')
trellis_config = Trellis::Config.new(root_path: ANSIBLE_PATH)
Vagrant.require_version '>= 2.1.0'
Vagrant.configure('2') do |config|
config.vm.box = vconfig.fetch('vagrant_box')
config.vm.box_version = vconfig.fetch('vagrant_box_version')
config.ssh.forward_agent = true
config.vm.post_up_message = post_up_message
# Fix for: "stdin: is not a tty"
# https://github.com/mitchellh/vagrant/issues/1673#issuecomment-28288042
config.ssh.shell = %(bash -c 'BASH_ENV=/etc/profile exec bash')
# Required for NFS to work
if vconfig.fetch('vagrant_ip') == 'dhcp'
config.vm.network :private_network, type: 'dhcp', hostsupdater: 'skip'
cached_addresses = {}
config.hostmanager.ip_resolver = proc do |vm|
if cached_addresses[vm.name].nil?
if vm.communicate.ready?
vm.communicate.execute("hostname -I | cut -d ' ' -f 2") do |_type, contents|
cached_addresses[vm.name] = contents.split("\n").first[/(\d+\.\d+\.\d+\.\d+)/, 1]
end
end
end
cached_addresses[vm.name]
end
else
config.vm.network :private_network, ip: vconfig.fetch('vagrant_ip'), hostsupdater: 'skip'
end
main_hostname, *hostnames = trellis_config.site_hosts_canonical
config.vm.hostname = main_hostname
if Vagrant.has_plugin?('vagrant-hostmanager') && !trellis_config.multisite_subdomains?
redirects = trellis_config.site_hosts_redirects
config.hostmanager.enabled = true
config.hostmanager.manage_host = true
config.hostmanager.aliases = hostnames + redirects
elsif Vagrant.has_plugin?('landrush') && trellis_config.multisite_subdomains?
config.landrush.enabled = true
config.landrush.tld = trellis_config.site_hosts_canonical.reject { |host| host.end_with?(".#{main_hostname}") }
config.landrush.guest_redirect_dns = false
hostnames.each { |host| config.landrush.host host, vconfig.fetch('vagrant_ip') }
else
fail_with_message "vagrant-hostmanager missing, please install the plugin with this command:\nvagrant plugin install vagrant-hostmanager\n\nOr install landrush for multisite subdomains:\nvagrant plugin install landrush"
end
bin_path = File.join(ANSIBLE_PATH_ON_VM, 'bin')
vagrant_mount_type = vconfig.fetch('vagrant_mount_type')
extra_options = if vagrant_mount_type == 'smb'
{
smb_username: vconfig.fetch('vagrant_smb_username', nil),
smb_password: vconfig.fetch('vagrant_smb_password', nil),
}
else
{}
end
if vagrant_mount_type != 'nfs' || Vagrant::Util::Platform.wsl? || (Vagrant::Util::Platform.windows? && !Vagrant.has_plugin?('vagrant-winnfsd'))
vagrant_mount_type = nil if vagrant_mount_type == 'nfs'
trellis_config.wordpress_sites.each_pair do |name, site|
config.vm.synced_folder local_site_path(site), remote_site_path(name, site), owner: 'vagrant', group: 'www-data', mount_options: mount_options(vagrant_mount_type, dmode: 776, fmode: 775), type: vagrant_mount_type, **extra_options
end
config.vm.synced_folder ANSIBLE_PATH, ANSIBLE_PATH_ON_VM, mount_options: mount_options(vagrant_mount_type, dmode: 755, fmode: 644), type: vagrant_mount_type, **extra_options
config.vm.synced_folder File.join(ANSIBLE_PATH, 'bin'), bin_path, mount_options: mount_options(vagrant_mount_type, dmode: 755, fmode: 755), type: vagrant_mount_type, **extra_options
elsif !Vagrant.has_plugin?('vagrant-bindfs')
fail_with_message "vagrant-bindfs missing, please install the plugin with this command:\nvagrant plugin install vagrant-bindfs"
else
trellis_config.wordpress_sites.each_pair do |name, site|
config.vm.synced_folder local_site_path(site), nfs_path(name), type: 'nfs'
config.vm.synced_folder '../database/', "/srv/www/#{name}/database"
config.bindfs.bind_folder nfs_path(name), remote_site_path(name, site), u: 'vagrant', g: 'www-data', o: 'nonempty'
end
config.vm.synced_folder ANSIBLE_PATH, '/ansible-nfs', type: 'nfs'
config.bindfs.bind_folder '/ansible-nfs', ANSIBLE_PATH_ON_VM, o: 'nonempty', p: '0644,a+D'
config.bindfs.bind_folder bin_path, bin_path, perms: '0755'
end
vconfig.fetch('vagrant_synced_folders', []).each do |folder|
options = {
type: folder.fetch('type', 'nfs'),
create: folder.fetch('create', false),
mount_options: folder.fetch('mount_options', [])
}
destination_folder = folder.fetch('bindfs', true) ? nfs_path(folder['destination']) : folder['destination']
config.vm.synced_folder folder['local_path'], destination_folder, options
if folder.fetch('bindfs', true)
config.bindfs.bind_folder destination_folder, folder['destination'], folder.fetch('bindfs_options', {})
end
end
provisioner = local_provisioning? ? :ansible_local : :ansible
provisioning_path = local_provisioning? ? ANSIBLE_PATH_ON_VM : ANSIBLE_PATH
config.vm.provision provisioner do |ansible|
if local_provisioning?
ansible.extra_vars = { ansible_python_interpreter: vconfig.fetch('vagrant_ansible_python_interpreter') }
ansible.install_mode = 'pip'
ansible.pip_install_cmd = 'sudo apt-get install -y -qq python3-distutils && curl https://bootstrap.pypa.io/get-pip.py | sudo python3'
ansible.provisioning_path = provisioning_path
ansible.version = vconfig.fetch('vagrant_ansible_version')
end
ansible.compatibility_mode = '2.0'
ansible.playbook = File.join(provisioning_path, 'dev.yml')
ansible.galaxy_role_file = File.join(provisioning_path, 'galaxy.yml') unless vconfig.fetch('vagrant_skip_galaxy') || ENV['SKIP_GALAXY']
ansible.galaxy_roles_path = File.join(provisioning_path, 'vendor/roles')
ansible.groups = {
'web' => ['default'],
'development' => ['default']
}
ansible.tags = ENV['ANSIBLE_TAGS']
ansible.extra_vars = { 'vagrant_version' => Vagrant::VERSION }
if (vars = ENV['ANSIBLE_VARS'])
extra_vars = Hash[vars.split(',').map { |pair| pair.split('=') }]
ansible.extra_vars.merge!(extra_vars)
end
if !Vagrant::Util::Platform.windows?
config.trigger.after :up do |trigger|
# Add Vagrant ssh-config to ~/.ssh/config
trigger.info = "Adding vagrant ssh-config for #{main_hostname } to ~/.ssh/config"
trigger.ruby do
update_ssh_config(main_hostname)
end
end
end
end
# VirtualBox settings
config.vm.provider 'virtualbox' do |vb|
vb.name = config.vm.hostname
vb.customize ['modifyvm', :id, '--cpus', vconfig.fetch('vagrant_cpus')]
vb.customize ['modifyvm', :id, '--memory', vconfig.fetch('vagrant_memory')]
vb.customize ['modifyvm', :id, '--ioapic', vconfig.fetch('vagrant_ioapic', 'on')]
# Fix for slow external network connections
vb.customize ['modifyvm', :id, '--natdnshostresolver1', vconfig.fetch('vagrant_natdnshostresolver', 'on')]
vb.customize ['modifyvm', :id, '--natdnsproxy1', vconfig.fetch('vagrant_natdnsproxy', 'on')]
end
# VMware Workstation/Fusion settings
%w(vmware_fusion vmware_workstation).each do |provider|
config.vm.provider provider do |vmw|
vmw.vmx['displayName'] = config.vm.hostname
vmw.vmx['numvcpus'] = vconfig.fetch('vagrant_cpus')
vmw.vmx['memsize'] = vconfig.fetch('vagrant_memory')
end
end
# Parallels settings
config.vm.provider 'parallels' do |prl|
prl.name = config.vm.hostname
prl.cpus = vconfig.fetch('vagrant_cpus')
prl.memory = vconfig.fetch('vagrant_memory')
prl.update_guest_tools = true
end
# Hyper-V settings
config.vm.provider 'hyperv' do |h|
h.vmname = config.vm.hostname
h.cpus = vconfig.fetch('vagrant_cpus')
h.memory = vconfig.fetch('vagrant_memory')
h.enable_virtualization_extensions = true
h.linked_clone = true
end
# Vagrant Triggers
trellis_config.wordpress_sites.each do |(name, site)|
db_name = site['env']['db_name']
db_file = "../database/current/#{db_name}.sql"
# Importing database
if File.exists?(db_file)
config.trigger.after [:up, :resume] do |trigger|
trigger.info = "Importing database #{db_name}"
trigger.run = {inline: "wp @development db import '/srv/www/#{name}/database/current/#{db_name}.sql'"}
end
end
# Exporting database
config.trigger.before [:halt, :suspend] do |trigger|
trigger.info = "Exporting database #{db_name}"
trigger.run = {inline:"wp @development db export '/srv/www/#{name}/database/current/#{db_name}.sql'"}
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment