playbook.yml 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. ---
  2. - name: setup webserver
  3. hosts: webserver
  4. vars:
  5. firewall_pkg: firewalld
  6. firewall_svc: firewalld
  7. web_pkg: httpd
  8. web_svc: httpd
  9. ssl_pkg: mod_ssl
  10. httpdconf_src: files/httpd.conf
  11. httpdconf_dest: /etc/httpd/conf/httpd.conf
  12. htaccess_src: files/.htaccess
  13. secrets_dir: /etc/httpd/secrets
  14. secrets_src: files/htpasswd
  15. secrets_dest: "{{ secrets_dir }}/htpasswd"
  16. web_root: /var/www/html
  17. tasks:
  18. - name: install latest pakgs
  19. yum:
  20. name:
  21. - "{{ firewall_pkg }}"
  22. - "{{ web_pkg }}"
  23. - "{{ ssl_pkg }}"
  24. state: latest
  25. - name: copy config file
  26. copy:
  27. src: "{{ httpdconf_src }}"
  28. dest: "{{ httpdconf_dest }}"
  29. owner: root
  30. group: root
  31. mode: '0644'
  32. - name: Create a directory if it does not exist
  33. file:
  34. path: "{{ secrets_dir }}"
  35. state: directory
  36. owner: apache
  37. group: apache
  38. mode: '0500'
  39. - name: copy password file
  40. copy:
  41. src: "{{ secrets_src }}"
  42. dest: "{{ secrets_dest }}"
  43. owner: apache
  44. group: apache
  45. mode: '0400'
  46. - name: copy htaccess file
  47. copy:
  48. src: "{{ htaccess_src }}"
  49. dest: "{{ web_root }}/.htaccess"
  50. owner: apache
  51. group: apache
  52. mode: '0400'
  53. - name: create custom content
  54. copy:
  55. dest: "{{ web_root }}/index.html"
  56. content: "{{ ansible_facts['fqdn'] }} ({{ ansible_facts['default_ipv4']['address'] }}) has been customized by Ansible.\n"
  57. - name: start and enable firewall
  58. service:
  59. name: "{{ firewall_svc }}"
  60. enabled: true
  61. state: started
  62. - name: rule for web port
  63. firewalld:
  64. state: enabled
  65. service: https
  66. permanent: true
  67. immediate: true
  68. - name: enable and start httpd
  69. service:
  70. name: "{{ web_svc }}"
  71. enabled: true
  72. state: started
  73. - name: test
  74. hosts: localhost
  75. become: false
  76. vars:
  77. web_user: guest
  78. vars_files:
  79. - vars/secrets.yml
  80. tasks:
  81. - name: request content
  82. uri:
  83. url: http://serverb.lab.example.com
  84. user: "{{ web_user }}"
  85. password: "{{ web_pass }}"
  86. status_code: 200
  87. validate_certs: no
  88. return_content: yes
  89. - debug:
  90. var: auth_test.content