1 介绍
笔者在前文 ansible笔记2–ansible windows基础 中已经介紹了Windows下的环境配置以及对应的 ansible 基础案例,本文将在其基础上通过 playbook 实现更加复杂的任务。
2 常见案例
- 调整 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
- 初始化目录 & 更新数据
此处主要是初始化后续实例的目录,拷贝脚本和可执行程序包(暂时不包括安装运行环境)。- 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 组案例
- 启动训练任务
此处启动两组训练任务,每组包括一个基础客戶端和一个 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 组案例;若实际中有需要,那么依次追加在这里即可。
- 关闭训练任务
笔者训练的程序在进程目录中名称为 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
- 初始化运行环境
初始化运行环境主要包括安裝项目运行的各种程序,配置各项环境变量,此处笔者只测试了一部分,暂未全部测试完成,暂时不贴,后续抽空补上。
其基本思路就是合理使用 ansible笔记2–ansible windows基础 中的 安裝软件和配置环境变量 2 个操作。
3 注意事项
- 由于 ansible 执行的脚本默认会被放在后台执行,因此如果需要將任务放在前台,则可以考虑使用定时任务的方式启动服务(笔者只想到这个方法,若有其它好方法,欢迎在留言区补充)。
下图是笔者新建的几个定时任务,主要是 start-client 和 start-train,触发该任务的时候会去执行指定的启动脚本:
该图是新建任务的基础选项,此处设置只有处于用戶登录状态才可以执行,而且取消了下面的Hidden 选项(如果开启则会导致服务重启后被丟到后台执行)。
- playbook 中的 serial 可以控制并行的数量,如果需要同时在多个机器执行则调大该值即可。如果是滚动更新的场景,则可以考虑使用 serial 为 1, 从而能避免同时多个节点更新异常的情況。