Integrated proxmox
This commit is contained in:
BIN
.requirements.txt.swp
Normal file
BIN
.requirements.txt.swp
Normal file
Binary file not shown.
@@ -11,3 +11,7 @@ home_pub_key: https://raw.githubusercontent.com/jcwimer/ubuntu-template/master/p
|
|||||||
standard_user: cody
|
standard_user: cody
|
||||||
git_user: "Jacob Cody Wimer"
|
git_user: "Jacob Cody Wimer"
|
||||||
git_email: "jacob.wimer@gmail.com"
|
git_email: "jacob.wimer@gmail.com"
|
||||||
|
proxmox_user: "root@pam"
|
||||||
|
proxmox_host: "10.0.0.153"
|
||||||
|
proxmox_password: "{{ lookup('env', 'PROXMOX_PASSWORD') }}"
|
||||||
|
ubuntu_template_vm_name: "ubuntu-server-1404"
|
||||||
|
|||||||
5
hosts
5
hosts
@@ -1,4 +1,4 @@
|
|||||||
#[standard]
|
[standard]
|
||||||
#wiki.wimer.local
|
#wiki.wimer.local
|
||||||
#swarm-manager-01.wimer.local
|
#swarm-manager-01.wimer.local
|
||||||
#swarm-manager-02.wimer.local
|
#swarm-manager-02.wimer.local
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
#elk.wimer.local
|
#elk.wimer.local
|
||||||
#guacamole.wimer.local
|
#guacamole.wimer.local
|
||||||
#fileserver.wimer.local
|
#fileserver.wimer.local
|
||||||
|
test2 ansible_host=10.0.0.152
|
||||||
|
|
||||||
[developer-machines]
|
[developer-machines]
|
||||||
codydev ansible_host=10.0.0.207
|
#codydev ansible_host=10.0.0.207
|
||||||
|
|||||||
52
playbooks/kvm.yml
Normal file
52
playbooks/kvm.yml
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Create machine and set up ip
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
gather_facts: no
|
||||||
|
serial: 1
|
||||||
|
tasks:
|
||||||
|
- name: Clone VM
|
||||||
|
delegate_to: localhost
|
||||||
|
proxmox_kvm:
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
clone : "{{ ubuntu_template_vm_name }}"
|
||||||
|
name : '{{ inventory_hostname }}'
|
||||||
|
node : 'rack2'
|
||||||
|
storage : 'SSD1'
|
||||||
|
format : 'qcow2'
|
||||||
|
timeout : 3000
|
||||||
|
register: cloned
|
||||||
|
|
||||||
|
- name: Wait 10 seconds for proxmox to register the new node
|
||||||
|
wait_for: timeout=10
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Start VM
|
||||||
|
delegate_to: localhost
|
||||||
|
proxmox_kvm:
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
name: '{{ inventory_hostname }}'
|
||||||
|
node: rack2
|
||||||
|
state: started
|
||||||
|
when: cloned.changed
|
||||||
|
|
||||||
|
- name: Wait for connection
|
||||||
|
delegate_to: 10.0.0.211
|
||||||
|
wait_for_connection:
|
||||||
|
delay: 60
|
||||||
|
timeout: 180
|
||||||
|
when: cloned.changed
|
||||||
|
|
||||||
|
- include: ../roles/configure-interfaces/tasks/main.yml
|
||||||
|
delegate_to: 10.0.0.211
|
||||||
|
when: cloned.changed
|
||||||
|
|
||||||
|
- name: wait for connection
|
||||||
|
wait_for_connection:
|
||||||
|
delay: 60
|
||||||
|
timeout: 180
|
||||||
33
playbooks/lxc-test.yml
Normal file
33
playbooks/lxc-test.yml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Create LXC
|
||||||
|
hosts: localhost
|
||||||
|
user: cody
|
||||||
|
serial: 100%
|
||||||
|
tasks:
|
||||||
|
- name: Create it
|
||||||
|
proxmox:
|
||||||
|
node: 'rack2'
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
password: "{{ proxmox_password }}"
|
||||||
|
hostname: '{{ inventory_hostname }}'
|
||||||
|
memory: 512
|
||||||
|
cores: 2
|
||||||
|
swap: 4096
|
||||||
|
disk: 50
|
||||||
|
state: present
|
||||||
|
netif: '{"net0":"name=eth0,gw=10.0.0.1,ip={{ ansible_host }}/24,bridge=vmbr0"}'
|
||||||
|
ostemplate: 'local:vztmpl/ubuntu-14.04-standard_14.04-1_amd64.tar.gz'
|
||||||
|
searchdomain: wimer.local
|
||||||
|
pubkey: 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDHCdYYL9IWTXyOo4qoTBkn2dlV+EKZdir5ApnLcn7yJtI89Y3UP/X4ZNtI4ZU28bCooBoYryD49XvmBXRPujMP2WR9EL9oMz5fLgow8fjYxp6zMfkBsdDBKaxJN7gx5p0JT2zRFAEmQzP085FjauPT8J7vDm2tgumYgpoze6/BmknISkJ7Ib+Opkig/JI3syHKnRij/mnN70W2lpAISaqvPXTQBX3/VWNPCWunDJfbsmMAIJU+mMDYERFKdIt3J2e8KYjYl9DRecsZFG/xLKNF54U/8LnW8pTLzoPW+Q9sPMg2/GH+JyE3Fv5xr5l+J5bm4j8i4GBuFPL0vIqBjvH cody@codydev'
|
||||||
|
|
||||||
|
- name: Turn in on
|
||||||
|
proxmox:
|
||||||
|
node: 'rack2'
|
||||||
|
api_user: "{{ proxmox_user }}"
|
||||||
|
api_password: "{{ proxmox_password }}"
|
||||||
|
api_host: "{{ proxmox_host }}"
|
||||||
|
hostname: '{{ inventory_hostname }}'
|
||||||
|
state: started
|
||||||
@@ -4,6 +4,13 @@
|
|||||||
# ansible-playbook -i ${project_dir}/hosts ${project_dir}/playbooks/site.yml \
|
# ansible-playbook -i ${project_dir}/hosts ${project_dir}/playbooks/site.yml \
|
||||||
# -extra-vars "home_pub_key=<pub-key-location-to-curl> standard_user=<user_name> git_user=<git-user> git_email=<git-email>"
|
# -extra-vars "home_pub_key=<pub-key-location-to-curl> standard_user=<user_name> git_user=<git-user> git_email=<git-email>"
|
||||||
|
|
||||||
|
- name: Install ansible dependencies
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
gather_facts: no
|
||||||
|
serial: 100%
|
||||||
|
tasks:
|
||||||
|
- include: ../roles/ansible-dependencies/tasks/main.yml
|
||||||
|
|
||||||
- name: Apply common configuration to all nodes
|
- name: Apply common configuration to all nodes
|
||||||
hosts: all
|
hosts: all
|
||||||
|
|||||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
ansible==2.4.0.0
|
||||||
|
proxmoxer==1.0.2
|
||||||
11
roles/ansible-dependencies/tasks/main.yml
Normal file
11
roles/ansible-dependencies/tasks/main.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
- name: Install package dependencies
|
||||||
|
raw: apt-get update -qq && apt-get install -y python-simplejson python-urllib3 python-openssl python-pyasn1 python-pip ca-certificates
|
||||||
|
|
||||||
|
- name: Install pip dependencies
|
||||||
|
raw: pip install ndg-httpsclient
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Install pip dependencies again because it fails sometimes
|
||||||
|
raw: pip install ndg-httpsclient
|
||||||
|
ignore_errors: true
|
||||||
@@ -40,6 +40,15 @@
|
|||||||
- build-essential
|
- build-essential
|
||||||
- tmux
|
- tmux
|
||||||
|
|
||||||
|
- name: Create standard user
|
||||||
|
user:
|
||||||
|
name: "{{ standard_user }}"
|
||||||
|
groups:
|
||||||
|
- sudo
|
||||||
|
- docker
|
||||||
|
state: present
|
||||||
|
shell: /bin/bash
|
||||||
|
|
||||||
- name: Add standard_user to docker group
|
- name: Add standard_user to docker group
|
||||||
user:
|
user:
|
||||||
name: "{{ standard_user }}"
|
name: "{{ standard_user }}"
|
||||||
@@ -54,21 +63,9 @@
|
|||||||
state: present
|
state: present
|
||||||
key: "{{ home_pub_key }}"
|
key: "{{ home_pub_key }}"
|
||||||
|
|
||||||
- git_config:
|
|
||||||
name: user.name
|
|
||||||
value: "{{ git_user }}"
|
|
||||||
become: yes
|
|
||||||
become_user: "{{ standard_user }}"
|
|
||||||
|
|
||||||
- git_config:
|
|
||||||
name: user.email
|
|
||||||
value: "{{ git_email }}"
|
|
||||||
become: yes
|
|
||||||
become_user: "{{ standard_user }}"
|
|
||||||
|
|
||||||
- name: Docker compose version
|
- name: Docker compose version
|
||||||
get_url:
|
get_url:
|
||||||
url: https://github.com/docker/compose/releases/download/{{docker_compose_version_to_install}}/docker-compose-`uname -s`-`uname -m`
|
url: "https://github.com/docker/compose/releases/download/{{docker_compose_version_to_install}}/docker-compose-{{ ansible_system }}-{{ ansible_userspace_architecture }}"
|
||||||
dest: /usr/local/bin/docker-compose
|
dest: /usr/local/bin/docker-compose
|
||||||
mode: 755
|
mode: 755
|
||||||
|
|
||||||
@@ -79,6 +76,14 @@
|
|||||||
- name: Replace sudoers file
|
- name: Replace sudoers file
|
||||||
template: src=../roles/common/templates/sudoers.j2 dest=/etc/sudoers
|
template: src=../roles/common/templates/sudoers.j2 dest=/etc/sudoers
|
||||||
|
|
||||||
|
- name: Create /etc/docker
|
||||||
|
file:
|
||||||
|
path: /etc/docker
|
||||||
|
group: root
|
||||||
|
owner: root
|
||||||
|
mode: 700
|
||||||
|
state: directory
|
||||||
|
|
||||||
- name: Replace docker daemon file
|
- name: Replace docker daemon file
|
||||||
template: src=../roles/common/templates/docker-daemon.json.j2 dest=/etc/docker/daemon.json
|
template: src=../roles/common/templates/docker-daemon.json.j2 dest=/etc/docker/daemon.json
|
||||||
register: dockerdaemon
|
register: dockerdaemon
|
||||||
@@ -104,11 +109,10 @@
|
|||||||
line="{{ nfs_location }}:/volumeUSB1/usbshare/raw-files/fileserver/shares/lab-data /data nfs defaults 0 0"
|
line="{{ nfs_location }}:/volumeUSB1/usbshare/raw-files/fileserver/shares/lab-data /data nfs defaults 0 0"
|
||||||
|
|
||||||
- name: Mount USB lab data directory
|
- name: Mount USB lab data directory
|
||||||
when: not data_mounted.stat.exists
|
|
||||||
mount:
|
mount:
|
||||||
path: /data
|
path: /data
|
||||||
src: 10.0.0.150:/volumeUSB1/usbshare/raw-files/fileserver/shares/lab-data
|
src: 10.0.0.150:/volumeUSB1/usbshare/raw-files/fileserver/shares/lab-data
|
||||||
state: present
|
state: mounted
|
||||||
fstype: nfs
|
fstype: nfs
|
||||||
|
|
||||||
- name: test for swap partition
|
- name: test for swap partition
|
||||||
@@ -119,6 +123,7 @@
|
|||||||
- name: create swapfile
|
- name: create swapfile
|
||||||
when: swapfile|failed
|
when: swapfile|failed
|
||||||
shell: fallocate -l 4G /swapfile
|
shell: fallocate -l 4G /swapfile
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: set swapfile permissions
|
- name: set swapfile permissions
|
||||||
when: swapfile|failed
|
when: swapfile|failed
|
||||||
@@ -134,6 +139,7 @@
|
|||||||
- name: enable swap
|
- name: enable swap
|
||||||
when: swapfile|failed
|
when: swapfile|failed
|
||||||
shell: swapon /swapfile
|
shell: swapon /swapfile
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: add swapfile
|
- name: add swapfile
|
||||||
when: swapfile|failed
|
when: swapfile|failed
|
||||||
@@ -144,7 +150,8 @@
|
|||||||
|
|
||||||
- name: set swappiness (temporarily)
|
- name: set swappiness (temporarily)
|
||||||
when: swapfile|failed
|
when: swapfile|failed
|
||||||
shell: echo 10 | tee /proc/sys/vm/swappiness
|
shell: echo 10 > /proc/sys/vm/swappiness
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: set swappiness (permanent)
|
- name: set swappiness (permanent)
|
||||||
when: swapfile|failed
|
when: swapfile|failed
|
||||||
@@ -155,7 +162,8 @@
|
|||||||
|
|
||||||
- name: set cache pressure (temporarily)
|
- name: set cache pressure (temporarily)
|
||||||
when: swapfile|failed
|
when: swapfile|failed
|
||||||
shell: echo 50 | tee /proc/sys/vm/vfs_cache_pressure
|
shell: echo 50 > /proc/sys/vm/vfs_cache_pressure
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: set cache pressure (permanent)
|
- name: set cache pressure (permanent)
|
||||||
when: swapfile|failed
|
when: swapfile|failed
|
||||||
|
|||||||
15
roles/configure-interfaces/tasks/main.yml
Normal file
15
roles/configure-interfaces/tasks/main.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Copy interface file
|
||||||
|
template: src=../roles/configure-interfaces/templates/interfaces dest=/etc/network/interfaces
|
||||||
|
|
||||||
|
|
||||||
|
- name: Copy interface cfg file
|
||||||
|
vars:
|
||||||
|
interface_name: eth0
|
||||||
|
template: src=../roles/configure-interfaces/templates/eth.cfg.j2 dest=/etc/network/interfaces.d/'{{ interface_name }}'.cfg
|
||||||
|
|
||||||
|
- name: Up down interface
|
||||||
|
raw: ifdown {{ interface_name }} && ifup {{ interface_name }}
|
||||||
|
vars:
|
||||||
|
interface_name: eth0
|
||||||
7
roles/configure-interfaces/templates/eth.cfg.j2
Normal file
7
roles/configure-interfaces/templates/eth.cfg.j2
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
auto {{ interface_name }}
|
||||||
|
|
||||||
|
iface {{ interface_name }} inet static
|
||||||
|
address {{ ansible_host }}
|
||||||
|
netmask 255.255.255.0
|
||||||
|
gateway 10.0.0.1
|
||||||
|
dns-nameservers 10.0.0.204
|
||||||
6
roles/configure-interfaces/templates/interfaces
Normal file
6
roles/configure-interfaces/templates/interfaces
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
auto lo
|
||||||
|
iface lo inet loopback
|
||||||
|
|
||||||
|
# The primary network interface
|
||||||
|
|
||||||
|
source /etc/network/interfaces.d/*.cfg
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
mount:
|
mount:
|
||||||
path: /raw-files
|
path: /raw-files
|
||||||
src: 10.0.0.150:/volumeUSB1/usbshare/raw-files
|
src: 10.0.0.150:/volumeUSB1/usbshare/raw-files
|
||||||
state: present
|
state: mounted
|
||||||
fstype: nfs
|
fstype: nfs
|
||||||
|
|
||||||
- name: Install ngrok
|
- name: Install ngrok
|
||||||
|
|||||||
6
supporting-scripts/site.sh
Executable file
6
supporting-scripts/site.sh
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#keep adding dirname's to go up more directories.
|
||||||
|
project_dir="$(dirname $( dirname $(readlink -f ${BASH_SOURCE[0]})))"
|
||||||
|
#ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ${project_dir}/hosts ${project_dir}/playbooks/lxc-test.yml
|
||||||
|
ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ${project_dir}/hosts ${project_dir}/playbooks/kvm.yml
|
||||||
|
ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ${project_dir}/hosts ${project_dir}/playbooks/site.yml
|
||||||
Reference in New Issue
Block a user