saltstackwindows客户端远程执行脚本提示路径不对的问题

环境:

salt-master ==2018.3.0

salt-minion ==2018.3.0

python== 2.7.5

centos==7

问题描述:

salt有个远程执行命令的模块cmd.script,在使用该模块时,出现错误:

salt ‘minion-id’ cmd.script salt://test.ps1 shell=powershell

其中salt:///etc/salt.conf定义的base路径,其下存放了test.ps1的脚本

# vim test.ps1

echo test

返回错误信息:

查看windows客户端日志c:\salt\var\log\salt\minion

查看目录确实minion已从master下载到window临时目录且随机重命名

经查,系因为2018.3.0版本saltbug,该bug是把执行的脚本进过转换成python的列表list,然后又重新转换回字符串string类型,期间会加上单引号“”,但是windows无法识别带单引号的脚本名称路径格式,从而导致问题,具体可见python源代码。

其实从2017.4版本就有,2017.7版本修复,但是因为开了另一个版本分支,因此2018.3.0没有修复该bug,只有2018.3.1才修复了。

https://github.com/saltstack/salt/pull/45716

https://github.com/saltstack/salt/pull/45716

解决办法:

升级salt-master2018.3.1版本,升级salt-minion2018.3.1版本与master保持一致。

成功重新执行命令并获取返回结果:

经验:

  1. 在选择工具的版本时,还是要多注意官网上的release note 说明,选择较正常和稳定的版本避免后续遇到更多奇葩问题。

  2. 在提问或者帮助asker解决问题时,也要注意check版本信息,否则总会有些情况:为什么我明明follow正确解决方法来做就是不行?!

  3. 在解决的过程中,不知不觉就能掌握很多东西。

  4. 多看官网和社区,国内没人能解答。

saltstack在windows客户端远程执行脚本提示路径不对的问题的更多相关文章

  1. centos6 – 使用SaltStack向文件添加单行

    我想在我的环境中的所有/etc/sudoers文件中添加以下行:但是,每个服务器都有一个不同的/etc/sudoers文件,从一个位置获取它们是不切实际的.在Salt中是否有办法确保文件中存在单行(或行组),而不是管理整个文件?

  2. ubuntu-12.04 – Ubuntu上的LXC和Saltstack minion_id配置

    我正在使用LXC作为测试SaltStack脚本的实验室平台.该实验室由5个Ubuntu12.04LTS容器组成,我通过克隆预先安装了salt-minion的模板容器创建.创建模板容器并安装salt-minion后,模板将根据主机名获取其Saltminion_id.如果我lxc克隆此模板,所有克隆都将具有该模板的minion_id,但我希望克隆使minion_id与其主机名匹配.有没有办法让这个用bash编写脚本,还是我应该采取另一条路径来达到同样的效果?

  3. CentOS 7下SaltStack安装配置详解

    saltstack是使用python语言开发的,同时也支持restAPI方便二次开发以及和它平台集成,同时官方也发布了一个Web管理界面halite。saltstack三大功能远程执行配置管理云管理saltstack数据系统Grainspillarsaltstack配置管理SLSHighstateStatesModule实现环境准备三台机器,这三台机器都关闭selinux,清空防火墙规则。{%ifgrains.os=='CentOS'%}类似于django的模板语言(我们可以采用python脚本定义gra

  4. Centos-7下saltstack安装配置详解

    简述saltstacksaltstack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递。saltstack是使用python语言开发的,同时也支持restAPI方便二次开发以及和它平台集成,同时官方也发布了一个Web管理界面halite。saltstack三大功能远程执行配置管理云管理saltstack数据系统Grainspillarsaltstack配置管理SLSHighstateStatesModule实现环境准备三台机器,这三台机器都

  5. Kickstart无人值守安装Centos6系统+集成saltstack客户端程序

    如果要同时上线2,3台服务器,可以使用手动安装操作系统,10台20台基本没法忍受,上百台呢,根本不可能手动安装管理,只考虑到这里并不能解决所有问题,只装个系统并不能满足批量管理的需求,这就需要在安装好系统后自动启动salt客户端程序,实现在装完系统后就在运维人员的管理范围之类,这篇文章就是基于这样的需求而完成的。

  6. centos安装saltstack

    第1章环境Centos7系统Python版本没有做过升级主机名注意hosts文件做解析。Saltstack是可以按主机名来做远程执行的防火墙关关闭配置阿里云epel源主机:说明saltstack-master192.168.0.56saltstack-minion192.168.0.57saltstack-minion192.168.0.58saltstack-minion192.168.0.59第2章安装yuminstallsalt-masterCy管理节点装服务端yumCyinstallsalt-mi

  7. CentOS6/7 使用saltstack源安装saltstack

    安装完成启动minionCentOS7安装saltstack运行以下命令来安装SaltStack存储库和密钥清楚yum过期缓存依次执行下面命令安装salt所用模块以安装salt-minion为例。

  8. saltstack模式匹配

    salt匹配规则有多种,对应各种不同的场景,相关参数如下图所示。

  9. CentOS 6.5 SaltStack安装配置

    SaltStack开源的集群管理工具,基于Python开发,开源,简单,快速,容易上手。

  10. SaltStack使用教程六:管理服务妙用pillar实现centos6和centos7通配

    随着centos7的不断稳定和新的特性吸引,公司慢慢开始用centos6向centos7迁移。因为早起写了很多专用于centos6的sls最近抽时间把一部分地方进行了修改,例如centos6的MysqL到cnetos7默认变为了“mariadb”pkg.installd在centos7进行安装的时候就会失败,很多软件是源码安装启动脚本位置不同系统会不同。为了解决这个不兼容的问题,我在这是使用pillar定义了变量通过不同系统版本选择不同的软件名或者脚本路径。

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部