playbook.yml 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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: >
  57. "{{ ansible_facts['hostname'] }} {{ ansible_facts['default_ipv4']['address'] }}
  58. has been customized by Ansible"
  59. - name: start and enable firewall
  60. service:
  61. name: "{{ firewall_svc }}"
  62. enabled: true
  63. state: started
  64. - name: rule for web port
  65. firewalld:
  66. state: enabled
  67. service: https
  68. permanent: true
  69. immediate: true
  70. - name: enable and start httpd
  71. service:
  72. name: "{{ web_svc }}"
  73. enabled: true
  74. state: started
  75. - name: test
  76. hosts: localhost
  77. become: false
  78. vars:
  79. web_user: guest
  80. vars_files:
  81. - vars/secrets.yml
  82. tasks:
  83. - name: request content
  84. uri:
  85. url: http://serverb.lab.example.com
  86. user: "{{ web_user }}"
  87. password: "{{ web_pass }}"
  88. status_code: 200
  89. validate_certs: no
  90. return_content: yes
  91. - debug:
  92. var: auth_test.content