]> git.immae.eu Git - github/fretlink/ansible-clever.git/blob - tasks/deploy.yml
deploy: add a timeout in the polling waiting script
[github/fretlink/ansible-clever.git] / tasks / deploy.yml
1 - name: Configure Drain
2 when: syslog_server is defined or clever_syslog_server is defined
3 command: "{{ ansible_env.HOME }}/{{ clever_user_path }}/clever-set-drain.sh"
4 args:
5 chdir: "{{ clever_app_root }}"
6 environment:
7 SYSLOG_UDP_SERVER: "{{ clever_syslog_server | default(syslog_server) }}"
8 CONFIGURATION_FILE: "{{ clever_login_file }}"
9
10 - name: Configure Domain
11 when: domain is defined or clever_domain is defined
12 command: "{{ ansible_env.HOME }}/{{ clever_user_path }}/clever-set-domain.sh"
13 args:
14 chdir: "{{ clever_app_root }}"
15 environment:
16 DOMAIN: "{{ clever_domain | default(domain) }}"
17 CONFIGURATION_FILE: "{{ clever_login_file }}"
18
19 - name: Push Environment
20 shell: "clever env import < {{ clever_app_confdir }}/env"
21 args:
22 chdir: "{{ clever_app_root }}"
23 environment:
24 CONFIGURATION_FILE: "{{ clever_login_file }}"
25 changed_when: false
26
27 #TODO: Improve ssh-key validation
28 - name: Accept Clever-Cloud servers
29 shell: "ssh-keyscan -H push-par-clevercloud-customers.services.clever-cloud.com >> ~/.ssh/known_hosts"
30 tags:
31 - skip_ansible_lint
32
33 - name: Deploy to Clever-Cloud
34 command: "git push --force git+ssh://git@push-par-clevercloud-customers.services.clever-cloud.com/{{ clever_app }}.git HEAD:refs/heads/master"
35 args:
36 chdir: "{{ clever_app_root }}"
37 register: clever_deploy
38 ignore_errors: true
39 tags:
40 - skip_ansible_lint
41
42 ##################################################################
43 # Re-deploy only if its the first clever deploy for that project #
44 ##################################################################
45
46 - name: First time push to Clever-Cloud needs a full git clone
47 command: "git fetch --unshallow"
48 args:
49 chdir: "{{ clever_app_root }}"
50 when:
51 - clever_deploy is failed
52 - clever_deploy.stderr is defined
53 - clever_deploy.stderr is search("Failed to read git object")
54 tags:
55 - skip_ansible_lint
56
57 - name: Deploy to Clever-Cloud
58 command: "git push --force git+ssh://git@push-par-clevercloud-customers.services.clever-cloud.com/{{ clever_app }}.git HEAD:refs/heads/master"
59 args:
60 chdir: "{{ clever_app_root }}"
61 when:
62 - clever_deploy is failed
63 - clever_deploy.stderr is defined
64 - clever_deploy.stderr is search("Failed to read git object")
65 register: clever_deploy
66 tags:
67 - skip_ansible_lint
68
69 ##############################################################################
70 # Poll deployment status from 'clever activity' command. #
71 # 'clever deploy' command is not yet 100% reliable to get a blocking command #
72 # until the deployment is over. Hence the need for a custom waiting script. #
73 ##############################################################################
74
75 - name: Watch deployment status
76 command: "{{ ansible_env.HOME }}/{{ clever_user_path }}/clever-wait-deploy.sh"
77 args:
78 chdir: "{{ clever_app_root }}"
79 environment:
80 CONFIGURATION_FILE: "{{ clever_login_file }}"
81 async: 2400 # 40 minutes
82 poll: 0
83 register: long_command
84 changed_when: False
85
86 - name: Wait 40 minutes for deployment completion
87 async_status:
88 jid: "{{ long_command.ansible_job_id }}"
89 register: job_result
90 until: job_result.finished
91 ignore_errors: true
92 delay: 30
93 retries: 80 # 40 minutes (80 * 30 secs delay)
94
95 - name: Waiting script logs (stdout)
96 debug:
97 var: job_result.stdout_lines
98 when: job_result.stdout_lines is defined
99
100 - name: Waiting script logs (stderr)
101 debug:
102 var: job_result.stderr_lines
103 when: job_result.stderr_lines is defined
104
105 - name: Fail in case of timeout or failure
106 fail:
107 msg: "Deployment failed. Please check logs above."
108 when: not job_result.finished or not job_result.rc == 0