1+ import os
2+
3+ project_name = "app/media/MyAnsible"
4+
5+ ansible_dir = project_name
6+ group_vars_dir = os .path .join (ansible_dir , "group_vars" )
7+ host_vars_dir = os .path .join (ansible_dir , "host_vars" )
8+ 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" )
15+
16+ # Create project directories
17+ os .makedirs (ansible_dir , exist_ok = True )
18+ os .makedirs (group_vars_dir , exist_ok = True )
19+ os .makedirs (host_vars_dir , exist_ok = True )
20+ os .makedirs (roles_dir , exist_ok = True )
21+ os .makedirs (install_docker_dir , exist_ok = True )
22+ os .makedirs (tasks_dir , exist_ok = True )
23+ os .makedirs (vars_dir , exist_ok = True )
24+ os .makedirs (files_dir , exist_ok = True )
25+ os .makedirs (handlers_dir , exist_ok = True )
26+ os .makedirs (templates_dir , exist_ok = True )
27+
28+ # 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 " )
32+
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 " )
37+
38+ # Create hosts
39+ 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 " )
42+
43+ # Create empty host_vars directory
44+ open (os .path .join (host_vars_dir , ".gitkeep" ), 'a' ).close ()
45+
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 " )
51+
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 " )
89+
90+ # Create install_docker/vars/main.yml
91+ 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 " )
0 commit comments