ansible可以使用 jinja2模板生成配置文件。并且可以使用if,for进行判断循环,进行逻辑处理。

    1. [root@k8s-master ansible]#
    2. [root@k8s-master ansible]# tree conf_nginx
    3. conf_nginx
    4. ├── defaults
    5. └── main.yml
    6. ├── files
    7. ├── handlers
    8. └── main.yml
    9. ├── meta
    10. └── main.yml
    11. ├── README.md
    12. ├── tasks
    13. ├── main.yml
    14. └── template.yml
    15. ├── templates
    16. ├── domain.conf
    17. └── order.j2
    18. ├── tests
    19. ├── inventory
    20. └── test.yml
    21. └── vars
    22. └── main.yml
    23. 8 directories, 11 files
    24. [root@k8s-master ansible]#
    25. [root@k8s-master ansible]# cat conf_nginx.yml
    26. ---
    27. - hosts: 127.0.0.1
    28. user: root
    29. gather_facts: false
    30. roles:
    31. - role: conf_nginx
    32. [root@k8s-master ansible]# cat conf_nginx/tasks/main.yml
    33. ---
    34. # tasks file for conf_nginx
    35. - include: template.yml
    36. [root@k8s-master ansible]# cat conf_nginx/tasks/template.yml
    37. - name: create {{ PROJECT }} directory
    38. file: dest=/data/{{ PROJECT }} state=directory
    39. - name: template transfor java dir
    40. template: src=order.j2 dest=/data/{{ PROJECT }}/order.conf
    41. - name: domain config
    42. template: src=domain.conf dest=/data/{{ PROJECT }}/domain.conf
    43. [root@k8s-master ansible]# cat conf_nginx/templates/domain.conf
    44. server {
    45. listen 80;
    46. listen 443 ssl;
    47. server_name www.domain.cn;
    48. ssl_certificate /etc/letsencrypt/live/www.domain.cn/fullchain.pem;
    49. ssl_certificate_key /etc/letsencrypt/live/www.domain.cn/privkey.pem;
    50. access_log /data/nginx/access.log main;
    51. error_log /data/nginx/error.log;
    52. gzip on;
    53. gzip_comp_level 2;
    54. gzip_vary on;
    55. gzip_proxied any;
    56. gzip_http_version 1.0;
    57. gzip_types application/javascript text/css application/json;
    58. client_header_buffer_size 128k;
    59. client_max_body_size 500M;
    60. {% for url in nginx_location %}
    61. location ^~ /{{ url.name }}/ {
    62. {% if url.rewrite is defined %}
    63. rewrite /{{ url.rewrite }}(.*) $1 break;
    64. {% endif %}
    65. proxy_set_header Host $host;
    66. proxy_set_header X-Real-IP $remote_addr;
    67. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    68. proxy_set_header X-Real-PORT $remote_port;
    69. client_max_body_size 1024m;
    70. proxy_buffer_size 64k;
    71. proxy_buffers 32 32k;
    72. proxy_busy_buffers_size 128k;
    73. {% if url.timeout is defined %}
    74. proxy_connect_timeout {{ url.timeout }};
    75. proxy_send_timeout {{ url.timeout }};
    76. proxy_read_timeout {{ url.timeout }};
    77. {% else %}
    78. proxy_connect_timeout 600s;
    79. proxy_send_timeout 600s;
    80. proxy_read_timeout 600s;
    81. {% endif%}
    82. proxy_pass {{ url.proxy }};
    83. }
    84. {% endfor %}
    85. }
    86. [root@k8s-master ansible]# cat conf_nginx/vars/main.yml
    87. ---
    88. # vars file for conf_nginx
    89. PROJECT: "JAVA"
    90. SWITCH: "NO"
    91. DBPORT: "8080"
    92. nginx_location:
    93. - { name: "bi-api", proxy: "https://bi.domain.com/" }
    94. - { name: "cc-api", proxy: "https://cc.domain.com/", timeout: "800s" }
    95. - { name: "iam-api", proxy: "https://iam.domain.com/", rewrite: "iam-api" }
    96. [root@k8s-master ansible]#
    97. [root@k8s-master JAVA]# cat domain.conf
    98. server {
    99. listen 80;
    100. listen 443 ssl;
    101. server_name www.domain.cn;
    102. ssl_certificate /etc/letsencrypt/live/www.domain.cn/fullchain.pem;
    103. ssl_certificate_key /etc/letsencrypt/live/www.domain.cn/privkey.pem;
    104. access_log /data/nginx/access.log main;
    105. error_log /data/nginx/error.log;
    106. gzip on;
    107. gzip_comp_level 2;
    108. gzip_vary on;
    109. gzip_proxied any;
    110. gzip_http_version 1.0;
    111. gzip_types application/javascript text/css application/json;
    112. client_header_buffer_size 128k;
    113. client_max_body_size 500M;
    114. location ^~ /bi-api/ {
    115. proxy_set_header Host $host;
    116. proxy_set_header X-Real-IP $remote_addr;
    117. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    118. proxy_set_header X-Real-PORT $remote_port;
    119. client_max_body_size 1024m;
    120. proxy_buffer_size 64k;
    121. proxy_buffers 32 32k;
    122. proxy_busy_buffers_size 128k;
    123. proxy_connect_timeout 600s;
    124. proxy_send_timeout 600s;
    125. proxy_read_timeout 600s;
    126. proxy_pass https://bi.domain.com/;
    127. }
    128. location ^~ /cc-api/ {
    129. proxy_set_header Host $host;
    130. proxy_set_header X-Real-IP $remote_addr;
    131. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    132. proxy_set_header X-Real-PORT $remote_port;
    133. client_max_body_size 1024m;
    134. proxy_buffer_size 64k;
    135. proxy_buffers 32 32k;
    136. proxy_busy_buffers_size 128k;
    137. proxy_connect_timeout 800s;
    138. proxy_send_timeout 800s;
    139. proxy_read_timeout 800s;
    140. proxy_pass https://cc.domain.com/;
    141. }
    142. location ^~ /iam-api/ {
    143. rewrite /iam-api(.*) $1 break;
    144. proxy_set_header Host $host;
    145. proxy_set_header X-Real-IP $remote_addr;
    146. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    147. proxy_set_header X-Real-PORT $remote_port;
    148. client_max_body_size 1024m;
    149. proxy_buffer_size 64k;
    150. proxy_buffers 32 32k;
    151. proxy_busy_buffers_size 128k;
    152. proxy_connect_timeout 600s;
    153. proxy_send_timeout 600s;
    154. proxy_read_timeout 600s;
    155. proxy_pass https://iam.domain.com/;
    156. }
    157. }
    158. [root@k8s-master JAVA]#