How to structure Ansible code


 ├── README.md

├── alpha-beta-ssh-key-user1.sh

├── alpha-beta-ssh-key-user2.sh

├── alpha-beta-ssh-key-user3.sh

├── release-rc-ssh-key-user1.sh

├── release-rc-ssh-key-user2.sh

├── release-rc-ssh-key-user3.sh

├── ansible.cfg

├── group_vars

│   ├── all

│   │   └── common.yml

│   ├── alpha

│   │   ├── server1.yml

│   │   └── server2.yml

│   ├── beta

│   │   ├── server1.yml

│   │   └── server2.yml

│   ├── rc

│   │   ├── server1.yml

│   │   └── server2.yml

│   └── release

│       ├── server1.yml

│       └── server2.yml

├── hosts

│   ├── project1

│   └── project2

├── playbooks

│   ├── hello-world.yml

│   ├── install-java.yml

│   ├── kill-pm2.yml

│   ├── install-nginx.yml

│   ├── nginx-force-start.yml

│   ├── stop-nginx.yml

│   ├── install-node.yml

│   ├── revert-node.yml

│   └── update-system-for-nginx.yml

└── roles

    ├── java

    │   ├── files

    │   └── tasks

    │       ├── install.yml

    │       └── main.yml

    ├── nginx

    │   ├── files

    │   │   └── proxy.conf

    │   ├── tasks

    │   │   ├── copy-config.yml

    │   │   ├── deploy.yml

    │   │   ├── force-start.yml

    │   │   ├── install.yml

    │   │   ├── main.yml

    │   │   ├── restart.yml

    │   │   ├── start.yml

    │   │   ├── stop.yml

    │   │   └── update-system.yml

    │   └── templates

    │       ├── rotatelog_nginx.sh.tmpl

    │       └── server1.conf.tmpl

    └── node

        ├── files

        └── tasks

            ├── install.yml

            ├── kill-pm2.yml

            ├── main.yml

            └── revert-node.yml



hello-world playbook

- name: hello-world
hosts: "{{ phase }}"
serial: "{{ serial | default(1) }}"
vars_files:
- ../group_vars/all/common.yml
- "../group_vars/{{ phase }}/{{ project }}.yml"
tasks:
- name: echo hello world
command: echo "Hello World!"
- name: Mkdir
command: mkdir "ansible-test-hello-world"

run hello-world playbook
ansible-playbook playbooks/hello-world.yml 
   -i hosts/{project1|project2} 
   --extra-vars "phase={alpha|beta|rc|release} serial=2 project={server1|server2}"


common.yml
user: "your_default_user"
user_home: "/home/{{ user }}"
user_scripts_path: "{{ user_home }}/scripts"
user_deploy_home: "{{ user_home }}/deploy"
user_script_conf_home: "{{ user_home }}/scripts/conf"

log_path: "{{ user_home}}/logs"
jar_log_file: "{{ log_path}}/{{ project }}-console.log"

nginx_home: "{{ user_home }}/apps/nginx"
nginx_conf_path: "{{ nginx_home }}/conf"
nginx_cert_path: "{{ nginx_home }}/cert"
ngin_bin: "{{ nginx_home }}/sbin/nginx"
nginx_application: "nginx-1.22.0"
nginx_download_command: "wget https://nginx.org/download/{{ nginx_application }}.tar.gz"
nginx_ssl_mode: ssl


node_version: v18.17.0
node_home: "/home/{{ user }}/.nvm/nvm.sh"

ansible/group_vars/alpha/server1.yml
nginx_server_name: server1.apps-alpha.com
var2: value2-alpha
var3: value3-alpha


ansible/group_vars/beta/server1.yml
nginx_server_name: server1.apps-beta.com
var2: value2-beta
var3: value3-beta




ansible/hosts/project1
[alpha]
alpha-domain1_or_ip_of_server_in_project1 alpha-domain2_or_ip_of_server_in_project1 alpha-domain3_or_ip_of_server_in_project1 [beta] beta-domain1_or_ip_of_server_in_project1 beta-domain2_or_ip_of_server_in_project1 beta-domain3_or_ip_of_server_in_project1
[rc]
enter-your-servers
[release]
enter-your-servers

ansible/roles/nginx/tasks/main.yml
- include: "{{ command | default('install') }}.yml"



ansible/roles/nginx/tasks/copy-config.yml
- name: copy nginx.conf
template:
src: templates/{{ project }}.conf.tmpl
dest: "{{ nginx_conf_path }}/nginx.conf"

- name: copy proxy.conf
copy:
src: files/proxy.conf
dest: "{{ nginx_conf_path }}/proxy.conf"

ansible/roles/nginx/tasks/force-start.yml
- name: check pid existing
stat:
path: "{{ log_path }}/nginx/nginx.pid"
register: nginx_pid_existing

- name: check nginx running
shell: "ps -ef | grep `cat {{ log_path }}/nginx/nginx.pid` | grep -v ps | grep -v grep"
register: nginx_running
when: nginx_pid_existing.stat.exists

- name: restart nginx
include: restart.yml
when: nginx_pid_existing.stat.exists and nginx_running is defined and nginx_running.stdout.find('nginx') != -1

- name: start nginx
include: start.yml
when: nginx_pid_existing.stat.exists == False or nginx_running is undefined or nginx_running.stdout.find('nginx') == -1


ansible/playbooks/nginx-force-start.yml
- name: nginx-force-start
hosts: "{{ phase }}"
serial: "{{ serial | default(1) }}"
vars_files:
- ../group_vars/all/common.yml
- "../group_vars/{{ phase }}/{{ project }}.yml"
roles:
- { role: "nginx", command: "force-start" }

ansible.cfg
[defaults]
host_key_checking = False
private_key_file = /home/user1/.ssh/id_rsa

forks = 50
remote_user = user1
remote_port = 22
roles_path = ./roles

To run nginx-force-start
ansible-playbook playbooks/nginx-force-start.yml 
      -i hosts/{project1|project2} 
      --extra-vars "phase={alpha|beta|rc|release} serial=2 project={server1|server2}"




Comments

Popular posts from this blog

Fixing the DeepSpeed Import Error While Fine-Tuning the Qwen Model

Amazon Linux 2023 - User data configuration for launch templates to connect to the EKS cluster

How to create ISM policy and rotate logs in opensearch