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
- 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"
ansible-playbook playbooks/hello-world.yml -i hosts/{project1|project2} --extra-vars "phase={alpha|beta|rc|release} serial=2 project={server1|server2}"
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"
nginx_server_name: server1.apps-alpha.comvar2: value2-alphavar3: value3-alpha
nginx_server_name: server1.apps-beta.comvar2: value2-betavar3: 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
ansible-playbook playbooks/nginx-force-start.yml -i hosts/{project1|project2} --extra-vars "phase={alpha|beta|rc|release} serial=2 project={server1|server2}"
Comments
Post a Comment