11import os
22
33project_name = "app/media/MyAnsible"
4-
5- # Define directory structure
64ansible_dir = project_name
75group_vars_dir = os .path .join (ansible_dir , "group_vars" )
8- hosts_file = os .path .join (ansible_dir , "hosts" )
96host_vars_dir = os .path .join (ansible_dir , "host_vars" )
10- nginx_playbook_file = os .path .join (ansible_dir , "nginx_playbook.yml" )
117roles_dir = os .path .join (ansible_dir , "roles" )
12- install_nginx_dir = os .path .join (roles_dir , "install_nginx " )
13- defaults_dir = os .path .join (install_nginx_dir , "defaults " )
14- handlers_dir = os .path .join (install_nginx_dir , "handlers " )
15- tasks_dir = os .path .join (install_nginx_dir , "tasks " )
16- templates_dir = os .path .join (install_nginx_dir , "templates " )
17- vars_dir = os .path .join (install_nginx_dir , "vars " )
8+ install_docker_dir = os .path .join (roles_dir , "install_docker " )
9+ tasks_dir = os .path .join (install_docker_dir , "tasks " )
10+ vars_dir = os .path .join (install_docker_dir , "vars " )
11+ files_dir = os .path .join (install_docker_dir , "files " )
12+ handlers_dir = os .path .join (install_docker_dir , "handlers " )
13+ templates_dir = os .path .join (install_docker_dir , "templates " )
1814
1915# Create project directories
16+ os .makedirs (ansible_dir , exist_ok = True )
2017os .makedirs (group_vars_dir , exist_ok = True )
2118os .makedirs (host_vars_dir , exist_ok = True )
19+ os .makedirs (roles_dir , exist_ok = True )
20+ os .makedirs (install_docker_dir , exist_ok = True )
2221os .makedirs (tasks_dir , exist_ok = True )
23- os .makedirs (defaults_dir , exist_ok = True )
22+ os .makedirs (vars_dir , exist_ok = True )
23+ os .makedirs (files_dir , exist_ok = True )
2424os .makedirs (handlers_dir , exist_ok = True )
2525os .makedirs (templates_dir , exist_ok = True )
26- os .makedirs (vars_dir , exist_ok = True )
27- os .makedirs (roles_dir , exist_ok = True )
28- os .makedirs (install_nginx_dir , exist_ok = True )
2926
3027# Create ansible.cfg
31- with open (os .path .join (ansible_dir , "ansible.cfg" ), "w" ) as ansible_config :
32- ansible_config .write ("[defaults]\n " )
33- ansible_config .write ("host_key_checking=false\n " )
28+ with open (os .path .join (ansible_dir , "ansible.cfg" ), "w" ) as cfg_file :
29+ cfg_file .write ("[defaults]\n " )
30+ cfg_file .write ("host_key_checking=false\n " )
3431
35- # Create group_vars/nginx_nodes
36- with open (os .path .join (group_vars_dir , "nginx_nodes " ), "w" ) as nginx_nodes :
37- nginx_nodes .write ("ansible_port: 22 \n " )
38- nginx_nodes .write ("ansible_user: root\n " )
32+ # Create group_vars/docker_nodes
33+ with open (os .path .join (group_vars_dir , "docker_nodes " ), "w" ) as gv_file :
34+ gv_file .write ("ansible_port: 28 \n " )
35+ gv_file .write ("ansible_user: root\n " )
3936
40- # Create hosts file
41- with open (hosts_file , "w" ) as hosts :
42- hosts .write ("[nginx_nodes ]\n " )
43- hosts .write ("www.examppple .com\n " )
37+ # Create hosts
38+ with open (os . path . join ( ansible_dir , "hosts" ), " w" ) as hosts_file :
39+ hosts_file .write ("[docker_nodes ]\n " )
40+ hosts_file .write ("www.example .com\n " )
4441
45- # Create nginx_playbook .yml
46- with open (nginx_playbook_file , "w" ) as playbook :
47- playbook .write ("- hosts: all\n " )
48- playbook .write (" roles:\n " )
49- playbook .write (" - install_nginx \n " )
42+ # Create docker_playbook .yml
43+ with open (os . path . join ( ansible_dir , "docker_playbook.yml" ), " w" ) as playbook_file :
44+ playbook_file .write ("- hosts: all\n " )
45+ playbook_file .write (" roles:\n " )
46+ playbook_file .write (" - install_docker \n " )
5047
51- # Create install_nginx/tasks/main.yml
52- with open (os .path .join (tasks_dir , "main.yml" ), "w" ) as tasks :
53- tasks .write ("---\n " )
54- tasks .write ("- name: Install CA certificates to ensure HTTPS connections work\n " )
55- tasks .write (" apt:\n " )
56- tasks .write (" name: ca-certificates\n " )
57- tasks .write (" state: present\n \n " )
58-
59- tasks .write ("- name: Add Nginx signing key\n " )
60- tasks .write (" apt_key:\n " )
61- tasks .write (" url: \" { nginx_repo_key_url }\" \n " )
62- tasks .write (" state: present\n \n " )
48+ # Create tasks/main.yml
49+ with open (os .path .join (tasks_dir , "main.yml" ), "w" ) as tasks_file :
50+ tasks_file .write ("---\n " )
51+ tasks_file .write ("- name: Install prerequisite packages\n " )
52+ tasks_file .write (" apt:\n " )
53+ tasks_file .write (" name: \" {{ item }}\" \n " )
54+ tasks_file .write (" state: present\n " )
55+ tasks_file .write (" loop: \" {{ prerequisite_packages }}\" \n " )
56+ tasks_file .write ("- name: Create directory for Docker keyrings\n " )
57+ tasks_file .write (" file:\n " )
58+ tasks_file .write (" path: /etc/apt/keyrings\n " )
59+ tasks_file .write (" state: directory\n " )
60+ tasks_file .write (" mode: '0755'\n " )
61+ tasks_file .write ("- name: Download Docker's official GPG key\n " )
62+ tasks_file .write (" get_url:\n " )
63+ tasks_file .write (" url: https://download.docker.com/linux/ubuntu/gpg\n " )
64+ tasks_file .write (" dest: /etc/apt/keyrings/docker.asc\n " )
65+ tasks_file .write (" mode: '0644'\n " )
66+ tasks_file .write ("- name: Add Docker repository to apt sources\n " )
67+ tasks_file .write (" copy:\n " )
68+ tasks_file .write (" content: |\n " )
69+ 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 " )
70+ tasks_file .write (" dest: /etc/apt/sources.list.d/docker.list\n " )
71+ tasks_file .write ("- name: Update apt cache after adding Docker repo\n " )
72+ tasks_file .write (" apt:\n " )
73+ tasks_file .write (" update_cache: yes\n " )
74+ tasks_file .write ("- name: Install Docker packages\n " )
75+ tasks_file .write (" apt:\n " )
76+ tasks_file .write (" name: \" {{ item }}\" \n " )
77+ tasks_file .write (" state: present\n " )
78+ tasks_file .write (" loop: \" {{ docker_packages }}\" \n " )
79+ tasks_file .write ("- name: Ensure Docker and containerd services are started and enabled\n " )
80+ tasks_file .write (" service:\n " )
81+ tasks_file .write (" name: \" {{ item }}\" \n " )
82+ tasks_file .write (" state: started\n " )
83+ tasks_file .write (" enabled: yes\n " )
84+ tasks_file .write (" loop: \" {{ docker_services }}\" \n " )
6385
64- tasks .write ("- name: Add Nginx repository\n " )
65- tasks .write (" apt_repository:\n " )
66- tasks .write (" repo: \" deb { nginx_repo_url } { ansible_distribution_release } nginx\" \n " )
67- tasks .write (" state: present\n " )
68- tasks .write (" filename: nginx\n \n " )
86+ # Create vars/main.yml
87+ with open (os .path .join (vars_dir , "main.yml" ), "w" ) as vars_file :
88+ vars_file .write ("prerequisite_packages:\n " )
89+ vars_file .write (" - ca-certificates\n " )
90+ vars_file .write (" - curl\n \n " )
91+ vars_file .write ("docker_services:\n " )
92+ vars_file .write (" - docker\n " )
93+ vars_file .write (" - containerd\n \n " )
94+ vars_file .write ("docker_packages:\n " )
95+ vars_file .write (" - docker-ce\n " )
96+ vars_file .write (" - docker-ce-cli\n " )
97+ vars_file .write (" - containerd.io\n " )
98+ vars_file .write (" - docker-buildx-plugin\n " )
99+ vars_file .write (" - docker-compose-plugin\n " )
69100
70- tasks .write ("- name: Update apt cache\n " )
71- tasks .write (" apt:\n " )
72- tasks .write (" update_cache: yes\n \n " )
101+ # Create empty host_vars directory
102+ os .makedirs (host_vars_dir , exist_ok = True )
73103
74- tasks .write ("- name: Install specific version of Nginx\n " )
75- tasks .write (" apt:\n " )
76- tasks .write (" name: \" nginx={ nginx_version }~{ ansible_distribution_release }\" \n " )
77- tasks .write (" state: present\n \n " )
104+ # Create empty files directory
105+ os .makedirs (files_dir , exist_ok = True )
78106
79- tasks .write ("- name: Ensure Nginx service is running and enabled\n " )
80- tasks .write (" service:\n " )
81- tasks .write (" name: nginx\n " )
82- tasks .write (" state: started\n " )
83- tasks .write (" enabled: yes\n " )
107+ # Create empty handlers directory
108+ os .makedirs (handlers_dir , exist_ok = True )
84109
85- # Create install_nginx/vars/main.yml
86- with open (os .path .join (vars_dir , "main.yml" ), "w" ) as vars_file :
87- vars_file .write ("nginx_repo_key_url: \" https://nginx.org/keys/nginx_signing.key\" \n " )
88- vars_file .write ("nginx_repo_url: \" http://nginx.org/packages/mainline/ubuntu/\" \n " )
89- vars_file .write ("nginx_version: \" 1.23.4-1\" \n " )
110+ # Create empty templates directory
111+ os .makedirs (templates_dir , exist_ok = True )
0 commit comments