ansible笔记3--playbook windows基础

ansible笔记3--playbook windows基础

1 介绍

笔者在前文 ansible笔记2–ansible windows基础 中已经介紹了Windows下的环境配置以及对应的 ansible 基础案例,本文将在其基础上通过 playbook 实现更加复杂的任务。

2 常见案例

  1. 调整 host 配置
    此处在windows中添加了 3 个 ip,因此通过 windows 指定主机的時候,可以同时匹配到这 3 台机器,如果需要同时控制更多机器,直接依次逐行加在这里即可。
    [windows]
    10.202.21.137
    10.202.21.138
    10.202.21.139
    [windows:vars]
    ansible_ssh_user="Administrator"
    ansible_ssh_pass="qwer;1234"
    ansible_connection="winrm"
    ansible_ssh_port=5985
    ansible_winrm_server_cert_validation=ignore
    
  2. 初始化目录 & 更新数据
    此处主要是初始化后续实例的目录,拷贝脚本和可执行程序包(暂时不包括安装运行环境)。
    - hosts: windows
      serial: 2
      gather_facts: False
      tasks:
        - name: mkdir xg
          ansible.windows.win_file: 
            path: C:\xg
            state: directory
        - name: copy dmqw files
          ansible.windows.win_copy:
            src: ./xg/dmqw
            dest: C:\xg 
        - name: copy train_script files
          ansible.windows.win_copy:
            src: ./xg/train_script
            dest: C:\xg 
    
        - name: mkdir client_training_01
          ansible.windows.win_file: 
            path: C:\xg\client_training_01
            state: directory
        - name: cp test-client-1.bat
          ansible.windows.win_copy:
            src: ./xg/test-client-1.bat 
            dest: C:\xg\client_training_01\test-client.bat
        - name: cp test-training-1.bat
          ansible.windows.win_copy:
            src: ./xg/test-training-1.bat 
            dest: C:\xg\client_training_01\test-training.bat
        - name: cp dmqw dir
          ansible.windows.win_shell: 'xcopy /y /c /h /r /s /d C:\xg\dmqw C:\xg\client_training_01\dmqw\'
        - name: cp train_script dir
          ansible.windows.win_shell: 'xcopy /y /c /h /r /s /d C:\xg\train_script C:\xg\client_training_01\train_script\'
    
        - name: mkdir client_training_02
          ansible.windows.win_file: 
            path: C:\xg\client_training_02
            state: directory
        - name: cp test-client-2.bat
          ansible.windows.win_copy:
            src: ./xg/test-client-2.bat 
            dest: C:\xg\client_training_02\test-client.bat
        - name: cp test-training-2.bat
          ansible.windows.win_copy:
            src: ./xg/test-training-2.bat 
            dest: C:\xg\client_training_02\test-training.bat
        - name: cp dmqw dir
          ansible.windows.win_shell: 'xcopy /y /c /h /r /s /d C:\xg\dmqw C:\xg\client_training_02\dmqw\'
        - name: cp train_script dir
          ansible.windows.win_shell: 'xcopy /y /c /h /r /s /d C:\xg\train_script C:\xg\client_training_02\train_script\'
    # 如果需要更多训练或者操作,按顺序添加到此处即可,实际项目中可能同时跑 10-20 组实例,此处为了減少篇幅只使用了2 组案例
    
  3. 启动训练任务
    此处启动两组训练任务,每组包括一个基础客戶端和一个 python 训练客戶端;此处为了防止程序被放在后台运行,使用执行定时任务的方式启动一組训练实例,因此需要手动或者通过 ansible 批量新建好对应的服务。
    如果程序可以放在后台执行,则直接执行对应的启动脚本,不需要单独建立相应的定时任务。
    - hosts: windows
      gather_facts: False
      tasks:
        - name: start start-client-u13701
          ansible.windows.win_shell: 'SCHTASKS /RUN /TN start-client-u13701'
          vars:
            display: true
        - name: sleep 10 seconds
          ansible.windows.win_shell: 'Start-Sleep -s 10'
        - name: start start-train-u13701
          ansible.windows.win_shell: 'SCHTASKS /RUN /TN start-train-u13701'
          vars:
            display: true
    
        - name: start start-client-u13702
          ansible.windows.win_shell: 'SCHTASKS /RUN /TN start-client-u13702'
          vars:
            display: true
        - name: sleep 10 seconds
          ansible.windows.win_shell: 'Start-Sleep -s 10'
        - name: start start-train-u13702
          ansible.windows.win_shell: 'SCHTASKS /RUN /TN start-train-u13702'
          vars:
            display: true
    # 实际中一个机器可能同时起10组或者更多的训练实例,此处为了节省篇幅,只使用了2 组案例;若实际中有需要,那么依次追加在这里即可。
    
  4. 关闭训练任务
    笔者训练的程序在进程目录中名称为 python.exe 和 client.exe,因此只需要关闭这 2 个相关的所有程序即可。如果有复杂的名称或者特定的退出脚本,则在win_shell 制定调整对应的名称或者执行相应脚本即可。
    - hosts: windows
      gather_facts: False
      tasks:
        - name: stop train program
          ansible.windows.win_shell: 'taskkill /f /t /im python.exe'
          vars:
            display: true
        - name: sleep 10 seconds
          ansible.windows.win_shell: 'Start-Sleep -s 10'
        - name: stop client program
          ansible.windows.win_shell: 'taskkill /f /t /im client.exe'
          vars:
            display: true
    
  5. 初始化运行环境
    初始化运行环境主要包括安裝项目运行的各种程序,配置各项环境变量,此处笔者只测试了一部分,暂未全部测试完成,暂时不贴,后续抽空补上。
    其基本思路就是合理使用 ansible笔记2–ansible windows基础 中的 安裝软件和配置环境变量 2 个操作。

3 注意事项

  1. 由于 ansible 执行的脚本默认会被放在后台执行,因此如果需要將任务放在前台,则可以考虑使用定时任务的方式启动服务(笔者只想到这个方法,若有其它好方法,欢迎在留言区补充)。
    下图是笔者新建的几个定时任务,主要是 start-client 和 start-train,触发该任务的时候会去执行指定的启动脚本:
    在这里插入图片描述
    改图是新建任务的基础选项,此处设置只有处于用戶登录状态才可以执行,而且取消了下面的Hidden 选项(如果开启则会导致服务重启后被丟到后台执行)。
    在这里插入图片描述
  2. playbook 中的 serial 可以控制并行的数量,如果需要同时在多个机器执行则调大该值即可。如果是滚动更新的场景,则可以考虑使用 serial 为 1, 从而能避免同时多个节点更新异常的情況。

4 说明

Ansible.Windows 常见模块

猜你喜欢

转载自blog.csdn.net/u011127242/article/details/113787461