Saltar a contenido

Vagrant

This translates to: # Vagrant

Would you like to provide the rest of the texts for translation? | Comando | Descripción | |---------|-------------| | vagrant version | Mostrar versión de Vagrant | | vagrant -h | Mostrar información de ayuda | | vagrant init | Inicializar nuevo Vagrantfile | | vagrant init ubuntu/jammy64 | Inicializar con cuadro específico |

Box Management

Box Operations

Comando Descripción
vagrant box list Listar cajas instaladas
vagrant box add ubuntu/jammy64 Añadir caja
vagrant box add --name mybox /path/to/box.box Agregar box local
vagrant box remove ubuntu/jammy64 Eliminar cuadro
vagrant box update Actualizar todas las cajas
vagrant box update --box ubuntu/jammy64 Actualizar cuadro específico
### Box Information
Comando Descripción
--------- -------------
vagrant box outdated Verificar cajas desactualizadas
vagrant box prune Eliminar versiones antiguas de box
vagrant box repackage ubuntu/jammy64 Reembalar caja
## VM Lifecycle Management

Basic Operations

Comando Descripción
vagrant up Iniciar y aprovisionar VM
vagrant halt Apagar VM
vagrant reload Reiniciar VM
vagrant destroy Destruir VM
vagrant suspend Suspender VM
vagrant resume Reanudar VM suspendida
### VM Status and Information
Comando Descripción
--------- -------------
vagrant status Mostrar estado de VM
vagrant global-status Mostrar estado de todas las VMs
vagrant global-status --prune Limpiar entradas inválidas
## SSH and Access

SSH Operations

Comando Descripción
vagrant ssh SSH into VM
vagrant ssh-config Mostrar configuración SSH
vagrant ssh -- -L 8080:localhost:80 SSH con reenvío de puertos
## Provisioning

Provisioning Commands

Comando Descripción
vagrant provision Ejecutar proveedores
vagrant provision --provision-with shell Ejecutar aprovisionador específico
vagrant up --provision Iniciar y aprovisionar
vagrant reload --provision Reiniciar y aprovisionar
## Multi-Machine Environments

Multi-Machine Commands

Comando Descripción
vagrant up web Iniciar máquina específica
vagrant ssh web SSH a máquina específica
vagrant halt db Detener máquina específica
vagrant destroy --force Destruir todo sin confirmación
## Snapshots

Snapshot Management

Comando Descripción
vagrant snapshot save snapshot_name Guardar instantánea
vagrant snapshot list Listar snapshots
vagrant snapshot restore snapshot_name Restaurar snapshot
vagrant snapshot delete snapshot_name Eliminar instantánea
## Plugin Management

Plugin Operations

Comando Descripción
vagrant plugin list Listar plugins instalados
vagrant plugin install vagrant-vbguest Instalar plugin
vagrant plugin uninstall vagrant-vbguest Desinstalar plugin
vagrant plugin update Actualizar todos los plugins
## Vagrantfile Examples

Basic Vagrantfile

Vagrant.configure("2") do|config|
  config.vm.box = "ubuntu/jammy64"
  config.vm.hostname = "myserver"

  # Network configuration
  config.vm.network "private_network", ip: "192.168.56.10"
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # Provider configuration
  config.vm.provider "virtualbox" do|vb|
    vb.memory = "2048"
    vb.cpus = 2
    vb.name = "MyVM"
  end

  # Provisioning
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
    systemctl enable nginx
    systemctl start nginx
  SHELL
end

Multi-Machine Setup

Vagrant.configure("2") do|config|
  # Web server
  config.vm.define "web" do|web|
    web.vm.box = "ubuntu/jammy64"
    web.vm.hostname = "web"
    web.vm.network "private_network", ip: "192.168.56.10"

    web.vm.provider "virtualbox" do|vb|
      vb.memory = "1024"
      vb.cpus = 1
    end

    web.vm.provision "shell", inline: <<-SHELL
      apt-get update
      apt-get install -y nginx
    SHELL
  end

  # Database server
  config.vm.define "db" do|db|
    db.vm.box = "ubuntu/jammy64"
    db.vm.hostname = "database"
    db.vm.network "private_network", ip: "192.168.56.11"

    db.vm.provider "virtualbox" do|vb|
      vb.memory = "2048"
      vb.cpus = 2
    end

    db.vm.provision "shell", inline: <<-SHELL
      apt-get update
      apt-get install -y mysql-server
    SHELL
  end
end

Advanced Configuration

Vagrant.configure("2") do|config|
  config.vm.box = "ubuntu/jammy64"
  config.vm.box_version = "20230607.0.0"

  # Synced folders
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.synced_folder "./app", "/var/www/html",
    owner: "www-data", group: "www-data"

  # Network configuration
  config.vm.network "private_network",
    ip: "192.168.56.10",
    netmask: "255.255.255.0"

  config.vm.network "public_network",
    bridge: "en0: Wi-Fi (AirPort)"

  # Port forwarding
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "forwarded_port", guest: 443, host: 8443

  # Provider-specific configuration
  config.vm.provider "virtualbox" do|vb|
    vb.gui = false
    vb.memory = "4096"
    vb.cpus = 4
    vb.name = "Development Server"

    # VirtualBox specific settings
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
  end

  # Multiple provisioners
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get upgrade -y
  SHELL

  config.vm.provision "file",
    source: "./configs/nginx.conf",
    destination: "/tmp/nginx.conf"

  config.vm.provision "shell", path: "scripts/setup.sh"

  config.vm.provision "ansible" do|ansible|
    ansible.playbook = "playbook.yml"
    ansible.inventory_path = "inventory"
  end
