ansible笔记3--playbook windows基础

2023-10-26

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 常见模块

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ansible笔记3--playbook windows基础 的相关文章

  • 无法将属性与数字进行比较。错误:“‘AnsibleUnsafeText’和‘int’实例之间不支持”

    getent database passwd debug var getent passwd dict2items selectattr value 1 gt 1000 map attribute key list 输出是 TASK deb
  • Ansible 循环直到条件匹配。

    我想进行一系列 API 调用 每次调用后检查结果中的特定参数 如果它大于特定值 则将其保存在寄存器中并继续进一步执行剧本 基本上 我正在对 RHEV 进行 API 调用来检查存储域 然后我想检查存储域是否有足够的空间 如果有 则将该存储域i
  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • Ansible 无法运行任何命令或 shell

    我在 RPi 上运行任何命令或 shell 时遇到问题 当我使用以下代码时 name Example command ansible builtin command cmd cat etc motd 我收到此错误 Unsupported p
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • if else 在 ansible 打印语句中

    我需要有关具有多个条件的打印语句的语法的帮助 目前 报价为 inventory hostname 导致错误 如果我删除剧本运行的引号 但列出文本 inventory hostname 而不是变量 我想知道如何打印变量以及 if else 语
  • local_action:shell 连接文件时出错

    我的剧本中有这样的错误 为什么以及如何解决它 获取远程主机的更新列表 将列表连接到一个文件中 name Save update deb packs in file on ansible host copy content update de
  • 在 Ansible 中使用模板模块附加文件

    所以我有一个 ansible 剧本 它使用 Jinja2 模板来创建日志文件 每次我运行剧本时 它都会从customers yml中提取客户信息 并将完整的模板输出到 stunnel conf 文件中 该模板工作正常 但我试图找到一种方法来
  • 如何在 Jinja 中过滤字典?

    我有一个包字典 包名称是key和一些细节的字典是value php7 1 readline latest 7 1 9 1 ubuntu14 04 1 deb sury org 1 origins ppa launchpad net vers
  • 如何使用ansible将vars文件包含在vars文件中?

    是否可以将 Ansible 中的 vars 文件动态包含到另一个 vars 文件中 IE 我有 vars 文件 definitions product web v2 suite mysuite include default step ym
  • Ansible 输出格式选项

    是否有一个选项可以使用 ansible 而不是任何其他脚本 来格式化 ansible 输出 例如 name Show version sudo true hosts web front end tasks name Create yum c
  • Ansible 多个清单文件

    我正在尝试将多个清单文件和动态清单与 Ansible 1 4 和 dev 一起使用 Ansible 返回没有匹配的主机 我有一个模拟场景 目录中有两个主机文件test列出该目录的内容 主机1 ini group1 test1 ansible
  • Ansible - 默认/显式标签

    我有一本剧本 其中包含并标记了各种角色 name base hosts host default localhost roles role apt tags base apt ubuntu role homebrew tags base h
  • 我们如何在使用循环时调用 ansible playbook 中的变量

    我有两个文件 其中这些文件包含server names and server IP s 我想更改 替换一些特定的server names and IP addressees根据要求在两个文件中 这与这篇文章 因为它被要求开设一个新职位 ht
  • Cloudformation 堆栈在执行所有用户数据之前显示为完整

    在我的 cloudformation 堆栈中 我有一个启动配置 它在用户数据中运行 ansible 脚本 这里的问题是 我的堆栈状态显示CREATE COMPLETE即使 ansible 脚本尚未完成执行 在我 ssh 进入 ec2 实例后
  • Ansible:对任务失败执行清理

    我目前正在编写一个 Ansible play 它遵循此通用格式并通过 cron 作业运行 pre tasks Configuration package installation tasks Work with installed pack
  • 失败的! => {"changed": false, "msg": "apt 缓存更新失败"} 尝试时

    我是新来的Ansible https en wikipedia org wiki Ansible software 并尝试安装一个任务作为示例Vivaldi https en wikipedia org wiki Vivaldi 28web
  • 如何将主机添加到 Ansible Tower 库存中的组?

    如何使用以下命令将主机添加到组中tower group or tower host模块 以下代码创建一个主机和一个组 但它们彼此无关 hosts localhost connection local gather facts false t
  • 本地主机中的 Ansible SSH 连接错误

    当我针对本地主机启动我的剧本时 出现此错误 TASK setup fatal 127 0 0 1 UNREACHABLE gt changed false msg SSH encountered an unknown error durin
  • Ansible 条带空白

    当我尝试在 nxos 设备上运行某些命令时 输出末尾有一个空格 我必须将输出与现有变量列表进行比较 末尾的空格导致比较错误 如何在字符串列表中使用 strip 函数 name Current TACACS server host befor

