Azure Service Fabric - 使用Powershell

时间:2018-05-09 00:30:35

标签: powershell azure-service-fabric

是否可以通过Settings.xml文件或其他方式在运行时将参数注入Guest Executable?我有一个GuestExecutable,我需要将一些配置传递给它 - 在服务创建时的URL。

我需要两个使用不同参数运行的服务实例,服务实例信息必须在我需要传递的自定义参数方面有所不同。这是否可以使用Powershell,或者我是否需要对配置进行版本设置并创建新版本?

提前致谢

1 个答案:

答案 0 :(得分:1)

您是否尝试过以下命令:New-ServiceFabricApplication

创建应用程序清单文件时,参数将包含您在注册新应用程序时设置的可替换参数。

像这样的ApplicationManifest.xml示例:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="MyAppTypeName" ApplicationTypeVersion="1.0.0" xmlns=...>
  <Parameters>
    <Parameter Name="Web1_InstanceCount" Value="-1" />
    <Parameter Name="ENVIRONMENT_NAME" Value="DEV" />
    <Parameter Name="FEPlacementConstraints" Value="NodeTypeName==FrontEnd" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <EnvironmentOverrides />
  </ServiceManifestImport>
  <DefaultServices>
    <Service Name="Web1">
      <StatelessService ServiceTypeName="MyServiceType" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
        <PlacementConstraints>[FEPlacementConstraints]</PlacementConstraints>
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

您可以使用以下配置覆盖来更改设置文件:

<ConfigOverrides>
  <ConfigOverride Name="Config">
    <Settings>
      <Section Name="MyConfigSection">
        <Parameter Name="MySetting" Value="[ENVIRONMENT_NAME]"/>
      </Section>
    </Settings>
  </ConfigOverride>
</ConfigOverrides>

或者您可以在服务上设置环境变量,如下所示:

<EnvironmentOverrides CodePackageRef="Code">
  <EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="[ENVIRONMENT_NAME]" />
</EnvironmentOverrides>

  

在我看来,环境覆盖会更好地适用于您的情况,   因为大多数客户可执行文件在配置它们方面不灵活,但通常它们接受环境变量。

然后你:

New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-dev -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='DEV'}

New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-uat -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='UAT'}

这种方法的唯一缺点是你最终会得到两个应用程序,但不认为对你来说是个问题,它们的管理方式与你使用单个应用程序的方式大致相同。 / p>

如果你真的需要在同一个应用程序上同时运行它们,你可以做一些解决方法:

  • 使用多个配置包(不要认为可以使用来宾可执行文件,但适用于可靠的服务

  • 使用启动脚本,您可以在其中添加逻辑以将参数传递给启动exe,如下所示:

ServiceManifest.xml

  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>start.bat</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </EntryPoint>
  </CodePackage>

在.exe的同一文件夹(代码)上,创建包含以下内容的start.bat文件:

myApp.exe %EnvironmentVariableNameSetBySF%