Ansible 如何为同一变量的多个服务器提供不同的值

Ansible 如何为同一变量的多个服务器提供不同的值,ansible,Ansible,我有一个剧本,可以安装IIS、配置应用程序池、网站和部署应用程序。现在我有一个独特的要求。独特的意义上,我仍然不知道如何做:-)。要求在4台服务器组成的集群中,将回收团队的时间间隔设置为15分钟。i、 e.第一台服务器的回收时间为晚上10:00,第二台为晚上10:15,依此类推 关于如何实现它的任何建议 我已经用以下设置设置了应用程序池 - name: Setup TestWorkerApi Apppool in IIS win_iis_webapppool: name: TestWo

我有一个剧本,可以安装IIS、配置应用程序池、网站和部署应用程序。现在我有一个独特的要求。独特的意义上,我仍然不知道如何做:-)。要求在4台服务器组成的集群中,将回收团队的时间间隔设置为15分钟。i、 e.第一台服务器的回收时间为晚上10:00,第二台为晚上10:15,依此类推

关于如何实现它的任何建议

我已经用以下设置设置了应用程序池

- name: Setup TestWorkerApi Apppool in IIS
  win_iis_webapppool:
   name: TestWorkerApi
   state: started
   attributes:
     managedPipelineMode: Integrated
     startMode: AlwaysRunning
     processModel.identityType: SpecificUser
     processModel.userName: '{{ Domain }}\{{ Test_In_User }}'
     processModel.password: "{{ Test_In_Pwd }}"
     managedRuntimeVersion: v4.0
     processModel.idleTimeout: 0
     processModel.idleTimeoutAction: Suspend
     recycling.periodicRestart.schedule: ["22:00:00"]
     autoStart: yes
   register: apppool_output-TestWorkerApi
  tags:
     - TestApp

我正在寻找应用程序池回收时间,第一台服务器为晚上10:00,第二台服务器为晚上10:15,第三台服务器为晚上10:30等等…

Ansible允许您设置主机特定变量

(a) 在您的库存中,以及 (b) 在
host\u vars
目录中的变量文件中

在这两种情况下,您都可以使用所需的值为每个主机设置一个
recycle\u time
变量。例如,使用传统的库存格式,可能看起来像:

server1 recycle_time=22:00:00
server2 recycle_time=22:15:00
server3 recycle_time=22:30:00
server4 recycle_time=22:45:00
或使用YAML库存格式:

all:
  hosts:
    server1:
      recycle_time: "22:00:00"
    server2:
      recycle_time: "22:15:00"
    server3:
      recycle_time: "22:30:00"
    server4:
      recycle_time: "22:45:00"
或者使用
host\u vars
目录创建
host\u vars/server1.yml
,内容如下:

recycle_time: "22:00:00"
…对于其他服务器也是如此

在任何情况下,您都可以在您的剧本中引用
recycle\u time
变量:

- name: Setup TestWorkerApi Apppool in IIS
  win_iis_webapppool:
   name: TestWorkerApi
   state: started
   attributes:
     managedPipelineMode: Integrated
     startMode: AlwaysRunning
     processModel.identityType: SpecificUser
     processModel.userName: '{{ Domain }}\{{ Test_In_User }}'
     processModel.password: "{{ Test_In_Pwd }}"
     managedRuntimeVersion: v4.0
     processModel.idleTimeout: 0
     processModel.idleTimeoutAction: Suspend
     recycling.periodicRestart.schedule: [{{ recycle_time }}]
     autoStart: yes
   register: apppool_output-TestWorkerApi
  tags:
     - TestApp

您可以在Ansible文档的“”部分阅读更多内容。

Ansible允许您设置主机特定变量

(a) 在您的库存中,以及 (b) 在
host\u vars
目录中的变量文件中

在这两种情况下,您都可以使用所需的值为每个主机设置一个
recycle\u time
变量。例如,使用传统的库存格式,可能看起来像:

server1 recycle_time=22:00:00
server2 recycle_time=22:15:00
server3 recycle_time=22:30:00
server4 recycle_time=22:45:00
或使用YAML库存格式:

all:
  hosts:
    server1:
      recycle_time: "22:00:00"
    server2:
      recycle_time: "22:15:00"
    server3:
      recycle_time: "22:30:00"
    server4:
      recycle_time: "22:45:00"
或者使用
host\u vars
目录创建
host\u vars/server1.yml
,内容如下:

recycle_time: "22:00:00"
…对于其他服务器也是如此

在任何情况下,您都可以在您的剧本中引用
recycle\u time
变量:

- name: Setup TestWorkerApi Apppool in IIS
  win_iis_webapppool:
   name: TestWorkerApi
   state: started
   attributes:
     managedPipelineMode: Integrated
     startMode: AlwaysRunning
     processModel.identityType: SpecificUser
     processModel.userName: '{{ Domain }}\{{ Test_In_User }}'
     processModel.password: "{{ Test_In_Pwd }}"
     managedRuntimeVersion: v4.0
     processModel.idleTimeout: 0
     processModel.idleTimeoutAction: Suspend
     recycling.periodicRestart.schedule: [{{ recycle_time }}]
     autoStart: yes
   register: apppool_output-TestWorkerApi
  tags:
     - TestApp

您可以在Ansible文档的“”部分阅读更多内容。

谢谢Larsks,谢谢您提供的信息。我会选择剧本中包含的所有内容,所以第二个选项对我来说是积极的。我有其他的场景,你的第二个解决方案给了我一些提示,看起来很合适。再次感谢。谢谢Larsks,谢谢你提供的信息。我会选择剧本中包含的所有内容,所以第二个选项对我来说是积极的。我有其他场景,您的第二个解决方案给了我一些提示,看起来很合适。再次感谢。