11import os
22
33project_name = "app/media/MyAnsible"
4-
54ansible_dir = project_name
65group_vars_dir = os .path .join (ansible_dir , "group_vars" )
76host_vars_dir = os .path .join (ansible_dir , "host_vars" )
87roles_dir = os .path .join (ansible_dir , "roles" )
9- install_docker_dir = os .path .join (roles_dir , "install_docker" )
10- tasks_dir = os .path .join (install_docker_dir , "tasks" )
11- vars_dir = os .path .join (install_docker_dir , "vars" )
12- files_dir = os .path .join (install_docker_dir , "files" )
13- handlers_dir = os .path .join (install_docker_dir , "handlers" )
14- templates_dir = os .path .join (install_docker_dir , "templates" )
8+ preinstall_dir = os .path .join (roles_dir , "preinstall" )
9+ tasks_dir = os .path .join (preinstall_dir , "tasks" )
10+ defaults_dir = os .path .join (preinstall_dir , "defaults" )
11+ files_dir = os .path .join (preinstall_dir , "files" )
12+ handlers_dir = os .path .join (preinstall_dir , "handlers" )
13+ templates_dir = os .path .join (preinstall_dir , "templates" )
14+ vars_dir = os .path .join (preinstall_dir , "vars" )
1515
1616# Create project directories
1717os .makedirs (ansible_dir , exist_ok = True )
1818os .makedirs (group_vars_dir , exist_ok = True )
1919os .makedirs (host_vars_dir , exist_ok = True )
2020os .makedirs (roles_dir , exist_ok = True )
21- os .makedirs (install_docker_dir , exist_ok = True )
21+ os .makedirs (preinstall_dir , exist_ok = True )
2222os .makedirs (tasks_dir , exist_ok = True )
23- os .makedirs (vars_dir , exist_ok = True )
23+ os .makedirs (defaults_dir , exist_ok = True )
2424os .makedirs (files_dir , exist_ok = True )
2525os .makedirs (handlers_dir , exist_ok = True )
2626os .makedirs (templates_dir , exist_ok = True )
27+ os .makedirs (vars_dir , exist_ok = True )
2728
2829# Create ansible.cfg
29- with open (os .path .join (ansible_dir , "ansible.cfg" ), "w" ) as ansible_cfg :
30- ansible_cfg .write ("[defaults]\n " )
31- ansible_cfg .write ("host_key_checking=false\n " )
30+ with open (os .path .join (ansible_dir , "ansible.cfg" ), "w" ) as cfg_file :
31+ cfg_file .write ("[defaults]\n " )
32+ cfg_file .write ("host_key_checking=false\n " )
3233
33- # Create group_vars/docker_nodes
34- with open (os .path .join (group_vars_dir , "docker_nodes" ), "w" ) as docker_nodes :
35- docker_nodes .write ("ansible_port: 22\n " )
36- docker_nodes .write ("ansible_user: root\n " )
34+ # Create group_vars/all
35+ with open (os .path .join (group_vars_dir , "all" ), "w" ) as all_file :
36+ all_file .write ("# General\n " )
37+ all_file .write ('install_ansible_modules: "true"\n ' )
38+ all_file .write ('disable_transparent_huge_pages: "true"\n ' )
39+ all_file .write ('setup_interface: "false"\n ' )
40+ all_file .write ("\n " )
41+ all_file .write ("# Network Calico see here for more details https://github.com/projectcalico/calico/releases\n " )
42+ all_file .write ('calico_operator_url: "https://raw.githubusercontent.com/projectcalico/calico/v3.29.0/manifests/tigera-operator.yaml"\n ' )
43+ all_file .write ('calico_crd_url: "https://raw.githubusercontent.com/projectcalico/calico/v3.29.0/manifests/custom-resources.yaml"\n ' )
44+ all_file .write ('pod_network_cidr: "192.168.0.0/16"\n ' )
45+ all_file .write ("\n " )
46+ all_file .write ("# DNS\n " )
47+ all_file .write ('resolv_nameservers: [8.8.8.8, 4.2.2.4] # 403.online\n ' )
48+ all_file .write ("\n " )
49+ all_file .write ("# Sanction shekan\n " )
50+ all_file .write ('use_iran: "true" # change it to "false" if you are outside of iran\n ' )
51+ all_file .write ("\n " )
52+ all_file .write ("# Docker\n " )
53+ all_file .write ('docker_gpg_key_url: "https://download.docker.com/linux/ubuntu/gpg"\n ' )
54+ all_file .write ('docker_gpg_key_path: "/etc/apt/keyrings/docker.gpg"\n ' )
55+ all_file .write ('docker_apt_repo: "https://download.docker.com/linux/ubuntu"\n ' )
56+ all_file .write ("\n " )
57+ all_file .write ("# Kubernetes\n " )
58+ all_file .write ('kubernetes_gpg_keyring_path: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"\n ' )
59+ all_file .write ('kubernetes_gpg_key_url: "https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key"\n ' )
60+ all_file .write ('kubernetes_apt_repo: "https://pkgs.k8s.io/core:/stable:/v1.31/deb/"\n ' )
61+ all_file .write ('k8s_version: "1.31.2" # see here https://kubernetes.io/releases/patch-releases/ and https://github.com/kubernetes/kubernetes/releases\n ' )
62+ all_file .write ("\n " )
63+ all_file .write ("# CRI\n " )
64+ all_file .write ('cri_socket: unix:///var/run/containerd/containerd.sock\n ' )
65+ all_file .write ("\n " )
66+ all_file .write ("# VRRP and HAProxy\n " )
67+ all_file .write ('interface_name: "enp0s8"\n ' )
68+ all_file .write ('virtual_ip: "192.168.178.100"\n ' )
69+ all_file .write ('haproxy_frontend_password: "password"\n ' )
70+ all_file .write ("\n " )
71+ all_file .write ("# Ansible Connection\n " )
72+ all_file .write ("\n " )
73+ all_file .write ('ansible_user: root\n ' )
74+ all_file .write ('ansible_port: 22\n ' )
75+ all_file .write ('ansible_python_interpreter: "/usr/bin/python3"\n ' )
76+ all_file .write ('domain="devopsgpt.com"\n ' )
77+ all_file .write ('apiserver_url="devopsgpt.com"\n ' )
3778
3879# Create hosts
3980with open (os .path .join (ansible_dir , "hosts" ), "w" ) as hosts_file :
40- hosts_file .write ("[docker_nodes]\n " )
41- hosts_file .write ("www.example.com\n " )
81+ hosts_file .write ("[all]\n " )
82+ hosts_file .write ("string private_ip=x.x.x.x\n " )
83+ hosts_file .write ("string private_ip=x.x.x.x\n " )
84+ hosts_file .write ("string private_ip=x.x.x.x\n " )
85+ hosts_file .write ("\n " )
86+ hosts_file .write ("[k8s]\n " )
87+ hosts_file .write ("string\n " )
88+ hosts_file .write ("string\n " )
89+ hosts_file .write ("\n " )
90+ hosts_file .write ("[k8s_masters]\n " )
91+ hosts_file .write ("string\n " )
92+ hosts_file .write ("\n " )
93+ hosts_file .write ("[k8s_workers]\n " )
94+ hosts_file .write ("string\n " )
95+ hosts_file .write ("\n " )
96+ hosts_file .write ("[lb]\n " )
97+ hosts_file .write ("string\n " )
98+
99+ # Create kubernetes_playbook.yml
100+ with open (os .path .join (ansible_dir , "kubernetes_playbook.yml" ), "w" ) as playbook_file :
101+ playbook_file .write ("- hosts: all\n " )
102+ playbook_file .write (" roles:\n " )
103+ playbook_file .write (" - role: preinstall\n " )
104+ playbook_file .write (" gather_facts: yes\n " )
105+ playbook_file .write (" any_errors_fatal: true\n " )
106+ playbook_file .write (" tags: [preinstall]\n " )
107+
108+ # Create preinstall/tasks/basic.yml
109+ with open (os .path .join (tasks_dir , "basic.yml" ), "w" ) as basic_file :
110+ basic_file .write ("- name: Set timezone to UTC\n " )
111+ basic_file .write (" timezone:\n " )
112+ basic_file .write (" name: Etc/UTC\n " )
113+ basic_file .write ("\n " )
114+ basic_file .write ("- name: Set hostname\n " )
115+ basic_file .write (" command: hostnamectl set-hostname {{ inventory_hostname }}\n " )
116+ basic_file .write ("\n " )
117+ basic_file .write ("- name: Remove symlink resolve.conf\n " )
118+ basic_file .write (" file:\n " )
119+ basic_file .write (" path: \" /etc/resolv.conf\" \n " )
120+ basic_file .write (" state: absent\n " )
121+ basic_file .write (" ignore_errors: true\n " )
122+ basic_file .write (" when: use_iran == \" true\" \n " )
123+ basic_file .write ("\n " )
124+ basic_file .write ("- name: Configure resolv.conf\n " )
125+ basic_file .write (" template:\n " )
126+ basic_file .write (" src: \" resolv.conf.j2\" \n " )
127+ basic_file .write (" dest: \" /etc/resolv.conf\" \n " )
128+ basic_file .write (" mode: \" 0644\" \n " )
129+ basic_file .write (" when: use_iran == \" true\" \n " )
130+ basic_file .write ("\n " )
131+ basic_file .write ("- name: Add hostname\n " )
132+ basic_file .write (" lineinfile:\n " )
133+ basic_file .write (" path: /etc/hosts\n " )
134+ basic_file .write (" regexp: '^127\\ .0\\ .0\\ .1'\n " )
135+ basic_file .write (" line: \" 127.0.0.1 {{ inventory_hostname }} localhost\" \n " )
136+ basic_file .write (" owner: root\n " )
137+ basic_file .write (" group: root\n " )
138+ basic_file .write (" mode: 0644\n " )
139+ basic_file .write ("\n " )
140+ basic_file .write ("- name: Install necessary tools\n " )
141+ basic_file .write (" apt:\n " )
142+ basic_file .write (" update_cache: true\n " )
143+ basic_file .write (" name:\n " )
144+ basic_file .write (" - vim\n " )
145+ basic_file .write (" - sudo\n " )
146+ basic_file .write (" - wget\n " )
147+ basic_file .write (" - curl\n " )
148+ basic_file .write (" - telnet\n " )
149+ basic_file .write (" - nload\n " )
150+ basic_file .write (" - s3cmd\n " )
151+ basic_file .write (" - cron\n " )
152+ basic_file .write (" - ipset\n " )
153+ basic_file .write (" - lvm2\n " )
154+ basic_file .write (" - python3\n " )
155+ basic_file .write (" - python3-setuptools\n " )
156+ basic_file .write (" - python3-pip\n " )
157+ basic_file .write (" - python3-apt\n " )
158+ basic_file .write (" - intel-microcode\n " )
159+ basic_file .write (" - htop\n " )
160+ basic_file .write (" - tcpdump\n " )
161+ basic_file .write (" - net-tools\n " )
162+ basic_file .write (" - screen\n " )
163+ basic_file .write (" - tmux\n " )
164+ basic_file .write (" - byobu\n " )
165+ basic_file .write (" - iftop\n " )
166+ basic_file .write (" - bmon\n " )
167+ basic_file .write (" - iperf\n " )
168+ basic_file .write (" - sysstat\n " )
169+ basic_file .write (" - ethtool\n " )
170+ basic_file .write (" - plocate\n " )
171+ basic_file .write (" - thin-provisioning-tools\n " )
172+ basic_file .write (" - conntrack\n " )
173+ basic_file .write (" - stress\n " )
174+ basic_file .write (" - cpufrequtils\n " )
175+ basic_file .write (" - rsync\n " )
176+ basic_file .write (" - xz-utils\n " )
177+ basic_file .write (" - build-essential\n " )
178+ basic_file .write (" - apt-transport-https\n " )
179+ basic_file .write (" - ca-certificates\n " )
180+ basic_file .write (" - software-properties-common\n " )
181+ basic_file .write (" - gnupg-agent\n " )
182+ basic_file .write (" - iptables-persistent\n " )
183+ basic_file .write (" - open-iscsi\n " )
184+ basic_file .write (" - nfs-common\n " )
185+ basic_file .write (" - tzdata\n " )
186+ basic_file .write (" - tree\n " )
187+ basic_file .write (" state: latest\n " )
188+ basic_file .write ("\n " )
189+ basic_file .write ("- name: Fix broken packages\n " )
190+ basic_file .write (" apt:\n " )
191+ basic_file .write (" state: fixed\n " )
192+
193+ # Create preinstall/tasks/main.yml
194+ with open (os .path .join (tasks_dir , "main.yml" ), "w" ) as main_file :
195+ main_file .write ("---\n " )
196+ main_file .write ("- name: basic setup\n " )
197+ main_file .write (" include_tasks: basic.yml\n " )
198+
199+ # Create preinstall/defaults/main.yml
200+ with open (os .path .join (defaults_dir , "main.yml" ), "w" ) as defaults_file :
201+ defaults_file .write ("# Default variables for preinstall role\n " )
42202
43- # Create empty host_vars directory
44- open (os .path .join (host_vars_dir , ".gitkeep" ), 'a' ).close ()
203+ # Create preinstall/files/sample.sh
204+ with open (os .path .join (files_dir , "sample.sh" ), "w" ) as sample_file :
205+ sample_file .write ("#!/bin/bash\n " )
206+ sample_file .write ("# Sample script\n " )
45207
46- # Create docker_playbook.yml
47- with open (os .path .join (ansible_dir , "docker_playbook.yml" ), "w" ) as playbook :
48- playbook .write ("- hosts: all\n " )
49- playbook .write (" roles:\n " )
50- playbook .write (" - install_docker\n " )
208+ # Create preinstall/handlers/main.yml
209+ with open (os .path .join (handlers_dir , "main.yml" ), "w" ) as handlers_file :
210+ handlers_file .write ("# Handlers for preinstall role\n " )
51211
52- # Create install_docker/tasks/main.yml
53- with open (os .path .join (tasks_dir , "main.yml" ), "w" ) as tasks_file :
54- tasks_file .write ("---\n " )
55- tasks_file .write ("- name: Install prerequisite packages\n " )
56- tasks_file .write (" apt:\n " )
57- tasks_file .write (" name: \" {{ item }}\" \n " )
58- tasks_file .write (" state: present\n " )
59- tasks_file .write (" loop: \" {{ prerequisite_packages }}\" \n " )
60- tasks_file .write ("- name: Create directory for Docker keyrings\n " )
61- tasks_file .write (" file:\n " )
62- tasks_file .write (" path: /etc/apt/keyrings\n " )
63- tasks_file .write (" state: directory\n " )
64- tasks_file .write (" mode: '0755'\n " )
65- tasks_file .write ("- name: Download Docker's official GPG key\n " )
66- tasks_file .write (" get_url:\n " )
67- tasks_file .write (" url: https://download.docker.com/linux/ubuntu/gpg\n " )
68- tasks_file .write (" dest: /etc/apt/keyrings/docker.asc\n " )
69- tasks_file .write (" mode: '0644'\n " )
70- tasks_file .write ("- name: Add Docker repository to apt sources\n " )
71- tasks_file .write (" copy:\n " )
72- tasks_file .write (" content: |\n " )
73- tasks_file .write (" deb [arch={{ ansible_architecture }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable\n " )
74- tasks_file .write (" dest: /etc/apt/sources.list.d/docker.list\n " )
75- tasks_file .write ("- name: Update apt cache after adding Docker repo\n " )
76- tasks_file .write (" apt:\n " )
77- tasks_file .write (" update_cache: yes\n " )
78- tasks_file .write ("- name: Install Docker packages\n " )
79- tasks_file .write (" apt:\n " )
80- tasks_file .write (" name: \" {{ item }}\" \n " )
81- tasks_file .write (" state: present\n " )
82- tasks_file .write (" loop: \" {{ docker_packages }}\" \n " )
83- tasks_file .write ("- name: Ensure Docker and containerd services are started and enabled\n " )
84- tasks_file .write (" service:\n " )
85- tasks_file .write (" name: \" {{ item }}\" \n " )
86- tasks_file .write (" state: started\n " )
87- tasks_file .write (" enabled: yes\n " )
88- tasks_file .write (" loop: \" {{ docker_services }}\" \n " )
212+ # Create preinstall/templates/resolv.conf.j2
213+ with open (os .path .join (templates_dir , "resolv.conf.j2" ), "w" ) as resolv_file :
214+ resolv_file .write ("# Generated resolv.conf\n " )
215+ resolv_file .write ("nameserver {{ item }}\n " )
216+ resolv_file .write ("{% for item in resolv_nameservers %}\n " )
217+ resolv_file .write (" {{ item }}\n " )
218+ resolv_file .write ("{% endfor %}\n " )
89219
90- # Create install_docker /vars/main.yml
220+ # Create preinstall /vars/main.yml
91221with open (os .path .join (vars_dir , "main.yml" ), "w" ) as vars_file :
92- vars_file .write ("prerequisite_packages:\n " )
93- vars_file .write (" - ca-certificates\n " )
94- vars_file .write (" - curl\n \n " )
95- vars_file .write ("docker_services:\n " )
96- vars_file .write (" - docker\n " )
97- vars_file .write (" - containerd\n \n " )
98- vars_file .write ("docker_packages:\n " )
99- vars_file .write (" - docker-ce\n " )
100- vars_file .write (" - docker-ce-cli\n " )
101- vars_file .write (" - containerd.io\n " )
102- vars_file .write (" - docker-buildx-plugin\n " )
103- vars_file .write (" - docker-compose-plugin\n " )
222+ vars_file .write ("# Variable definitions for preinstall role\n " )
0 commit comments