playbook.yml 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. ---
  2. - name: Implementation parameters
  3. hosts: 127.0.0.1
  4. connection: local
  5. tasks:
  6. - name: Parameters for base
  7. command: "cp {{ playbook_dir }}/base/app/config/parameters.yml.docker {{ playbook_dir }}/base/app/config/parameters.yml"
  8. - name: "Parameters"
  9. command: "cp {{ playbook_dir }}/{{ item }}/app/config/parameters.yml.docker {{ playbook_dir }}/{{ item }}/app/config/parameters.yml"
  10. with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
  11. - name: Launch docker for mysql database. Tag=start_mysql
  12. hosts: 127.0.0.1
  13. connection: local
  14. tags: start_mysql
  15. tasks:
  16. # - name: Docker build
  17. # command: "docker-compose build"
  18. #
  19. # - name: Docker build mysql
  20. # command: "docker-compose pull mysql"
  21. - name: Docker mysql up
  22. command: "docker-compose up -d --force-recreate mysql"
  23. - name: Configure mysql database. Tag=configure_mysql
  24. hosts: mysql
  25. connection: docker
  26. gather_facts: no
  27. tags: configure_mysql
  28. tasks:
  29. - name: Wait for mysql be ready
  30. wait_for:
  31. host: 127.0.0.1
  32. port: 3306
  33. state: started
  34. delay: 5
  35. connect_timeout: 15
  36. timeout: 360
  37. - name: Create database fd_session
  38. mysql_db:
  39. name: fd_session
  40. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  41. state: present
  42. - name: Create database freeradius
  43. mysql_db:
  44. name: freeradius
  45. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  46. state: present
  47. - name: Create database grafana
  48. mysql_db:
  49. name: grafana
  50. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  51. state: present
  52. - name: Create database statsd_db
  53. mysql_db:
  54. name: statsd_db
  55. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  56. state: present
  57. - name: Create database base
  58. mysql_db:
  59. name: fd3_base
  60. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  61. state: present
  62. - name: Create database ftth
  63. mysql_db:
  64. name: fd3_ftth
  65. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  66. state: present
  67. - name: Create database mapas
  68. mysql_db:
  69. name: fd3_mapas
  70. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  71. state: present
  72. - name: Create database stats
  73. mysql_db:
  74. name: fd3_stats
  75. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  76. state: present
  77. - name: Create database cablemodem
  78. mysql_db:
  79. name: fd3_cablemodem
  80. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  81. state: present
  82. - name: Create database Radius
  83. mysql_db:
  84. name: fd3_radius
  85. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  86. state: present
  87. - name: Create database dhcp
  88. mysql_db:
  89. name: fd3_dhcp
  90. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  91. state: present
  92. - copy:
  93. src: "{{ playbook_dir }}/freeradius_schema.sql"
  94. dest: /tmp/freeradius_schema.sql
  95. - name: Create freeradius MySQL schema
  96. mysql_db:
  97. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  98. state: import
  99. name: freeradius
  100. target: "/tmp/freeradius_schema.sql"
  101. - name: Create user iksop
  102. mysql_user:
  103. name: 'iksop'
  104. password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  105. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  106. priv: '*.*:ALL'
  107. state: present
  108. - copy:
  109. src: "{{ playbook_dir }}/mysql_scripts.sql"
  110. dest: /tmp/mysql_scripts.sql
  111. - name: Replace password mysql_scripts.sql
  112. shell: "sed -i -- 's/#password#/{{ lookup('env', 'MYSQL_PASSWORD') }}/g' /tmp/mysql_scripts.sql"
  113. - name: Run SQL commands against DB to create table
  114. mysql_db:
  115. login_password: "{{ lookup('env', 'MYSQL_PASSWORD') }}"
  116. state: import
  117. name: fd_session
  118. target: "/tmp/mysql_scripts.sql"
  119. - name: Launch docker for amqp. Tag=start_amqp
  120. hosts: 127.0.0.1
  121. connection: local
  122. tags: start_base
  123. tasks:
  124. - name: Docker base up
  125. command: "docker-compose up -d amqp"
  126. - name: "Wait for amqp. Timeout: 1 minutes"
  127. pause:
  128. minutes: 1
  129. - name: Launch docker for module base. Tag=start_base
  130. hosts: 127.0.0.1
  131. connection: local
  132. tags: start_base
  133. tasks:
  134. - name: Docker base up
  135. command: "docker-compose up -d --force-recreate base"
  136. - name: "Wait for autoload_classmap.php. Timeout: 10 minutes"
  137. wait_for:
  138. path: "{{ playbook_dir }}/base/vendor/composer/autoload_classmap.php"
  139. state: present
  140. sleep: 30
  141. timeout: 600
  142. - name: Configure module base. Tag=configure_base
  143. hosts: base
  144. connection: docker
  145. tags: configure_base
  146. vars:
  147. uris: ""
  148. tasks:
  149. - name: Chmod cache
  150. file:
  151. path: /opt/base/var/cache/
  152. recurse: yes
  153. mode: 777
  154. - name: Clean cache
  155. file:
  156. state: absent
  157. path: "/opt/base/var/cache/"
  158. - name: Composer install
  159. shell: "eval $(ssh-agent) ; ssh-add /opt/keys/bitbucket.id_rsa ; composer install --no-interaction"
  160. - name: Load redirections
  161. set_fact:
  162. uris: "{{ uris }} --redirect_uri=https://{{ item }}.{{ lookup('env', 'CLIENT') }}.flowdat.com/login_check"
  163. with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
  164. - name: Load redirections app_dev
  165. set_fact:
  166. uris: "{{ uris }} --redirect_uri=https://{{ item }}.{{ lookup('env', 'CLIENT') }}.flowdat.com/app_dev.php/login_check"
  167. with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
  168. - name: Create oauth client
  169. shell: "bin/console oauth:client:createRedirects {{ uris }} > oauth.data.log"
  170. args:
  171. executable: /bin/bash
  172. - name: Update variable usersetting
  173. set_fact:
  174. usersetting: "{{ lookup('file', '{{ playbook_dir }}/user_system.json')|from_json }}"
  175. - name: Create user iksop
  176. shell: "bin/console user:create {{ item.user }} {{ item.email }} {{ item.password }} {{ item.tenancy }} {{ item.extra }}"
  177. args:
  178. executable: /bin/bash
  179. with_items: "{{ usersetting.users }}"
  180. - name: Promote users to ADMIN
  181. shell: " bin/console fos:user:promote admin ROLE_ADMIN"
  182. args:
  183. executable: /bin/bash
  184. - name: Promote users to IKSOP
  185. shell: " bin/console fos:user:promote iksop ROLE_SUPER_ADMIN"
  186. args:
  187. executable: /bin/bash
  188. - name: Copy file oauth.data.log to host
  189. fetch:
  190. src: /opt/base/oauth.data.log
  191. dest: /tmp/
  192. flat: yes
  193. - name: Configure oauth data for other container. Tag=configure_oauth
  194. hosts: 127.0.0.1
  195. connection: local
  196. tags: configure_oauth
  197. tasks:
  198. - name: "Add outh client id"
  199. shell: "cp /tmp/oauth.data.log {{ item }}.oauth.env"
  200. args:
  201. executable: /bin/bash
  202. with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
  203. - name: "Launch docker's. Tag=launch_dockers"
  204. hosts: 127.0.0.1
  205. connection: local
  206. tags: launch_dockers
  207. tasks:
  208. - name: "Dockers up"
  209. command: "docker-compose up -d --force-recreate {{ item }}"
  210. with_items: "{{ lookup('env', 'MODULES_INSTALL').split(',') }}"
  211. - name: "Run modules. Timeout: 10 minutes. Tag=run_modules"
  212. hosts: "{{ lookup('env', 'MODULES_INSTALL') }}"
  213. connection: docker
  214. tags: run_modules
  215. tasks:
  216. - name: "Docker's schema update"
  217. wait_for:
  218. path: "./vendor/composer/autoload_classmap.php"
  219. #path: "/opt/{{ play_hosts }}/vendor/composer/autoload_classmap.php"
  220. state: present
  221. sleep: 30
  222. timeout: 600
  223. - name: "Run doctrine:schema:update for modules. Tag=dsu_modules"
  224. hosts: "{{ lookup('env', 'MODULES_INSTALL') }}"
  225. connection: docker
  226. tags: dsu_modules
  227. tasks:
  228. - name: "Doctrine schema update"
  229. shell: "bin/console doctrine:schema:update --force"
  230. # Generate self-signed cert files for Nginx (intended for development, please replace with proper ones)
  231. - name: "Generate self-signed cert files for Nginx"
  232. hosts: 127.0.0.1
  233. connection: local
  234. tags: self_cert
  235. tasks:
  236. - name: "Make sure certs dir exists"
  237. shell: "mkdir -p /opt/flowdat/extra/nginx/certs"
  238. - name: "Generate self-signed certs for Nginx"
  239. shell: "openssl req -x509 -nodes -batch -days 365 -newkey rsa:2048 -keyout /opt/flowdat/extra/nginx/certs/privkey.pem -out /opt/flowdat/extra/nginx/certs/fullchain.pem -subj '/C=AR/ST=Santa Fe/L=Rosario/O=Interlink/OU=R&D/CN=*.{{ lookup('env','CLIENT') }}.{{ lookup('env','DOMAIN') }}/emailAddress=idev@interlink.com.ar'"
  240. - name: "Run up all. Tag=up_all"
  241. hosts: 127.0.0.1
  242. connection: local
  243. tags: up_all
  244. tasks:
  245. - name: Docker up all modules
  246. command: "docker-compose up -d "
  247. - name: Docker stop nginx
  248. command: "docker-compose stop nginx "
  249. - name: Docker up nginx
  250. command: "docker-compose up -d nginx"