diff --git a/.gitignore b/.gitignore index 17838bf..24bb2bc 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,7 @@ join-command.sh # Helm charts/ *.tgz + +# Keys +keys/ +old/ diff --git a/Makefile b/Makefile index 129bf29..6ab2af1 100644 --- a/Makefile +++ b/Makefile @@ -1,112 +1,13 @@ -# Bare Bones Vagrant Makefile +list: + vagrant status +make up: + cd vagrant && vagrant up +make destroy: + cd vagrant && vagrant destroy -f -.PHONY: help start stop destroy status ssh-manager ssh-worker1 ssh-worker2 ssh-worker3 clean \ - ansible-ping ansible-setup ansible-deploy ansible-list ansible-facts \ - reset-full reset-destroy reset-start reset-test reset-ssh reset-ansible reset-setup reset-deploy +make ansible-master: + cd ansible && ansible-playbook -i ../vagrant/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory master.yml -# Default target -help: ## Show this help message - @echo "Bare Bones Vagrant Management" - @echo "============================" - @echo "" - @echo "Available targets:" - @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-15s %s\n", $$1, $$2}' $(MAKEFILE_LIST) - -start: ## Start all machines - @echo "Starting all machines..." - ./manage.sh start - -stop: ## Stop all machines - @echo "Stopping all machines..." - ./manage.sh stop - -destroy: ## Destroy all machines (permanent) - @echo "Destroying all machines..." - ./manage.sh destroy - -status: ## Show machine status - @echo "Showing machine status..." - ./manage.sh status - -ssh-manager: ## Access swarm manager via SSH - @echo "Accessing swarm manager..." - ./manage.sh ssh swarm-manager - -ssh-worker1: ## Access swarm worker1 via SSH - @echo "Accessing swarm worker1..." - ./manage.sh ssh swarm-worker1 - -ssh-worker2: ## Access swarm worker2 via SSH - @echo "Accessing swarm worker2..." - ./manage.sh ssh swarm-worker2 - -ssh-worker3: ## Access swarm worker3 via SSH - @echo "Accessing swarm worker3..." - ./manage.sh ssh swarm-worker3 - -clean: ## Clean up temporary files - @echo "Cleaning up temporary files..." - rm -rf backup-* *.log *.tmp *.temp - @echo "Cleanup complete!" - -# Quick access targets -manager: ssh-manager ## Alias for ssh-manager -w1: ssh-worker1 ## Alias for ssh-worker1 -w2: ssh-worker2 ## Alias for ssh-worker2 -w3: ssh-worker3 ## Alias for ssh-worker3 - -# Ansible targets -ansible-ping: ## Test Ansible connectivity to all hosts - @echo "Testing Ansible connectivity..." - ansible all -i inventory -m ping - -ansible-setup: ## Run setup playbook to install dependencies - @echo "Installing Ansible roles..." - ansible-galaxy install -r ansible-requirements.yml --force - @echo "Running setup playbook..." - ansible-playbook -i inventory setup-playbook.yml - -ansible-deploy: ## Run Docker Swarm deployment playbook - @echo "Running Docker Swarm deployment playbook..." - ansible-playbook -i inventory deploy-playbook.yml - -ansible-list: ## List all hosts in inventory - @echo "Listing all hosts..." - ansible all -i inventory --list-hosts - -ansible-facts: ## Gather facts from all hosts - @echo "Gathering facts from all hosts..." - ansible all -i inventory -m setup - -# Reset and Test targets -reset-full: ## Full destroy/recreate/test cycle - @echo "Running full reset and test cycle..." - ./reset-and-test.sh full-reset - -reset-destroy: ## Only destroy all machines - @echo "Destroying all machines..." - ./reset-and-test.sh destroy-only - -reset-start: ## Only start all machines - @echo "Starting all machines..." - ./reset-and-test.sh start-only - -reset-test: ## Only run tests (assumes machines are running) - @echo "Running tests..." - ./reset-and-test.sh test-only - -reset-ssh: ## Only test SSH connectivity - @echo "Testing SSH connectivity..." - ./reset-and-test.sh ssh-test - -reset-ansible: ## Only test Ansible connectivity - @echo "Testing Ansible connectivity..." - ./reset-and-test.sh ansible-test - -reset-setup: ## Only run setup playbook - @echo "Running setup playbook..." - ./reset-and-test.sh setup-only - -reset-deploy: ## Only run deployment playbook - @echo "Running deployment playbook..." - ./reset-and-test.sh deploy-only \ No newline at end of file +make setup-keys: + mkdir -p ./keys + ssh-keygen -t ed25519 -f ./keys/access -N "" -q diff --git a/README.md b/README.md deleted file mode 100644 index e91d128..0000000 --- a/README.md +++ /dev/null @@ -1,267 +0,0 @@ -# Docker Swarm Vagrant Cluster - -A **production-ready** Docker Swarm cluster with 1 manager and 3 worker nodes for container orchestration and deployment. - -## ๐Ÿณ Docker Swarm Features - -- **1 Swarm Manager** - Cluster orchestration and management -- **3 Swarm Workers** - Container execution and scaling -- **Overlay Networking** - Secure multi-host container communication -- **Service Discovery** - Built-in DNS and load balancing -- **High Availability** - Automatic failover and service recovery -- **Portainer UI** - Web-based cluster management interface -- **Traefik** - Reverse proxy with automatic service discovery - -## ๐Ÿ—๏ธ Architecture - -``` -โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” -โ”‚ swarm-manager โ”‚ โ”‚ swarm-worker1 โ”‚ โ”‚ swarm-worker2 โ”‚ โ”‚ swarm-worker3 โ”‚ -โ”‚ 192.168.56.10 โ”‚ โ”‚ 192.168.56.11 โ”‚ โ”‚ 192.168.56.12 โ”‚ โ”‚ 192.168.56.13 โ”‚ -โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ -โ”‚ - Swarm Manager โ”‚ โ”‚ - Swarm Worker โ”‚ โ”‚ - Swarm Worker โ”‚ โ”‚ - Swarm Worker โ”‚ -โ”‚ - Portainer UI โ”‚ โ”‚ - Container โ”‚ โ”‚ - Container โ”‚ โ”‚ - Container โ”‚ -โ”‚ - Traefik Proxy โ”‚ โ”‚ Execution โ”‚ โ”‚ Execution โ”‚ โ”‚ Execution โ”‚ -โ”‚ - Service โ”‚ โ”‚ - Load โ”‚ โ”‚ - Load โ”‚ โ”‚ - Load โ”‚ -โ”‚ Discovery โ”‚ โ”‚ Balancing โ”‚ โ”‚ Balancing โ”‚ โ”‚ Balancing โ”‚ -โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - โ”‚ โ”‚ โ”‚ โ”‚ - โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ - โ”‚ โ”‚ - โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” - โ”‚ Docker Swarm Overlay Network โ”‚ - โ”‚ - Service Discovery โ”‚ - โ”‚ - Load Balancing โ”‚ - โ”‚ - Secure Communication โ”‚ - โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ -``` - -## ๐Ÿ“‹ Prerequisites - -- **Vagrant** 2.2+ -- **VirtualBox** 6.0+ or **libvirt** (KVM) -- **Ansible** 2.9+ -- **2GB+ RAM** (512MB per machine + 1GB swap) -- **6GB+ free disk space** - -## ๐Ÿš€ Quick Start - -1. **Start all machines:** - ```bash - make start - ``` - -2. **Check status:** - ```bash - make status - ``` - -3. **Access a machine:** - ```bash - make ssh-manager - make ssh-worker1 - ``` - -## ๐ŸŽ›๏ธ Management Commands - -### Using Make -```bash -make start # Start all machines -make stop # Stop all machines -make destroy # Destroy all machines -make status # Show machine status -make ssh-manager # Access swarm manager -make ssh-worker1 # Access swarm worker1 -make ssh-worker2 # Access swarm worker2 -make ssh-worker3 # Access swarm worker3 -``` - -### Using Management Script -```bash -./manage.sh start # Start all machines -./manage.sh stop # Stop all machines -./manage.sh destroy # Destroy all machines -./manage.sh status # Show machine status -./manage.sh ssh swarm-manager # Access swarm manager -./manage.sh ssh swarm-worker1 # Access swarm worker1 -``` - -### Using Vagrant Directly -```bash -vagrant up # Start all machines -vagrant halt # Stop all machines -vagrant destroy -f # Destroy all machines -vagrant status # Show machine status -vagrant ssh swarm-manager # Access swarm manager -vagrant ssh swarm-worker1 # Access swarm worker1 -``` - -## ๐ŸŒ Network Configuration - -- **Swarm Manager**: 192.168.56.10 -- **Swarm Worker 1**: 192.168.56.11 -- **Swarm Worker 2**: 192.168.56.12 -- **Swarm Worker 3**: 192.168.56.13 - -All machines are connected via a private network and communicate through Docker Swarm overlay networking. - -## ๐Ÿ”ง Machine Specifications - -- **OS**: Debian 11 (Bullseye) -- **RAM**: 512MB per machine + 1GB swap -- **CPU**: 1 core per machine -- **Disk**: 8GB per machine - -## ๐Ÿ“ Project Structure - -``` -test-vagrant/ -โ”œโ”€โ”€ Vagrantfile # Debian Linux cluster configuration -โ”œโ”€โ”€ manage.sh # Management script -โ”œโ”€โ”€ Makefile # Make targets -โ”œโ”€โ”€ inventory # Ansible inventory file -โ”œโ”€โ”€ setup-playbook.yml # Setup playbook (dependencies, Python, swap) -โ”œโ”€โ”€ deploy-playbook.yml # Deployment playbook (apps, services) -โ”œโ”€โ”€ README.md # This file -โ””โ”€โ”€ .gitignore # Git ignore rules -``` - -## ๐Ÿ› ๏ธ Troubleshooting - -### Common Issues - -1. **Machines not starting:** - ```bash - vagrant status - vagrant up --debug - ``` - -2. **Network issues:** - ```bash - vagrant ssh host -c "ping 192.168.56.10" - ``` - -3. **SSH issues:** - ```bash - vagrant ssh-config - ``` - -### Useful Commands - -```bash -# Check machine status -vagrant status - -# View machine details -vagrant ssh-config - -# Reload machines -vagrant reload - -# Provision machines -vagrant provision -``` - -## ๐Ÿง Debian Linux Notes - -### **Package Management** -```bash -# Update package index -apt update - -# Install packages -apt install package-name - -# Search packages -apt search keyword -``` - -### **Common Debian Commands** -```bash -# Check system info -uname -a -cat /etc/os-release - -# Check memory usage -free -m - -# Check disk usage -df -h -``` - -## ๐ŸŽญ Ansible Integration - -### **Prerequisites** -```bash -# Install Ansible (on your host machine) -pip install ansible - -# Or on Ubuntu/Debian -sudo apt install ansible -``` - -### **Ansible Commands** -```bash -# Test connectivity to all hosts -make ansible-ping - -# Install dependencies (Python, tools, swap) -make ansible-setup - -# Deploy applications and services -make ansible-deploy - -# List all hosts -make ansible-list - -# Gather system facts -make ansible-facts -``` - -### **Using Management Script** -```bash -# Test Ansible connectivity -./manage.sh ansible ping - -# Install dependencies -./manage.sh ansible setup - -# Deploy applications -./manage.sh ansible deploy -``` - -### **Direct Ansible Commands** -```bash -# Test connectivity -ansible all -i inventory -m ping - -# Run setup playbook -ansible-playbook -i inventory setup-playbook.yml - -# Run deployment playbook -ansible-playbook -i inventory deploy-playbook.yml - -# Run on specific hosts -ansible-playbook -i inventory deploy-playbook.yml --limit machines - -# Run with verbose output -ansible-playbook -i inventory deploy-playbook.yml -v -``` - -## ๐Ÿš€ Next Steps - -This is a bare-bones Debian setup. You can extend it by: - -1. **Adding provisioning scripts** to install Debian packages -2. **Setting up networking** between machines -3. **Installing Docker** (Debian has excellent Docker support) -4. **Adding lightweight services** (nginx, redis, etc.) -5. **Setting up monitoring** with lightweight tools - -## ๐Ÿ“„ License - -This project is licensed under the MIT License. - ---- - -**Ultra-Lightweight Debian! ๐Ÿงโšก** \ No newline at end of file diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 77a9c9f..0000000 --- a/Vagrantfile +++ /dev/null @@ -1,107 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant.configure("2") do |config| - # Global configuration - config.vm.box = "debian/bookworm64" - config.vm.box_version = ">= 12.12.0" - - # Disable automatic box update checking - config.vm.box_check_update = false - - # Configure SSH - config.ssh.insert_key = true - - # Configure shared folders - config.vm.synced_folder ".", "/vagrant", disabled: true - - # Configure provider-specific settings - config.vm.provider "virtualbox" do |vb| - vb.name = "bare-bones-cluster" - vb.memory = "512" - vb.cpus = 1 - vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] - vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"] - end - - # Configure libvirt provider - config.vm.provider "libvirt" do |libvirt| - libvirt.memory = 512 - libvirt.cpus = 1 - libvirt.driver = "kvm" - libvirt.connect_via_ssh = false - end - - # Swarm Manager - config.vm.define "swarm-manager" do |manager| - manager.vm.hostname = "swarm-manager" - manager.vm.network "private_network", ip: "192.168.56.10" - - # Port forwarding for Docker Swarm services - manager.vm.network "forwarded_port", guest: 9000, host: 19000, id: "portainer" - manager.vm.network "forwarded_port", guest: 8080, host: 18080, id: "traefik" - manager.vm.network "forwarded_port", guest: 80, host: 18081, id: "webapp" - - manager.vm.provider "virtualbox" do |vb| - vb.name = "swarm-manager" - vb.memory = "512" - vb.cpus = 1 - end - - manager.vm.provider "libvirt" do |libvirt| - libvirt.memory = 512 - libvirt.cpus = 1 - end - end - - # Swarm Worker 1 - config.vm.define "swarm-worker1" do |worker1| - worker1.vm.hostname = "swarm-worker1" - worker1.vm.network "private_network", ip: "192.168.56.11" - - worker1.vm.provider "virtualbox" do |vb| - vb.name = "swarm-worker1" - vb.memory = "512" - vb.cpus = 1 - end - - worker1.vm.provider "libvirt" do |libvirt| - libvirt.memory = 512 - libvirt.cpus = 1 - end - end - - # Swarm Worker 2 - config.vm.define "swarm-worker2" do |worker2| - worker2.vm.hostname = "swarm-worker2" - worker2.vm.network "private_network", ip: "192.168.56.12" - - worker2.vm.provider "virtualbox" do |vb| - vb.name = "swarm-worker2" - vb.memory = "512" - vb.cpus = 1 - end - - worker2.vm.provider "libvirt" do |libvirt| - libvirt.memory = 512 - libvirt.cpus = 1 - end - end - - # Swarm Worker 3 - config.vm.define "swarm-worker3" do |worker3| - worker3.vm.hostname = "swarm-worker3" - worker3.vm.network "private_network", ip: "192.168.56.13" - - worker3.vm.provider "virtualbox" do |vb| - vb.name = "swarm-worker3" - vb.memory = "512" - vb.cpus = 1 - end - - worker3.vm.provider "libvirt" do |libvirt| - libvirt.memory = 512 - libvirt.cpus = 1 - end - end -end \ No newline at end of file diff --git a/ansible-requirements.yml b/ansible-requirements.yml deleted file mode 100644 index af85c99..0000000 --- a/ansible-requirements.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -# Ansible Galaxy Requirements -# Install with: ansible-galaxy install -r ansible-requirements.yml - -- name: geerlingguy.swap - version: 1.1.1 diff --git a/ansible/ansible.cfg b/ansible/ansible.cfg new file mode 100644 index 0000000..f288284 --- /dev/null +++ b/ansible/ansible.cfg @@ -0,0 +1,2 @@ +[defaults] +host_key_checking=False diff --git a/ansible/master.yml b/ansible/master.yml new file mode 100644 index 0000000..e9551a9 --- /dev/null +++ b/ansible/master.yml @@ -0,0 +1,34 @@ +--- +- hosts: all + become: true + + tasks: + # write hello world to a file in the home directory + - name: write hello + copy: + content: "hello ansible from ansible-manager!" + dest: /home/vagrant/hello2.txt + mode: 0644 + become: true + + - name: Echo hello + shell: echo 'hello ansible!' + args: + chdir: $HOME + # Echo the contents of the hello.txt file + - name: Echo hello + shell: cat /home/vagrant/hello.txt + args: + chdir: $HOME + # Echo the contents of the hello2.txt file + - name: Echo hello2 + shell: cat /home/vagrant/hello2.txt + args: + chdir: $HOME + + + # - name: Initialize the cluster + # shell: docker swarm init --advertise-addr 192.168.56.10 >> cluster_initialized.txt + # args: + # chdir: $HOME + # creates: cluster_initialized.txt diff --git a/deploy-playbook.yml b/deploy-playbook.yml deleted file mode 100644 index 1758f8c..0000000 --- a/deploy-playbook.yml +++ /dev/null @@ -1,159 +0,0 @@ ---- -# Docker Swarm Deployment Playbook -# This playbook initializes Docker Swarm cluster and deploys services - -- name: Initialize Docker Swarm Manager - hosts: swarm_managers - become: yes - gather_facts: yes - - tasks: - - name: Check if Docker Swarm is already initialized - command: docker info --format "{{ '{{' }}.Swarm.LocalNodeState{{ '}}' }}" - register: swarm_status_check - changed_when: false - failed_when: false - - - name: Initialize Docker Swarm - command: docker swarm init --advertise-addr 192.168.56.10 - register: swarm_init_result - changed_when: swarm_init_result.rc == 0 - failed_when: swarm_init_result.rc not in [0, 1] - when: swarm_status_check.stdout != "active" - - - name: Get worker join token - command: docker swarm join-token worker - register: worker_token_result - changed_when: false - - - name: Extract worker join command - set_fact: - worker_join_token: "{{ worker_token_result.stdout_lines[2] }}" - - - name: Display worker join command - debug: - msg: "Worker join command: {{ worker_join_token }}" - - - name: Get manager join token - command: docker swarm join-token manager - register: manager_token_result - changed_when: false - - - name: Display manager join command - debug: - msg: "Manager join command: {{ manager_token_result.stdout_lines[2] }}" - - - name: Copy Docker Compose stack file - copy: - src: docker-stack.yml - dest: /home/vagrant/docker-stack.yml - mode: '0644' - - - name: Deploy Docker Swarm stack - command: docker stack deploy -c docker-stack.yml swarm-stack - register: stack_result - changed_when: stack_result.rc == 0 - failed_when: stack_result.rc not in [0, 1] - - - name: Check Docker Swarm status - command: docker node ls - register: swarm_status - changed_when: false - - - name: Display Swarm status - debug: - msg: "{{ swarm_status.stdout_lines }}" - - - name: Check Docker stack services - command: docker stack services swarm-stack - register: services_status - changed_when: false - - - name: Display stack services status - debug: - msg: "{{ services_status.stdout_lines }}" - -- name: Join Docker Swarm Workers - hosts: swarm_workers - become: yes - gather_facts: no - - tasks: - - name: Join Docker Swarm as worker - command: "{{ hostvars[groups['swarm_managers'][0]]['worker_join_token'] | replace('10.0.2.15:2377', '192.168.56.10:2377') }}" - register: join_result - changed_when: join_result.rc == 0 - failed_when: join_result.rc not in [0, 1] - - - name: Verify node joined successfully - command: docker node ls - register: node_status - changed_when: false - ignore_errors: yes - - - name: Display node status - debug: - msg: "{{ node_status.stdout_lines if node_status.rc == 0 else 'Node not accessible' }}" - -- name: Verify Docker Swarm Cluster - hosts: swarm_managers - become: yes - gather_facts: no - - tasks: - - name: Wait for all nodes to be ready - command: docker node ls - register: nodes_check - until: nodes_check.stdout_lines | length >= 5 # Header + 4 nodes - retries: 10 - delay: 5 - changed_when: false - - - name: Check all nodes are active - command: docker node ls --format "{{ '{{' }}.Status{{ '}}' }}" - register: node_statuses - changed_when: false - - - name: Verify all nodes are ready - assert: - that: - - "'Ready' in node_statuses.stdout" - - "'Active' in node_statuses.stdout" - fail_msg: "Not all nodes are ready and active" - - - name: Check stack service health - command: docker stack services swarm-stack --format "table {{.Name}}\t{{.Replicas}}" - register: service_replicas - changed_when: false - - - name: Display stack service replicas - debug: - msg: "{{ service_replicas.stdout_lines }}" - - - name: Create cluster info file - copy: - content: | - Docker Swarm Cluster Information - ================================ - Manager: {{ groups['swarm_managers'][0] }} - Workers: {{ groups['swarm_workers'] | join(', ') }} - Total Nodes: {{ groups['swarm_nodes'] | length }} - - Services Deployed: - - Portainer (Management UI): http://{{ ansible_default_ipv4.address }}:9000 - - Traefik Dashboard: http://{{ ansible_default_ipv4.address }}:8080 - - Web Application: http://{{ ansible_default_ipv4.address }} - - Network: swarm-network (overlay) - Created: {{ ansible_date_time.iso8601 }} - dest: /opt/swarm-cluster-info.txt - mode: '0644' - - - name: Display cluster information - command: cat /opt/swarm-cluster-info.txt - register: cluster_info - changed_when: false - - - name: Show cluster information - debug: - msg: "{{ cluster_info.stdout_lines }}" \ No newline at end of file diff --git a/docker-stack.yml b/docker-stack.yml deleted file mode 100644 index 2933a59..0000000 --- a/docker-stack.yml +++ /dev/null @@ -1,74 +0,0 @@ -version: '3.8' - -services: - portainer: - image: portainer/portainer-ce:latest - ports: - - "9000:9000" - - "9443:9443" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - portainer_data:/data - deploy: - replicas: 1 - placement: - constraints: - - node.role == manager - restart_policy: - condition: on-failure - networks: - - swarm-network - - traefik: - image: traefik:v2.10 - ports: - - "80:80" - - "8080:8080" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - command: - - --api.dashboard=true - - --api.insecure=true - - --providers.docker=true - - --providers.docker.exposedbydefault=false - - --entrypoints.web.address=:80 - deploy: - replicas: 1 - placement: - constraints: - - node.role == manager - restart_policy: - condition: on-failure - networks: - - swarm-network - - web-app: - image: nginx:alpine - deploy: - replicas: 3 - restart_policy: - condition: on-failure - labels: - - traefik.enable=true - - traefik.http.routers.webapp.rule=Host(`192.168.56.10`) - - traefik.http.services.webapp.loadbalancer.server.port=80 - networks: - - swarm-network - - hello-world: - image: hello-world:latest - deploy: - replicas: 2 - restart_policy: - condition: on-failure - networks: - - swarm-network - -volumes: - portainer_data: - driver: local - -networks: - swarm-network: - driver: overlay - attachable: true diff --git a/inventory b/inventory deleted file mode 100644 index d2dce97..0000000 --- a/inventory +++ /dev/null @@ -1,21 +0,0 @@ -# Ansible Inventory for Docker Swarm Cluster -# This file defines the hosts and groups for Ansible playbooks - -[all:vars] -ansible_user=vagrant -ansible_ssh_common_args='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' - -[swarm_managers] -swarm-manager ansible_host=127.0.0.1 ansible_port=2204 ansible_ssh_private_key_file=.vagrant/machines/swarm-manager/virtualbox/private_key - -[swarm_workers] -swarm-worker1 ansible_host=127.0.0.1 ansible_port=2205 ansible_ssh_private_key_file=.vagrant/machines/swarm-worker1/virtualbox/private_key -swarm-worker2 ansible_host=127.0.0.1 ansible_port=2206 ansible_ssh_private_key_file=.vagrant/machines/swarm-worker2/virtualbox/private_key -swarm-worker3 ansible_host=127.0.0.1 ansible_port=2207 ansible_ssh_private_key_file=.vagrant/machines/swarm-worker3/virtualbox/private_key - -[swarm_nodes:children] -swarm_managers -swarm_workers - -[swarm_nodes:vars] -ansible_python_interpreter=/usr/bin/python3 diff --git a/manage.sh b/manage.sh deleted file mode 100755 index b722039..0000000 --- a/manage.sh +++ /dev/null @@ -1,163 +0,0 @@ -#!/bin/bash - -# Bare Bones Vagrant Management Script - -set -e - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -print_status() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -print_warning() { - echo -e "${YELLOW}[WARNING]${NC} $1" -} - -print_error() { - echo -e "${RED}[ERROR]${NC} $1" -} - -print_header() { - echo -e "${BLUE}=== $1 ===${NC}" -} - -# Function to start all machines -start_all() { - print_header "Starting All Machines" - vagrant up - print_status "All machines started successfully!" -} - -# Function to stop all machines -stop_all() { - print_header "Stopping All Machines" - vagrant halt - print_status "All machines stopped successfully!" -} - -# Function to destroy all machines -destroy_all() { - print_header "Destroying All Machines" - print_warning "This will permanently delete all machines!" - read -p "Are you sure? (y/N): " -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - vagrant destroy -f - print_status "All machines destroyed successfully!" - else - print_status "Operation cancelled." - fi -} - -# Function to show status -show_status() { - print_header "Machine Status" - vagrant status -} - -# Function to access a specific machine -access_machine() { - local machine=${1:-host} - print_header "Accessing $machine" - vagrant ssh "$machine" -} - -# Function to run Ansible commands -run_ansible() { - local command=${1:-ping} - print_header "Running Ansible $command" - - case "$command" in - ping) - ansible all -i inventory -m ping - ;; - setup) - ansible-playbook -i inventory setup-playbook.yml - ;; - deploy) - ansible-playbook -i inventory deploy-playbook.yml - ;; - list) - ansible all -i inventory --list-hosts - ;; - facts) - ansible all -i inventory -m setup - ;; - *) - print_error "Unknown Ansible command: $command" - print_status "Available commands: ping, setup, deploy, list, facts" - ;; - esac -} - -# Function to show help -show_help() { - echo "Bare Bones Vagrant Management Script" - echo "" - echo "Usage: $0 [COMMAND] [MACHINE]" - echo "" - echo "Commands:" - echo " start Start all machines" - echo " stop Stop all machines" - echo " destroy Destroy all machines (permanent)" - echo " status Show machine status" - echo " ssh MACHINE Access machine via SSH" - echo " ansible COMMAND Run Ansible command (ping, play, docker, list, facts)" - echo " help Show this help message" - echo "" - echo "Machines:" - echo " swarm-manager Swarm Manager (192.168.56.10)" - echo " swarm-worker1 Swarm Worker 1 (192.168.56.11)" - echo " swarm-worker2 Swarm Worker 2 (192.168.56.12)" - echo " swarm-worker3 Swarm Worker 3 (192.168.56.13)" - echo "" - echo "Ansible Commands:" - echo " ping Test connectivity to all hosts" - echo " setup Install dependencies (Python, Docker, swap)" - echo " deploy Deploy Docker Swarm cluster" - echo " list List all hosts" - echo " facts Gather system facts" - echo "" - echo "Examples:" - echo " $0 start # Start all machines" - echo " $0 ssh swarm-manager # Access swarm manager" - echo " $0 ansible ping # Test Ansible connectivity" - echo " $0 ansible setup # Install dependencies" - echo " $0 ansible deploy # Deploy Docker Swarm cluster" -} - -# Main script logic -case "${1:-help}" in - start) - start_all - ;; - stop) - stop_all - ;; - destroy) - destroy_all - ;; - status) - show_status - ;; - ssh) - access_machine "$2" - ;; - ansible) - run_ansible "$2" - ;; - help|--help|-h) - show_help - ;; - *) - print_error "Unknown command: $1" - show_help - exit 1 - ;; -esac diff --git a/reset-and-test.sh b/reset-and-test.sh deleted file mode 100755 index 01de1a9..0000000 --- a/reset-and-test.sh +++ /dev/null @@ -1,541 +0,0 @@ -#!/bin/bash - -# Reset and Test Script for Debian Vagrant Cluster -# This script fully destroys and recreates the entire stack, then runs all tests - -set -e # Exit on any error - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Function to print colored output -print_header() { - echo -e "${BLUE}=== $1 ===${NC}" -} - -print_success() { - echo -e "${GREEN}โœ… $1${NC}" -} - -print_warning() { - echo -e "${YELLOW}โš ๏ธ $1${NC}" -} - -print_error() { - echo -e "${RED}โŒ $1${NC}" -} - -print_info() { - echo -e "${BLUE}โ„น๏ธ $1${NC}" -} - -# Function to check if command exists -command_exists() { - command -v "$1" >/dev/null 2>&1 -} - -# Function to wait for user confirmation (disabled for automation) -confirm() { - print_info "Auto-confirming operation (automation mode)" - return 0 -} - -# Function to check prerequisites -check_prerequisites() { - print_header "Checking Prerequisites" - - local missing_deps=() - - if ! command_exists vagrant; then - missing_deps+=("vagrant") - fi - - if ! command_exists ansible; then - missing_deps+=("ansible") - fi - - if ! command_exists make; then - missing_deps+=("make") - fi - - if [ ${#missing_deps[@]} -ne 0 ]; then - print_error "Missing required dependencies: ${missing_deps[*]}" - print_info "Please install the missing dependencies and try again" - exit 1 - fi - - print_success "All prerequisites are installed" -} - -# Function to destroy everything -destroy_all() { - print_header "Destroying All Machines" - - print_info "Auto-confirming destruction (automation mode)" - - print_info "Stopping all machines..." - vagrant halt 2>/dev/null || true - - print_info "Destroying all machines..." - vagrant destroy -f - - print_info "Cleaning up Vagrant files..." - rm -rf .vagrant/ - - print_success "All machines destroyed and cleaned up" -} - -# Function to start all machines -start_all() { - print_header "Starting All Machines" - - print_info "Starting Vagrant cluster..." - vagrant up - - print_info "Waiting for machines to be ready..." - sleep 10 - - print_info "Checking machine status..." - vagrant status - - print_success "All machines started successfully" -} - -# Function to test SSH connectivity -test_ssh() { - print_header "Testing SSH Connectivity" - - local machines=("swarm-manager" "swarm-worker1" "swarm-worker2" "swarm-worker3") - local failed_machines=() - - for machine in "${machines[@]}"; do - print_info "Testing SSH to $machine..." - if vagrant ssh "$machine" -c "echo 'SSH test successful'" >/dev/null 2>&1; then - print_success "SSH to $machine: OK" - else - print_error "SSH to $machine: FAILED" - failed_machines+=("$machine") - fi - done - - if [ ${#failed_machines[@]} -ne 0 ]; then - print_error "SSH failed for: ${failed_machines[*]}" - return 1 - fi - - print_success "All SSH connections working" - return 0 -} - -# Function to test Ansible connectivity -test_ansible() { - print_header "Testing Ansible Connectivity" - - print_info "Running Ansible ping test..." - if ansible all -i inventory -m ping; then - print_success "Ansible connectivity test passed" - return 0 - else - print_error "Ansible connectivity test failed" - return 1 - fi -} - -# Function to run setup playbook -run_setup() { - print_header "Running Setup Playbook" - - print_info "Installing Ansible roles..." - if ansible-galaxy install -r ansible-requirements.yml --force; then - print_success "Ansible roles installed successfully" - else - print_error "Failed to install Ansible roles" - return 1 - fi - - print_info "Installing dependencies and creating swap..." - if ansible-playbook -i inventory setup-playbook.yml; then - print_success "Setup playbook completed successfully" - return 0 - else - print_error "Setup playbook failed" - return 1 - fi -} - -# Function to run deployment playbook -run_deployment() { - print_header "Running Deployment Playbook" - - print_info "Deploying applications and services..." - if ansible-playbook -i inventory deploy-playbook.yml; then - print_success "Deployment playbook completed successfully" - return 0 - else - print_error "Deployment playbook failed" - return 1 - fi -} - -# Function to run comprehensive tests -run_tests() { - print_header "Running Comprehensive Tests" - - local test_results=() - - # Test 1: SSH Connectivity - if test_ssh; then - test_results+=("SSH: โœ… PASS") - else - test_results+=("SSH: โŒ FAIL") - fi - - # Test 2: Ansible Connectivity - if test_ansible; then - test_results+=("Ansible: โœ… PASS") - else - test_results+=("Ansible: โŒ FAIL") - fi - - # Test 3: Setup Playbook - if run_setup; then - test_results+=("Setup: โœ… PASS") - else - test_results+=("Setup: โŒ FAIL") - fi - - # Test 4: Deployment Playbook - if run_deployment; then - test_results+=("Deployment: โœ… PASS") - else - test_results+=("Deployment: โŒ FAIL") - fi - - # Test 5: Verify swap is active - print_info "Verifying swap is active..." - if ansible all -i inventory -m shell -a "cat /proc/swaps" | grep -q "swapfile"; then - test_results+=("Swap: โœ… PASS") - else - test_results+=("Swap: โŒ FAIL") - fi - - # Test 6: Verify Docker is running - print_info "Verifying Docker is running..." - if ansible all -i inventory -m shell -a "docker --version" >/dev/null 2>&1; then - test_results+=("Docker: โœ… PASS") - else - test_results+=("Docker: โŒ FAIL") - fi - - # Test 7: Verify Docker Swarm is initialized - print_info "Verifying Docker Swarm cluster..." - if ansible swarm_managers -i inventory -m shell -a "docker node ls" >/dev/null 2>&1; then - test_results+=("Swarm: โœ… PASS") - else - test_results+=("Swarm: โŒ FAIL") - fi - - # Display test results - print_header "Test Results Summary" - for result in "${test_results[@]}"; do - echo " $result" - done - - # Count failures - local failures=$(printf '%s\n' "${test_results[@]}" | grep -c "โŒ FAIL" || true) - - if [ "$failures" -eq 0 ]; then - print_success "All tests passed! ๐ŸŽ‰" - return 0 - else - print_error "$failures test(s) failed" - return 1 - fi -} - -# Function to show help -show_help() { - echo "Reset and Test Script for Debian Vagrant Cluster" - echo "" - echo "Usage: $0 [COMMAND]" - echo "" - echo "Commands:" - echo " full-reset Destroy everything and run full test cycle" - echo " destroy-only Only destroy all machines" - echo " start-only Only start all machines" - echo " test-only Only run tests (assumes machines are running)" - echo " ssh-test Only test SSH connectivity" - echo " ansible-test Only test Ansible connectivity" - echo " setup-only Only run setup playbook" - echo " deploy-only Only run deployment playbook" - echo " help Show this help message" - echo "" - echo "Examples:" - echo " $0 full-reset # Complete destroy/recreate/test cycle" - echo " $0 test-only # Run tests on existing machines" - echo " $0 ssh-test # Quick SSH connectivity check" - echo "" - echo "This script will:" - echo " 1. Check prerequisites (vagrant, ansible, make)" - echo " 2. Destroy all VMs and clean up" - echo " 3. Start all VMs fresh" - echo " 4. Test SSH connectivity" - echo " 5. Test Ansible connectivity" - echo " 6. Run setup playbook (dependencies, swap)" - echo " 7. Run deployment playbook (Docker, services)" - echo " 8. Verify everything is working" -} - -# Main script logic -main() { - local command=${1:-help} - - case "$command" in - full-reset) - print_header "Full Reset and Test Cycle" - check_prerequisites - destroy_all - start_all - run_tests - ;; - destroy-only) - print_header "Destroy Only" - check_prerequisites - destroy_all - ;; - start-only) - print_header "Start Only" - check_prerequisites - start_all - ;; - test-only) - print_header "Test Only" - check_prerequisites - run_tests - ;; - ssh-test) - print_header "SSH Test Only" - check_prerequisites - test_ssh - ;; - ansible-test) - print_header "Ansible Test Only" - check_prerequisites - test_ansible - ;; - setup-only) - print_header "Setup Only" - check_prerequisites - run_setup - ;; - deploy-only) - print_header "Deploy Only" - check_prerequisites - run_deployment - ;; - help|--help|-h) - show_help - ;; - *) - print_error "Unknown command: $command" - show_help - exit 1 - ;; - esac -} - -# Run main function with all arguments -main "$@" - else - print_error "Setup playbook failed" - return 1 - fi -} - -# Function to run deployment playbook -run_deployment() { - print_header "Running Deployment Playbook" - - print_info "Deploying applications and services..." - if ansible-playbook -i inventory deploy-playbook.yml; then - print_success "Deployment playbook completed successfully" - return 0 - else - print_error "Deployment playbook failed" - return 1 - fi -} - -# Function to run comprehensive tests -run_tests() { - print_header "Running Comprehensive Tests" - - local test_results=() - - # Test 1: SSH Connectivity - if test_ssh; then - test_results+=("SSH: โœ… PASS") - else - test_results+=("SSH: โŒ FAIL") - fi - - # Test 2: Ansible Connectivity - if test_ansible; then - test_results+=("Ansible: โœ… PASS") - else - test_results+=("Ansible: โŒ FAIL") - fi - - # Test 3: Setup Playbook - if run_setup; then - test_results+=("Setup: โœ… PASS") - else - test_results+=("Setup: โŒ FAIL") - fi - - # Test 4: Deployment Playbook - if run_deployment; then - test_results+=("Deployment: โœ… PASS") - else - test_results+=("Deployment: โŒ FAIL") - fi - - # Test 5: Verify swap is active - print_info "Verifying swap is active..." - if ansible all -i inventory -m shell -a "cat /proc/swaps" | grep -q "swapfile"; then - test_results+=("Swap: โœ… PASS") - else - test_results+=("Swap: โŒ FAIL") - fi - - # Test 6: Verify Docker is running - print_info "Verifying Docker is running..." - if ansible all -i inventory -m shell -a "docker --version" >/dev/null 2>&1; then - test_results+=("Docker: โœ… PASS") - else - test_results+=("Docker: โŒ FAIL") - fi - - # Test 7: Verify Docker Swarm is initialized - print_info "Verifying Docker Swarm cluster..." - if ansible swarm_managers -i inventory -m shell -a "docker node ls" >/dev/null 2>&1; then - test_results+=("Swarm: โœ… PASS") - else - test_results+=("Swarm: โŒ FAIL") - fi - - # Display test results - print_header "Test Results Summary" - for result in "${test_results[@]}"; do - echo " $result" - done - - # Count failures - local failures=$(printf '%s\n' "${test_results[@]}" | grep -c "โŒ FAIL" || true) - - if [ "$failures" -eq 0 ]; then - print_success "All tests passed! ๐ŸŽ‰" - return 0 - else - print_error "$failures test(s) failed" - return 1 - fi -} - -# Function to show help -show_help() { - echo "Reset and Test Script for Debian Vagrant Cluster" - echo "" - echo "Usage: $0 [COMMAND]" - echo "" - echo "Commands:" - echo " full-reset Destroy everything and run full test cycle" - echo " destroy-only Only destroy all machines" - echo " start-only Only start all machines" - echo " test-only Only run tests (assumes machines are running)" - echo " ssh-test Only test SSH connectivity" - echo " ansible-test Only test Ansible connectivity" - echo " setup-only Only run setup playbook" - echo " deploy-only Only run deployment playbook" - echo " help Show this help message" - echo "" - echo "Examples:" - echo " $0 full-reset # Complete destroy/recreate/test cycle" - echo " $0 test-only # Run tests on existing machines" - echo " $0 ssh-test # Quick SSH connectivity check" - echo "" - echo "This script will:" - echo " 1. Check prerequisites (vagrant, ansible, make)" - echo " 2. Destroy all VMs and clean up" - echo " 3. Start all VMs fresh" - echo " 4. Test SSH connectivity" - echo " 5. Test Ansible connectivity" - echo " 6. Run setup playbook (dependencies, swap)" - echo " 7. Run deployment playbook (Docker, services)" - echo " 8. Verify everything is working" -} - -# Main script logic -main() { - local command=${1:-help} - - case "$command" in - full-reset) - print_header "Full Reset and Test Cycle" - check_prerequisites - destroy_all - start_all - run_tests - ;; - destroy-only) - print_header "Destroy Only" - check_prerequisites - destroy_all - ;; - start-only) - print_header "Start Only" - check_prerequisites - start_all - ;; - test-only) - print_header "Test Only" - check_prerequisites - run_tests - ;; - ssh-test) - print_header "SSH Test Only" - check_prerequisites - test_ssh - ;; - ansible-test) - print_header "Ansible Test Only" - check_prerequisites - test_ansible - ;; - setup-only) - print_header "Setup Only" - check_prerequisites - run_setup - ;; - deploy-only) - print_header "Deploy Only" - check_prerequisites - run_deployment - ;; - help|--help|-h) - show_help - ;; - *) - print_error "Unknown command: $command" - show_help - exit 1 - ;; - esac -} - -# Run main function with all arguments -main "$@" diff --git a/setup-playbook.yml b/setup-playbook.yml deleted file mode 100644 index 5f505b3..0000000 --- a/setup-playbook.yml +++ /dev/null @@ -1,124 +0,0 @@ ---- -# Setup Playbook for Docker Swarm Cluster -# This playbook installs essential dependencies including Python, Docker, and creates swap - -- name: Setup Docker Swarm nodes - hosts: swarm_nodes - become: yes - gather_facts: no - - vars: - swap_file_size_mb: 1024 - swap_file_state: present - swap_file_existing_size_mb: 0 - - roles: - - role: geerlingguy.swap - swap_file_size_mb: 1024 - swap_file_state: present - - tasks: - - name: Update apt package index - apt: - update_cache: yes - cache_valid_time: 3600 - - - name: Install essential packages - apt: - name: - - python3 - - python3-pip - - ansible - - curl - - wget - - sudo - - util-linux - - apt-transport-https - - ca-certificates - - gnupg - - lsb-release - state: present - - - name: Create sudoers entry for vagrant user - lineinfile: - path: /etc/sudoers.d/vagrant - line: "vagrant ALL=(ALL) NOPASSWD:ALL" - create: yes - mode: '0440' - - - name: Add Docker GPG key - apt_key: - url: https://download.docker.com/linux/debian/gpg - state: present - - - name: Add Docker repository - apt_repository: - repo: "deb [arch=amd64] https://download.docker.com/linux/debian bookworm stable" - state: present - update_cache: yes - - - name: Install Docker CE - apt: - name: - - docker-ce - - docker-ce-cli - - containerd.io - - docker-compose-plugin - state: present - - - name: Add vagrant user to docker group - user: - name: vagrant - groups: docker - append: yes - - - name: Start and enable Docker service - systemd: - name: docker - state: started - enabled: yes - - - - name: Verify Python installation - command: python3 --version - register: python_version - changed_when: false - - - name: Show Python version - debug: - msg: "{{ python_version.stdout }}" - - - name: Verify pip installation - command: pip3 --version - register: pip_version - changed_when: false - - - name: Show pip version - debug: - msg: "{{ pip_version.stdout }}" - - - name: Create test directory - file: - path: /home/vagrant/test - state: directory - owner: vagrant - group: vagrant - mode: '0755' - - - name: Display system information - command: uname -a - register: system_info - changed_when: false - - - name: Show system information - debug: - msg: "{{ system_info.stdout }}" - - - name: Check memory and swap usage - command: free -m - register: memory_info - changed_when: false - - - name: Show memory and swap usage - debug: - msg: "{{ memory_info.stdout_lines }}" diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile new file mode 100644 index 0000000..220dc26 --- /dev/null +++ b/vagrant/Vagrantfile @@ -0,0 +1,56 @@ +nodes = [ + { :hostname => 'ansible-manager', :ip => '192.168.56.9', :ram => 256, :cpus => 1 }, + { :hostname => 'swarm-master-1', :ip => '192.168.56.10', :ram => 256, :cpus => 1 }, + # { :hostname => 'swarm-master-2', :ip => '192.168.56.11', :ram => 256, :cpus => 1 }, + # { :hostname => 'swarm-worker-1', :ip => '192.168.56.12', :ram => 256, :cpus => 1 }, +# { :hostname => 'swarm-worker-2', :ip => '192.168.56.13', :ram => 1024, :cpus => 1 } +] + +Vagrant.configure("2") do |config| + # config.ssh.insert_key = false + # config.ssh.forward_agent = true + config.vm.provision "ansible" do |ansible| + ansible.playbook = "setup.yml" + # ansible.inventory_path = "../ansible/inventory" + # ansible.verbose = true + # ansible.limit = "all" + # # ansible.raw_arguments = ["--timeout=60"] + end + nodes.each do |node| + puts "Provisioning node: #{node[:hostname]}" + config.vm.define node[:hostname] do |node_config| + node_config.vm.hostname = node[:hostname] + node_config.vm.box = "debian/bullseye64" + # node_config.vm.box_version = "20250415.336224" + + # node_config.ssh.private_key_path = "../keys/access" + + # node_config.vm.provision "shell", inline: <<-SHELL + # mkdir -p /home/vagrant/.ssh + # echo '$(cat ../keys/access.pub)' >> /home/vagrant/.ssh/authorized_keys + # chown -R vagrant:vagrant /home/vagrant/.ssh + # chmod 700 /home/vagrant/.ssh + # chmod 600 /home/vagrant/.ssh/authorized_keys + # SHELL + # config.vm.provision "shell" do |s| + # ssh_pub_key = File.readlines("../keys/access.pub").first.strip + # s.inline = <<-SHELL + # echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys + # echo #{ssh_pub_key} >> /root/.ssh/authorized_keys + # SHELL + # end + # node_config.vm.network "private_network", ip: node[:ip] + # node_config.vm.provider "virtualbox" do |vb| + # vb.name = node[:hostname] + # vb.memory = node[:ram] + # vb.cpus = node[:cpus] + # end + end + end + + # config.vm.define "ansible-manager" do |ansible| + # ansible.vm.provision "file", source: "../ansible", destination: "$HOME" + # ansible.vm.provision "shell", path: "ansible.sh" + # ansible.vm.provision "shell", inline: "echo 'hello ansible!'" + # end +end diff --git a/vagrant/setup.yml b/vagrant/setup.yml new file mode 100644 index 0000000..d811ec1 --- /dev/null +++ b/vagrant/setup.yml @@ -0,0 +1,17 @@ +--- +- hosts: all + become: true + + tasks: + # write hello world to a file in the home directory + - name: write hello + copy: + content: "hello ansible!" + dest: /home/vagrant/hello.txt + mode: 0644 + become: true + + - name: Echo hello + shell: echo 'hello ansible!' + args: + chdir: $HOME