Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
ansible:playbooks [2023/12/05 03:27] admin |
ansible:playbooks [2024/11/21 11:01] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Разные примеры ====== | ====== Разные примеры ====== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | hosts.yml | ||
+ | <code yaml> | ||
+ | all: | ||
+ | children: | ||
+ | app_myApp: | ||
+ | hosts: | ||
+ | host_myApp_master: | ||
+ | ansible_host: | ||
+ | |||
+ | </ | ||
+ | |||
+ | hosts/myApp | ||
+ | <code yaml> | ||
+ | --- | ||
+ | myApp_path: "/ | ||
+ | myApp_appname: | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | group/ | ||
+ | <code yaml> | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | ansible_connection: | ||
+ | ansible_ssh_port: | ||
+ | |||
+ | ansible_user: | ||
+ | ansible_password: | ||
+ | $ANSIBLE_VAULT; | ||
+ | 31323664336536....... | ||
+ | |||
+ | nexus_base_url: | ||
+ | nexus_username: | ||
+ | nexus_password: | ||
+ | $ANSIBLE_VAULT; | ||
+ | 3534534534...... | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
Строка 133: | Строка 180: | ||
</ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | плейбук: | ||
+ | <code yaml> | ||
+ | --- | ||
+ | - hosts: myapp_group | ||
+ | gather_facts: | ||
+ | become: yes | ||
+ | become_method: | ||
+ | become_user: | ||
+ | roles: | ||
+ | - myapp_deploy | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | main | ||
+ | <code yaml> | ||
+ | --- | ||
+ | - name: " | ||
+ | import_tasks: | ||
+ | |||
+ | - name: " | ||
+ | import_tasks: | ||
+ | |||
+ | - name: " | ||
+ | import_tasks: | ||
+ | |||
+ | - name: " | ||
+ | import_tasks: | ||
+ | |||
+ | - name: " | ||
+ | import_tasks: | ||
+ | |||
+ | - block: | ||
+ | - name: " | ||
+ | win_shell: " | ||
+ | |||
+ | - name: " | ||
+ | import_tasks: | ||
+ | when: not process_running | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | prepare | ||
+ | <code yaml> | ||
+ | --- | ||
+ | - name: " | ||
+ | win_file: | ||
+ | path: '{{ item }}' | ||
+ | state: directory | ||
+ | loop: | ||
+ | - '{{ myapp_path }}' | ||
+ | - '{{ myapp_path }}logs' | ||
+ | - '{{ myapp_path }}backups' | ||
+ | - '{{ myapp_path }}conf' | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | backup | ||
+ | <code yaml> | ||
+ | --- | ||
+ | - name: " | ||
+ | win_shell: " | ||
+ | Compress-Archive -Force -DestinationPath {{ myapp_path }}backups\\prev_version.zip" | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | download | ||
+ | <code yaml> | ||
+ | --- | ||
+ | |||
+ | - name: " | ||
+ | maven_artifact: | ||
+ | group_id: ' | ||
+ | artifact_id: | ||
+ | version: '{{ myapp_version | default(omit) }}' | ||
+ | repository_url: | ||
+ | username: '{{ nexs_username }}' | ||
+ | password: '{{ nexs_password }}' | ||
+ | dest: '{{ myapp_name }}' | ||
+ | verify_checksum: | ||
+ | delegate_to: | ||
+ | |||
+ | - name: " | ||
+ | copy: | ||
+ | src: '{{ myapp_name }}' | ||
+ | dest: '{{ " | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | configs | ||
+ | <code yaml> | ||
+ | --- | ||
+ | - name: " | ||
+ | win_template: | ||
+ | src: '{{ item }}.j2' | ||
+ | dest: '{{ " | ||
+ | loop: | ||
+ | - start.ps1 | ||
+ | - restart.ps1 | ||
+ | |||
+ | - name: " | ||
+ | win_template: | ||
+ | src: '{{ item }}.j2' | ||
+ | dest: '{{ " | ||
+ | loop: | ||
+ | - config.toml | ||
+ | |||
+ | - name: " | ||
+ | win_copy: | ||
+ | src: '{{ item }}' | ||
+ | dest: '{{ " | ||
+ | loop: | ||
+ | - cacerts | ||
+ | - cert.jks | ||
+ | - _certs | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | restart and check | ||
+ | <code yaml> | ||
+ | --- | ||
+ | - name: " | ||
+ | win_shell: "{{ myapp_path }}restartmyApp.ps1" | ||
+ | async: 5 | ||
+ | register: start_app | ||
+ | failed_when: | ||
+ | ignore_errors: | ||
+ | |||
+ | - name: " | ||
+ | pause: | ||
+ | seconds: 10 | ||
+ | |||
+ | - name: " | ||
+ | set_fact: process_running=false | ||
+ | |||
+ | - name: " | ||
+ | win_shell: " | ||
+ | register: check_pid | ||
+ | failed_when: | ||
+ | ignore_errors: | ||
+ | |||
+ | - name: " | ||
+ | set_fact: process_running=true | ||
+ | when: check_pid.stdout != '' | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | start.ps1.j2 | ||
+ | <code yaml> | ||
+ | cd {{ myApp_path}} | ||
+ | (Start-Process java -ArgumentList " | ||
+ | |||
+ | </ | ||
+ | </ | ||
< | < | ||
- | < | + | < |
+ | |||
+ | Проверка существования\\ | ||
+ | Встречал вариант " | ||
+ | Хотя "is not defined" | ||
+ | А вариант с "in vars" работает даже с экстра переменными\\ | ||
<code yaml> | <code yaml> | ||
+ | --- | ||
+ | - name: " | ||
+ | ansible.builtin.fail: | ||
+ | msg: "{{ item }} is not defined" | ||
+ | when: item not in vars | ||
+ | loop: | ||
+ | - my_var1 | ||
+ | - my_var2 | ||
+ | - my_var3 | ||
+ | </ | ||
+ | Развертывание словаря в шаблоне джинджи\\ | ||
+ | В инвентори например такой словарь, | ||
+ | <code yaml> | ||
+ | my_dict_dests: | ||
+ | - name: " | ||
+ | destDir: "/ | ||
+ | transferType: | ||
+ | host: " | ||
+ | user: " | ||
+ | pass: " | ||
+ | |||
+ | - name: " | ||
+ | destDir: "/ | ||
</ | </ | ||
+ | |||
+ | Перечисляем все имеющиеся параметры в файле шаблона j2\\ | ||
+ | т.к. фактически это список словарей, | ||
+ | <code yaml> | ||
+ | {% for dest in my_dict_dests%} | ||
+ | [[DestDir]] | ||
+ | {% for item in dest.items() %} | ||
+ | {{ item[0] }} = "{{ item[1] }}" | ||
+ | {% endfor %} | ||
+ | {% endfor %} | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code yaml> | ||
+ | </ | ||
+ | |||
</ | </ | ||
Строка 146: | Строка 401: | ||
< | < | ||
- | < | + | < |
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | Python скрипт нужно поместить в папку " | ||
<code yaml> | <code yaml> | ||
+ | - debug: | ||
+ | msg: "{{ lookup(' | ||
+ | - debug: | ||
+ | msg: "{{ lookup(' | ||
</ | </ | ||
</ | </ | ||
Строка 155: | Строка 418: | ||
< | < | ||
- | < | + | < |
+ | [[https:// | ||
+ | |||
+ | <code yaml> | ||
+ | - name: "find files" | ||
+ | find: | ||
+ | path: "/ | ||
+ | file_type: file | ||
+ | patterns: " | ||
+ | recurse: true | ||
+ | register: list_files | ||
+ | |||
+ | - name: "show list" | ||
+ | debug: | ||
+ | msg: "file: {{ item }}" | ||
+ | loop: "{{ list_files.files | map(attribute=' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
<code yaml> | <code yaml> | ||
</ | </ | ||
</ | </ |