使用 powershell 暂时禁用 servicefabric 中的默认服务
Temporarily disabling default services in servicefabric using powershell
具体问题
对于那些只想直接提问的人:
- 有没有办法暂时禁用 ServiceFabric 应用程序类型的默认服务,以便可以安装新应用程序(使用 Powershell)而不自动安装任何默认服务?
- 此处建议的解决方案是从清单中删除默认服务,然后再恢复它们。我可以编写一个 PowerShell 脚本来相应地调整应用程序清单,但是如何使用 Powershell 更新应用程序类型 - 假设我已经更改了清单?
无需手动配置干预即可解决上下文问题的任何解决方案都是可以接受的 - 我提出的解决方案可能不是唯一可能的解决方案。我们确实明确希望避免人工干预。
当允许干预时,我们已经能够在需要时注释掉默认服务。我们正在专门寻找一种不需要干预的解决方案,因为这样可以减少错误和调试问题。
上下文
我运行遇到在本地开发期间使用应用程序清单的默认服务的问题。
我知道一般的 "don't use default services" 建议,并且正在遵循。在 CI 构建期间,默认服务已被删除,Azure 中的任何集群都不再依赖这些服务。这里唯一的例外是本地开发人员机器,它使用默认服务通过在启动调试会话时启用所有服务来使开发人员 F5 体验更好。
我们编写了专门的脚本来为新租户(SF 应用程序)提供他们自己的一组服务(SF 服务)。不是每个租户都应该获得每项服务,我们想要选择加入服务,这是脚本已经做的(基于我们在别处管理的映射,这不是当前问题的一部分,因为配置脚本存在并且有效).
但是,当启用默认服务时,每个租户都已经获得了所有服务,实际的选择加入配置是无用的。这是我们正在努力解决的问题。
这个相同的脚本在我们的生产集群中工作,因为那里没有配置默认服务。问题仅关注本地开发环境。
本质上,我们在本地开发过程中处理两种情况:
- 调试时,我们希望启用默认服务,因为它允许我们通过按 F5 运行 我们所有的服务(不需要任何进一步的操作)
- 在测试我们的配置脚本时,我们不需要默认服务,因为它会妨碍我们的选择性配置行为
我知道从清单中注释默认服务可以解决问题,但这需要开发人员不断切换清单的内容并重新安装应用程序类型,我们希望避免这种情况。
理想情况下,我们希望在清单中拥有默认服务(目前就是这种情况),然后让配置脚本 "disable" 在其自己的 运行 时间内拥有默认服务(并在退出前恢复默认服务),因为这使我们在两种情况下都能获得所需的行为。
在这两种情况下都需要最少的手动开发人员干预才能获得所需行为的解决方案是什么?
我目前正在尝试实现它以便配置脚本:
- 将应用程序清单复制到备份位置
- 从真实清单中删除默认服务
- 使用新清单更新应用程序类型(即没有默认服务)
- 运行配置逻辑
- 使用步骤 1 中的备份清单恢复真实清单
- 使用恢复的清单更新应用程序类型(即使用默认服务)
具体是第3步和第6步,我不知道如何实现。
考虑在解决方案中包含两个 sfproj 项目。一种有默认服务,一种没有。
同时考虑使用启动服务。ps1 脚本而不是默认服务。这样两个项目就可以使用相同的应用程序清单了。
具体问题
对于那些只想直接提问的人:
- 有没有办法暂时禁用 ServiceFabric 应用程序类型的默认服务,以便可以安装新应用程序(使用 Powershell)而不自动安装任何默认服务?
- 此处建议的解决方案是从清单中删除默认服务,然后再恢复它们。我可以编写一个 PowerShell 脚本来相应地调整应用程序清单,但是如何使用 Powershell 更新应用程序类型 - 假设我已经更改了清单?
无需手动配置干预即可解决上下文问题的任何解决方案都是可以接受的 - 我提出的解决方案可能不是唯一可能的解决方案。我们确实明确希望避免人工干预。
当允许干预时,我们已经能够在需要时注释掉默认服务。我们正在专门寻找一种不需要干预的解决方案,因为这样可以减少错误和调试问题。
上下文
我运行遇到在本地开发期间使用应用程序清单的默认服务的问题。
我知道一般的 "don't use default services" 建议,并且正在遵循。在 CI 构建期间,默认服务已被删除,Azure 中的任何集群都不再依赖这些服务。这里唯一的例外是本地开发人员机器,它使用默认服务通过在启动调试会话时启用所有服务来使开发人员 F5 体验更好。
我们编写了专门的脚本来为新租户(SF 应用程序)提供他们自己的一组服务(SF 服务)。不是每个租户都应该获得每项服务,我们想要选择加入服务,这是脚本已经做的(基于我们在别处管理的映射,这不是当前问题的一部分,因为配置脚本存在并且有效).
但是,当启用默认服务时,每个租户都已经获得了所有服务,实际的选择加入配置是无用的。这是我们正在努力解决的问题。
这个相同的脚本在我们的生产集群中工作,因为那里没有配置默认服务。问题仅关注本地开发环境。
本质上,我们在本地开发过程中处理两种情况:
- 调试时,我们希望启用默认服务,因为它允许我们通过按 F5 运行 我们所有的服务(不需要任何进一步的操作)
- 在测试我们的配置脚本时,我们不需要默认服务,因为它会妨碍我们的选择性配置行为
我知道从清单中注释默认服务可以解决问题,但这需要开发人员不断切换清单的内容并重新安装应用程序类型,我们希望避免这种情况。
理想情况下,我们希望在清单中拥有默认服务(目前就是这种情况),然后让配置脚本 "disable" 在其自己的 运行 时间内拥有默认服务(并在退出前恢复默认服务),因为这使我们在两种情况下都能获得所需的行为。
在这两种情况下都需要最少的手动开发人员干预才能获得所需行为的解决方案是什么?
我目前正在尝试实现它以便配置脚本:
- 将应用程序清单复制到备份位置
- 从真实清单中删除默认服务
- 使用新清单更新应用程序类型(即没有默认服务)
- 运行配置逻辑
- 使用步骤 1 中的备份清单恢复真实清单
- 使用恢复的清单更新应用程序类型(即使用默认服务)
具体是第3步和第6步,我不知道如何实现。
考虑在解决方案中包含两个 sfproj 项目。一种有默认服务,一种没有。
同时考虑使用启动服务。ps1 脚本而不是默认服务。这样两个项目就可以使用相同的应用程序清单了。