Skip to content

Commit 13be510

Browse files
authored
Merge pull request #116 from abolfazl8131/115
fix file adding problem with adding 'shutil'
2 parents 4aa2e1a + 472ad30 commit 13be510

File tree

24 files changed

+696
-136
lines changed

24 files changed

+696
-136
lines changed
Lines changed: 194 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,222 @@
11
import os
22

33
project_name = "app/media/MyAnsible"
4-
54
ansible_dir = project_name
65
group_vars_dir = os.path.join(ansible_dir, "group_vars")
76
host_vars_dir = os.path.join(ansible_dir, "host_vars")
87
roles_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
1717
os.makedirs(ansible_dir, exist_ok=True)
1818
os.makedirs(group_vars_dir, exist_ok=True)
1919
os.makedirs(host_vars_dir, exist_ok=True)
2020
os.makedirs(roles_dir, exist_ok=True)
21-
os.makedirs(install_docker_dir, exist_ok=True)
21+
os.makedirs(preinstall_dir, exist_ok=True)
2222
os.makedirs(tasks_dir, exist_ok=True)
23-
os.makedirs(vars_dir, exist_ok=True)
23+
os.makedirs(defaults_dir, exist_ok=True)
2424
os.makedirs(files_dir, exist_ok=True)
2525
os.makedirs(handlers_dir, exist_ok=True)
2626
os.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
3980
with 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
91221
with 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")

app/media/MyAnsible/docker_playbook.yml

Lines changed: 0 additions & 3 deletions
This file was deleted.

app/media/MyAnsible/group_vars/all

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# General
2+
install_ansible_modules: "true"
3+
disable_transparent_huge_pages: "true"
4+
setup_interface: "false"
5+
6+
# Network Calico see here for more details https://github.com/projectcalico/calico/releases
7+
calico_operator_url: "https://raw.githubusercontent.com/projectcalico/calico/v3.29.0/manifests/tigera-operator.yaml"
8+
calico_crd_url: "https://raw.githubusercontent.com/projectcalico/calico/v3.29.0/manifests/custom-resources.yaml"
9+
pod_network_cidr: "192.168.0.0/16"
10+
11+
# DNS
12+
resolv_nameservers: [8.8.8.8, 4.2.2.4] # 403.online
13+
14+
# Sanction shekan
15+
use_iran: "true" # change it to "false" if you are outside of iran
16+
17+
# Docker
18+
docker_gpg_key_url: "https://download.docker.com/linux/ubuntu/gpg"
19+
docker_gpg_key_path: "/etc/apt/keyrings/docker.gpg"
20+
docker_apt_repo: "https://download.docker.com/linux/ubuntu"
21+
22+
# Kubernetes
23+
kubernetes_gpg_keyring_path: "/etc/apt/keyrings/kubernetes-apt-keyring.gpg"
24+
kubernetes_gpg_key_url: "https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key"
25+
kubernetes_apt_repo: "https://pkgs.k8s.io/core:/stable:/v1.31/deb/"
26+
k8s_version: "1.31.2" # see here https://kubernetes.io/releases/patch-releases/ and https://github.com/kubernetes/kubernetes/releases
27+
28+
# CRI
29+
cri_socket: unix:///var/run/containerd/containerd.sock
30+
31+
# VRRP and HAProxy
32+
interface_name: "enp0s8"
33+
virtual_ip: "192.168.178.100"
34+
haproxy_frontend_password: "password"
35+
36+
# Ansible Connection
37+
38+
ansible_user: root
39+
ansible_port: 22
40+
ansible_python_interpreter: "/usr/bin/python3"
41+
domain="devopsgpt.com"
42+
apiserver_url="devopsgpt.com"

app/media/MyAnsible/group_vars/docker_nodes

Lines changed: 0 additions & 2 deletions
This file was deleted.

app/media/MyAnsible/host_vars/.gitkeep

Whitespace-only changes.

app/media/MyAnsible/hosts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,17 @@
1-
[docker_nodes]
2-
www.example.com
1+
[all]
2+
string private_ip=x.x.x.x
3+
string private_ip=x.x.x.x
4+
string private_ip=x.x.x.x
5+
6+
[k8s]
7+
string
8+
string
9+
10+
[k8s_masters]
11+
string
12+
13+
[k8s_workers]
14+
string
15+
16+
[lb]
17+
string
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
- hosts: all
2+
roles:
3+
- role: preinstall
4+
gather_facts: yes
5+
any_errors_fatal: true
6+
tags: [preinstall]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
kind: InitConfiguration
2+
apiVersion: kubeadm.k8s.io/v1beta3
3+
nodeRegistration:
4+
criSocket: {{ cri_socket }}
5+
imagePullPolicy: IfNotPresent
6+
---
7+
kind: ClusterConfiguration
8+
apiVersion: kubeadm.k8s.io/v1beta3
9+
kubernetesVersion: "{{ k8s_version }}"
10+
controlPlaneEndpoint: "{{ apiserver_url }}"
11+
certificatesDir: /etc/kubernetes/pki
12+
networking:
13+
podSubnet: {{ pod_network_cidr }}

0 commit comments

Comments
 (0)