使用ansible发布citrix应用

在使用ansible进行发布citrix应用时,思路是通过ansible脚本远程执行powershell脚本,传递参数给powershell脚本,具体工作由powershell执行。,
描述一下发布应用的步骤,powershell脚本由ansible传递到DDC上执行,应用是在VDA的远程机器上,首先获取应用的默认图标,然后再用此图标发布应用。
这个脚本直接在DDC上执行没问题,一旦由ansible执行,则报错,提示找不到location,经分析,是获取应用图标时无法访问路径。遭遇了second-hop问题

image.png

如图所示
第一步ansible通过PSSession登录到DDC是没问题的,但在这个Session中,如果要再访问VDA_Server的内容,则属于第二跳了,默认是没有登录凭证的。

解决办法:
使用CredSSP认证方式

  1. 在ansible中,配置windows的认证协议为CredSSP
ansible_user: Username
ansible_password: Password
ansible_connection: winrm
ansible_winrm_transport: credssp

2.关闭TLS v1.2(可选)

ansible_winrm_credssp_disable_tlsv1_2: true

3.安装CredSSP库

pip install pywinrm[credssp]
  1. 在windows机器上打开credssp,这里也就是需要在DDC上操作,让DDC可代理登录凭证(把凭证传给其他机器用于登录)
Enable-WSManCredSSP -Role Server -Force

这样就可以了。

问题2:发布中文应用名时出错
解决上一个问题后,发布可以了,但一旦有中文应用名,则powershell执行时显示名称参数不正确,不允许控制字符。
经排查,是ansible-semaphore接受的参数就是乱码了,再排查,发现是通过rest接口调用ansible-semaphore时,传递请求没有指明编码为utf-8。

解决:
发送http请求时,设定编码:

HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("Content-Type", "application/json;charset=utf-8");
....
StringEntity vars =new StringEntity(jsonStr,"UTF-8");
vars.setContentEncoding("UTF-8");
vars.setContentType("application/json");
httpPost.setEntity(vars);

使用这样的方式,即可解决中文名问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容