From bc4d380c063f8e6a35d0ede2c282fd67e0d50df2 Mon Sep 17 00:00:00 2001 From: rblundon Date: Wed, 26 Mar 2025 10:52:39 -0500 Subject: [PATCH] move pc --- 03-infra01-server/install.yml | 20 ++++++++++ dns-entry.yml | 40 ++++++++++++++++++++ group_vars/all/vars | 6 +++ group_vars/freeipa/vars | 2 +- group_vars/{hub-cluster => hub_cluster}/vars | 2 +- host_vars/pve01/vars | 6 +++ inventory.yml | 7 ++-- proxmox.yml | 2 + site.yml | 14 +++++++ templates/dns.tf.j2 | 11 ++++++ terraform/dns/provider.tf | 32 ++++++++++++++++ 11 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 dns-entry.yml rename group_vars/{hub-cluster => hub_cluster}/vars (87%) create mode 100644 host_vars/pve01/vars create mode 100644 proxmox.yml create mode 100644 site.yml create mode 100644 templates/dns.tf.j2 create mode 100644 terraform/dns/provider.tf diff --git a/03-infra01-server/install.yml b/03-infra01-server/install.yml index 7098b4c..2361270 100644 --- a/03-infra01-server/install.yml +++ b/03-infra01-server/install.yml @@ -2,6 +2,7 @@ - name: Install all software on infra01 hosts: infra01 gather_facts: true + become: true collections: - somaz94.ansible_k8s_iac_tool @@ -19,6 +20,24 @@ state: present become: true + - name: Install dnf-plugins-core + ansible.builtin.package: + name: dnf-plugins-core + state: present + become: true + + - name: Install hashicorp repo + ansible.builtin.package: + name: https://rpm.releases.hashicorp.com/fedora/hashicorp.repo + https://rpm.releases.hashicorp.com/fedora/hashicorp.repo + state: present + + - name: Install terraform + ansible.builtin.package: + name: terraform + state: present + become: true + # - name: Clone Git repository # ansible.builtin.git: # repo: "https://github.com/rblundon/homelab.git" @@ -28,3 +47,4 @@ roles: - install_kustomize + diff --git a/dns-entry.yml b/dns-entry.yml new file mode 100644 index 0000000..3377683 --- /dev/null +++ b/dns-entry.yml @@ -0,0 +1,40 @@ +--- +# file: dns-entry.yml + +- name: Master playbook for home lab + hosts: all + gather_facts: false + tasks: + - name: Create DNS entry for {{ inventory_hostname }} + when: ip_address is defined + delegate_to: "{{ dns_server }}" + block: + - name: Check if terraform directory exists + ansible.builtin.stat: + path: ~/homelab/terraform/dns + register: terraform_dir + + - name: Create Terraform directory for DNS entries + ansible.builtin.file: + path: ~/homelab/terraform/dns + state: directory + mode: '0755' + when: not terraform_dir.stat.exists + + - name: Create Terraform file for host + ansible.builtin.template: + src: templates/dns.tf.j2 + dest: ~/homelab/terraform/dns/{{ inventory_hostname }}.tf + mode: '0644' + + handlers: + - name: Update DNS entries via Terraform + delegate_to: "{{ dns_server }}" + community.general.terraform: + project_path: ~/homelab/terraform/dns/ + variables: + freeipa_server: "{{ dns_server }}" + freeipa_admin: "{{ dns_admin }}" + freeipa_password: "{{ vault_freeipa_password }}" + state: present + force_init: true diff --git a/group_vars/all/vars b/group_vars/all/vars index ed97d53..c91009f 100644 --- a/group_vars/all/vars +++ b/group_vars/all/vars @@ -1 +1,7 @@ --- +# file: group_vars/all + +# DNS variables +dns_server: "infra01.int.mk-labs.cloud" +dns_admin: "admin" +base_domain: "int.mk-labs.cloud" \ No newline at end of file diff --git a/group_vars/freeipa/vars b/group_vars/freeipa/vars index 49b80a1..8a5cebd 100644 --- a/group_vars/freeipa/vars +++ b/group_vars/freeipa/vars @@ -1,3 +1,3 @@ --- -freeipa_user: "admin" +#freeipa_user: "admin" #freeipa_password: "{{ vault_freeipa_password }}" diff --git a/group_vars/hub-cluster/vars b/group_vars/hub_cluster/vars similarity index 87% rename from group_vars/hub-cluster/vars rename to group_vars/hub_cluster/vars index 3c45e44..2928cfd 100644 --- a/group_vars/hub-cluster/vars +++ b/group_vars/hub_cluster/vars @@ -1,6 +1,6 @@ cluster_name: "hub" cluster_version: "4.17.20" -base_domain: "int.mk-labs.cloud" +#base_domain: "int.mk-labs.cloud" worker_node_count: 0 master_node_count: 1 cluster_network: "10.128.0.0/14" diff --git a/host_vars/pve01/vars b/host_vars/pve01/vars new file mode 100644 index 0000000..8159029 --- /dev/null +++ b/host_vars/pve01/vars @@ -0,0 +1,6 @@ +--- +# file: host_vars/pve01/vars +# mac_address: "98:b7:85:1e:c6:f1" +ip_address: "10.1.71.51" +hostname: "pve01.{{ base_domain }}" +# primary_interface: "enp1s0f0" \ No newline at end of file diff --git a/inventory.yml b/inventory.yml index 2122fd7..e568817 100644 --- a/inventory.yml +++ b/inventory.yml @@ -1,8 +1,7 @@ +# file: inventory.yml proxmox: hosts: - pve01: - pve02: - pve03: + pve0[1:3]: freeipa: hosts: @@ -12,6 +11,6 @@ matchbox: hosts: infra01: -hub-cluster: +hub_cluster: hosts: ocp-hub: diff --git a/proxmox.yml b/proxmox.yml new file mode 100644 index 0000000..0f741cf --- /dev/null +++ b/proxmox.yml @@ -0,0 +1,2 @@ +--- +# file: proxmox.yml diff --git a/site.yml b/site.yml new file mode 100644 index 0000000..8d63f8b --- /dev/null +++ b/site.yml @@ -0,0 +1,14 @@ +--- +# file: site.yml + +- name: Master playbook for home lab + hosts: all + gather_facts: true + connection: local + # roles: + # - dns-entry + +# tasks: + +- name: Process DNS entries + ansible.builtin.import_playbook: dns-entry.yml diff --git a/templates/dns.tf.j2 b/templates/dns.tf.j2 new file mode 100644 index 0000000..dd07de8 --- /dev/null +++ b/templates/dns.tf.j2 @@ -0,0 +1,11 @@ +// Terraform DNS entry template + +resource "freeipa_dns_record" "{{ inventory_hostname }}" { + zone_name = "{{ base_domain }}." + name = "{{ inventory_hostname }}" + type = "A" + records = [ + "{{ hostvars[inventory_hostname].ip_address }}", + ] + ttl = 60 +} diff --git a/terraform/dns/provider.tf b/terraform/dns/provider.tf new file mode 100644 index 0000000..13f47d0 --- /dev/null +++ b/terraform/dns/provider.tf @@ -0,0 +1,32 @@ +# Configure the DNS Provider +provider "freeipa" { + host = "infra01.int.mk-labs.cloud" + username = "admin" + password = var.freeipa_password + insecure = true +} + +variable "freeipa_server" { + description = "The server for the FreeIPA provider" + type = string +} + +variable "freeipa_admin" { + description = "The admin username for the FreeIPA provider" + type = string +} + +variable "freeipa_password" { + description = "The password for the FreeIPA provider" + type = string + sensitive = true +} + +terraform { + required_providers { + freeipa = { + source = "rework-space-com/freeipa" + version = "5.0.0" + } + } +}