aboutsummaryrefslogtreecommitdiff
path: root/personal_infra
diff options
context:
space:
mode:
Diffstat (limited to 'personal_infra')
-rw-r--r--personal_infra/README.md27
-rw-r--r--personal_infra/playbooks/apply_puppet.yml18
-rw-r--r--personal_infra/puppet/modules/proxmox/manifests/init.pp11
-rw-r--r--personal_infra/puppet/modules/proxmox/templates/interfaces.epp18
-rw-r--r--personal_infra/puppet/site/h1.pdp7.net.pp1
5 files changed, 74 insertions, 1 deletions
diff --git a/personal_infra/README.md b/personal_infra/README.md
index 9d466890..0cd32d5e 100644
--- a/personal_infra/README.md
+++ b/personal_infra/README.md
@@ -4,3 +4,30 @@ This is a collection of files I use setting up my personal infrastructure.
This is a work in progress, as I am redoing a bit how I do configuration management.
The main source is in a private repo, but I put here as much material as I can make public.
Inventory, vaults, etc. remain in the private repo.
+
+## Ansible
+
+### Initial setup
+
+Symlink everything in this directory into your root infrastructure directory.
+
+Create an `inventory` file.
+
+Run `./setup_venv` to create a virtual environment.
+
+Create `vault_password` with a vault password.
+
+### Usage
+
+Run `. .venv/bin/activate` to activate the virtual environment.
+
+Run Ansible commands normally.
+
+## Ansible/Puppet integration
+
+I prefer using Ansible for orchestration, and Puppet for configuration management.
+
+`playbooks/apply_puppet.yml` runs Puppet using Ansible.
+The `puppet` directory contains Puppet manifests.
+
+The playbook adds the Ansible inventory to Puppet using Hiera.
diff --git a/personal_infra/playbooks/apply_puppet.yml b/personal_infra/playbooks/apply_puppet.yml
index 5267f1ec..15ee4ebf 100644
--- a/personal_infra/playbooks/apply_puppet.yml
+++ b/personal_infra/playbooks/apply_puppet.yml
@@ -27,8 +27,24 @@
unarchive:
src: "{{ local_temp.path }}/puppet.tar.gz"
dest: "{{ remote_temp.path }}"
+ - name: dump variables
+ copy:
+ dest: "{{ remote_temp.path }}/vars.json"
+ content: "{{ hostvars }}"
+ - name: create hiera.yaml
+ copy:
+ dest: "{{ remote_temp.path }}/hiera.yaml"
+ content: |
+ version: 5
+ hierarchy:
+ - name: ansible
+ datadir: {{ remote_temp.path }}
+ path: vars.json
+ data_hash: json_data
- name: run puppet
- command: puppet apply {{ remote_temp.path }}
+ command: puppet apply {{ remote_temp.path }} --modulepath={{ remote_temp.path }}/puppet/modules --hiera_config={{ remote_temp.path }}/hiera.yaml
+ environment:
+ FACTER_ansible_inventory_hostname: "{{ inventory_hostname }}"
- name: clean up local temporary directory
file:
state: absent
diff --git a/personal_infra/puppet/modules/proxmox/manifests/init.pp b/personal_infra/puppet/modules/proxmox/manifests/init.pp
new file mode 100644
index 00000000..dd06cdd0
--- /dev/null
+++ b/personal_infra/puppet/modules/proxmox/manifests/init.pp
@@ -0,0 +1,11 @@
+class proxmox {
+ file {'/etc/network/interfaces':
+ content => epp('proxmox/interfaces', {
+ "network" => lookup("'$ansible_inventory_hostname'.network"),
+ }),
+ }
+ ~>
+ exec {'/usr/sbin/ifreload -a':
+ refreshonly => true
+ }
+}
diff --git a/personal_infra/puppet/modules/proxmox/templates/interfaces.epp b/personal_infra/puppet/modules/proxmox/templates/interfaces.epp
new file mode 100644
index 00000000..e0bfeceb
--- /dev/null
+++ b/personal_infra/puppet/modules/proxmox/templates/interfaces.epp
@@ -0,0 +1,18 @@
+auto lo
+iface lo inet loopback
+
+auto eno1
+iface eno1 inet static
+ address <%= $network['ip'] %>
+ netmask <%= $network['netmask'] %>
+ gateway <%= $network['gateway'] %>
+
+auto vmbr0
+iface vmbr0 inet static
+ address <%= $network['proxmox']['ip'] %>
+ netmask <%= $network['proxmox']['netmask'] %>
+ bridge_ports none
+ bridge_stp off
+ bridge_fd 0
+ post-up echo 1 > /proc/sys/net/ipv4/ip_forward
+ post-up iptables -t nat -A POSTROUTING -s '<%= $network['proxmox']['network'] %>' -o eno1 -j MASQUERADE
diff --git a/personal_infra/puppet/site/h1.pdp7.net.pp b/personal_infra/puppet/site/h1.pdp7.net.pp
index 7ddb4c5f..3dd937c5 100644
--- a/personal_infra/puppet/site/h1.pdp7.net.pp
+++ b/personal_infra/puppet/site/h1.pdp7.net.pp
@@ -1,2 +1,3 @@
node 'h1.pdp7.net' {
+ class {'proxmox':}
}