随机推荐

  • tensorflow深度学习实战笔记(一):使用tensorflow slim自带的模型训练自己的数据

    目录 0 准备 1 数据处理 图片格式转成TFRecord格式 2 模型训练 3 验证训练后的效果 说明 此处可以模仿源码中inception v3的分类案例 slim预训练好的包含inception v1 inception v2 inc
  • mac免费的虚拟机怎么安装?VMware虚拟机免费获取教程

    大部分Mac用户大部分都是通过Parallels Desktop或者VMware Fusion Pro安装虚拟机 可两款虚拟机价值不菲 但是今天小编为大家带来VMware虚拟机免费获取教程 仅限个人或者非商业用途使用 VMware虚拟机免费
  • createBean源码--方便查看

    Class clz Class forName 类名 createBean resolveBeanClass mbd beanName Object o clz newInstance createBean doCreateBean cre
  • socket编程选项——setsockopt和getsockopt

    头文件 include
  • 深入理解Spring IOC和AOP

    文章目录 1 什么是 Spring 框架 1 1Spring简介 1 2Spring的好处 1 3Spring体系结构 2 理解Spring IoC 2 1IoC简介 2 2IoC的好处 2 3依赖注入和控制反转 依赖注入详解 依赖注入的三
  • NN编译栈之TVM研究报告

    前言 深度学习 神经网络应用日益广泛 多终端部署形成常态 从CPU ARM GPU到专用的神经网络加速器 深度学习处理器 不同的终端 不同的体系结构引起神经网络的碎片化 为每一款设备特别是专用的加速芯片部署深度学习是一件费力不讨好的事情 同
  • RNA-seq——上游分析练习(数据下载+hisat2+samtools+htseq-count)

    步骤 0 练习前准备 1 找到文章对应的数据集 2 下载数据集 3 与参考基因组进行比对 4 reads计数 5 踩过的一点小坑 写在前面 之前使用的数据是单端测序 但是现在的数据基本都是双端测序 所以又找了个双端测序的例子来练习 之前在单
  • 23种设计模式

    目录 创建型 1 Factory Method 工厂方法 2 Abstract Factory 抽象工厂 3 Builder 建造者 4 Prototype 原型 5 Singleton 单例 结构型 6 Adapter Class Obj
  • qq音乐服务器的位置,QQ音乐的歌曲真实地址解析

    打开该页面地址 是这样的 梦一场 那英 QQ音乐 点击页面中的播放按钮 会在新页面的播放器里播放该音乐 在新页面中打开开发者工具的网络探测 重新刷新页面 会发现相关请求如下 https c y qq com base fcgi bin fc
  • RISC-V Debug Introduction

    1 JTAG简介 目前RISC V官方支持的调试方式是JTAG Joint Test Action Group 而ARM支持的调试方式有JTAG和SWD Serial Wire Debug 这两种 JTAG是一种国际标准的调试方式 IEEE
  • 人工智能驱动的个性化新闻 APP |Artifact

    个性化新闻 指根据用户的兴趣 行为和需求 通过数据挖掘 协同过滤等技术 实现新闻内容的个性化推荐 这种推荐技术可以帮助用户在海量新闻中快速找到感兴趣的内容 提高阅读体验 同时也能缓解用户信息过载的问题 随着人工智能的发展 个性化新闻 APP
  • ubuntu14.04-root用户

    一 其实我个人认为这没有多大必要 因为当你需要 root 的权限时 使用 sudo 便可以了 如果你实在需要在 Ubuntu 中启用 root 帐号的话 那么不妨执行下面的操作 1 重新设置 root 的密码 sudo passwd roo
  • opencv手势识别(2_KNN算法识别)

    手势识别系列博文2 KNN算法识别手势 前言 原理介绍 代码实现 前言 书山有路勤为径 学海无涯苦做舟 琴某人辛辛苦苦码的报告 当然不能让你们这么容易复制过去 运行视频见链接 https www bilibili com video BV1
  • 【ROS2机器人入门到实战】里程计计算-速度积分

    14 里程计计算 速度积分 写在前面 当前平台文章汇总地址 ROS2机器人从入门到实战 获取完整教程及配套资料代码 请关注公众号 lt 鱼香ROS gt 获取 教程配套机器人开发平台 两驱版 四驱版 为方便交流 搭建了机器人技术问答社区 地
  • 探索AIDL(2) -- 简单分析AIDL为我们自动创建的Java类

    前言 上篇文章说到AIDL只是一种接口定义语言 系统会根据它为我们自动创建进行IPC通信的代码 其实所生成的代码是一个Java类 存在于 app build generated source aidl debug 包名 目录下 我们可以简单
  • servlet+jsp+mysql+jdbc实现注册登录

    此处我就只贴出java代码和jsp代码 数据库表自己根据Regist java去创建 1 首先 我先把前端代码贴出来 这个比较简单 没什么 注册 regist jsp
  • 【Spring Boot】spring boot多环境配置及配置文件

    配置文件位置 spring boot 官网都是推荐以yaml为主 所以下面仅展示yaml配置文件位置 如果在不同的目录中存在多个配置文件 它的读取顺序是 1 config application properties 项目根目录中confi
  • JAVA&狂神学习笔记_8.数据类型

    基本数据类型 数值类型 整数类型 byte 1 字节 128 127 short 2 字节 32768 32767 int 4 字节 long 8 字节 浮点类型 float 4 字节 double 8 字节 字符类型 char 2字节 b
  • 利用MultipartFile实现文件上传

    利用MultipartFile实现文件上传 在java中上传文件似乎总有点麻烦 没 net那么简单 记得最开始的时候用smartUpload实现文件上传 最近在工作中使用spring的MultipartFile实现文件上传 感觉挺简单 在这
  • ansible笔记3--playbook windows基础

    ansible笔记3 playbook windows基础 1 介绍 2 常见案例 3 注意事项 4 说明 1 介绍 笔者在前文 ansible笔记2 ansible windows基础 中已经介紹了Windows下的环境配置以及对应的 a