end

Provisioning Methods

Shell Provisioning

# Inline shell commands
config.vm.provision "shell", inline: <<-SHELL
  apt-get update
  apt-get install -y docker.io
  usermod -aG docker vagrant
SHELL

# External script
config.vm.provision "shell", path: "scripts/bootstrap.sh"

# Privileged and non-privileged
config.vm.provision "shell", privileged: false, inline: <<-SHELL
  echo "Running as vagrant user"
SHELL

# Environment variables
config.vm.provision "shell", env: \\\\{"DEBIAN_FRONTEND" => "noninteractive"\\\\}, inline: <<-SHELL
  apt-get install -y mysql-server
SHELL

File Provisioning

config.vm.provision "file",
  source: "~/.ssh/id_rsa.pub",
  destination: "~/.ssh/authorized_keys"

config.vm.provision "file",
  source: "./configs/",
  destination: "/tmp/configs"

Ansible Provisioning

config.vm.provision "ansible" do|ansible|
  ansible.playbook = "site.yml"
  ansible.inventory_path = "inventory/vagrant"
  ansible.limit = "all"
  ansible.verbose = "v"

  ansible.extra_vars = \\\\{
    nginx_port: 80,
    database_name: "myapp"
  \\\\}
end

Docker Provisioning

config.vm.provision "docker" do|d|
  d.pull_images "nginx"
  d.pull_images "mysql:8.0"

  d.run "nginx",
    args: "-p 80:80 -v /vagrant/html:/usr/share/nginx/html"

  d.run "mysql",
    args: "-e MYSQL_ROOT_PASSWORD=secret -p 3306:3306"
end

Network Configuration

Private Networks

# Static IP
config.vm.network "private_network", ip: "192.168.56.10"

# DHCP
config.vm.network "private_network", type: "dhcp"

# Multiple interfaces
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "private_network", ip: "10.0.0.10"

Public Networks

# Bridge to default interface
config.vm.network "public_network"

# Bridge to specific interface
config.vm.network "public_network", bridge: "en0: Wi-Fi (AirPort)"

# Static IP on public network
config.vm.network "public_network", ip: "192.168.1.100"

Port Forwarding

# Basic port forwarding
config.vm.network "forwarded_port", guest: 80, host: 8080

# Multiple ports
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443
config.vm.network "forwarded_port", guest: 3306, host: 3306

# Auto-correct port conflicts
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true

Provider Configuration

VirtualBox Provider

config.vm.provider "virtualbox" do|vb|
  vb.gui = true
  vb.memory = "4096"
  vb.cpus = 4
  vb.name = "MyVM"

  # Advanced settings
  vb.customize ["modifyvm", :id, "--vram", "128"]
  vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
  vb.customize ["modifyvm", :id, "--clipboard", "bidirectional"]
end

VMware Provider

config.vm.provider "vmware_desktop" do|vmware|
  vmware.vmx["memsize"] = "4096"
  vmware.vmx["numvcpus"] = "4"
  vmware.vmx["displayName"] = "MyVM"
end

Hyper-V Provider

config.vm.provider "hyperv" do|hv|
  hv.memory = 4096
  hv.cpus = 4
  hv.vmname = "MyVM"
end

Synced Folders

Basic Synced Folders

# Default synced folder (disabled)
config.vm.synced_folder ".", "/vagrant", disabled: true

# Custom synced folder
config.vm.synced_folder "./src", "/var/www/html"

# With options
config.vm.synced_folder "./app", "/var/www/html",
  owner: "www-data",
  group: "www-data",
  mount_options: ["dmode=775,fmode=664"]

NFS Synced Folders

config.vm.synced_folder "./", "/vagrant",
  type: "nfs",
  nfs_udp: false,
  nfs_version: 4

SMB Synced Folders (Windows)

config.vm.synced_folder "./", "/vagrant",
  type: "smb",
  smb_username: "username",
  smb_password: "password"

Best Practices

Performance Optimization

  1. Resource Allocation: Allocate appropriate CPU and memory
  2. Synced Folders: Use NFS for better performance on macOS/Linux
  3. Box Selection: Choose minimal base boxes
  4. Snapshot Management: Use snapshots for quick rollbacks
  5. Provider Optimization: Configure provider-specific optimizations

Security

  1. SSH Keys: Use SSH keys instead of passwords
  2. Network Isolation: Use private networks when possible
  3. Firewall: Configure appropriate firewall rules
  4. Updates: Keep boxes and Vagrant updated
  5. Secrets: Don't commit secrets to version control

Development Workflow

  1. Version Control: Include Vagrantfile in version control
  2. Documentation: Document setup and usage
  3. Consistency: Use same environment across team
  4. Testing: Test provisioning scripts
  5. Cleanup: Regularly clean up unused VMs and boxes

Troubleshooting

  1. Logs: Check Vagrant and provider logs
  2. SSH: Use vagrant ssh-config for debugging
  3. Networking: Test network connectivity
  4. Provisioning: Test provisioning scripts separately
  5. Resources: Monitor host system resources