Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 易变主/群结构_Linux_Windows_Automation_Ansible - Fatal编程技术网

Linux 易变主/群结构

Linux 易变主/群结构,linux,windows,automation,ansible,Linux,Windows,Automation,Ansible,我需要帮助,弄清楚我应该如何为我的用例构建我的主机和组 让我把场景稍微布置一下。我当前的设置如下: - hosts: '{{ target }}' name: Stop JBoss and App Services. remote_user: '{{ ansible_user }}' tasks: - name: Stopping JBoss Service. win_service: name: '{{ jboss_service_name }}'

我需要帮助,弄清楚我应该如何为我的用例构建我的主机和组

让我把场景稍微布置一下。我当前的设置如下:

- hosts: '{{ target }}'
  name: Stop JBoss and App Services.
  remote_user: '{{ ansible_user }}'
  tasks:
  - name: Stopping JBoss Service.
    win_service:
      name: '{{ jboss_service_name }}'
      start_mode: manual
      state: stopped

  - name: Stopping App Service.
    win_service:
      name: '{{ app_service_name }}'
      start_mode: manual
      state: stopped
ansible-playbook my-playbook.yml --extra-var "target=client_1"
ansible-playbook -i client_1 test-playbook.yml
主人

让我们看一下windows设置

组变量/窗口

主机变量/客户端变量1

然后,我的剧本如下所示:

- hosts: '{{ target }}'
  name: Stop JBoss and App Services.
  remote_user: '{{ ansible_user }}'
  tasks:
  - name: Stopping JBoss Service.
    win_service:
      name: '{{ jboss_service_name }}'
      start_mode: manual
      state: stopped

  - name: Stopping App Service.
    win_service:
      name: '{{ app_service_name }}'
      start_mode: manual
      state: stopped
ansible-playbook my-playbook.yml --extra-var "target=client_1"
ansible-playbook -i client_1 test-playbook.yml
因此,我可以按如下方式运行我的游戏:

- hosts: '{{ target }}'
  name: Stop JBoss and App Services.
  remote_user: '{{ ansible_user }}'
  tasks:
  - name: Stopping JBoss Service.
    win_service:
      name: '{{ jboss_service_name }}'
      start_mode: manual
      state: stopped

  - name: Stopping App Service.
    win_service:
      name: '{{ app_service_name }}'
      start_mode: manual
      state: stopped
ansible-playbook my-playbook.yml --extra-var "target=client_1"
ansible-playbook -i client_1 test-playbook.yml
或适用于所有windows计算机:

ansible-playbook my-playbook.yml --extra-var "target=windows"
这工作很好,我有这个工作如上所列。但是,此解决方案适用于我的客户端的单服务器设置。这意味着jboss、应用程序、web和db服务器都位于同一个物理服务器上——在本例中为172.0.0.1

然而,情况并非总是如此。对于任何给定的客户端,它可能是共享或分布式设置。这意味着jboss、app、web和db服务可能在一台服务器上,也可能在各自的服务器上

因此,我一直在尝试调整此设置,但我不确定如何确切地运行我的剧本,以便在特定的客户机服务器上执行决战服务命令。我仍然需要能够在单个客户端或组windows上执行playbook

这就是我到目前为止想到的

主机已删除ansible_主机=

组变量/窗口此处无更改

主机变量/客户端变量1将ip地址向下移动到客户端主机变量级别

在上面的host_var文件中,如果它是一个共享设置,我只需将**server*变量设置为全部使用相同的IP地址

我已经创建了一个测试剧本,debug可以打印host_var文件和group_var文件中的变量,这意味着它可以访问所有这些数据

我的执行如下:

- hosts: '{{ target }}'
  name: Stop JBoss and App Services.
  remote_user: '{{ ansible_user }}'
  tasks:
  - name: Stopping JBoss Service.
    win_service:
      name: '{{ jboss_service_name }}'
      start_mode: manual
      state: stopped

  - name: Stopping App Service.
    win_service:
      name: '{{ app_service_name }}'
      start_mode: manual
      state: stopped
ansible-playbook my-playbook.yml --extra-var "target=client_1"
ansible-playbook -i client_1 test-playbook.yml
然后我可以传入组windows而不是客户端主机

但我不明白的是,如何编辑我的旧剧本来利用这些新变量,例如,调用win_服务来关闭该客户端的jboss应该只在服务器主机\u vars/client_1.app_服务器上执行,同样地,关闭我的应用服务应该只在该客户端的服务器app_服务器上运行

我知道这是一篇很长的文章,所以谢谢你花时间阅读

我的问题是,我是否完全错了?我应该如何构造我的主机,以便能够区分windows和linux主机,能够通过客户端进行设置,并且能够支持任何给定客户端的共享或分布式服务器设置


非常感谢。

为您的主机命名不同的名称,但使用相同的IP地址:

[windows_app]
wa01 ansible_host=111.111.111.1

[windows_jboss]
wj01 ansible_host=111.111.111.1

[windows:children]
windows_app
windows_jboss
在组变量/windows应用程序和组变量/windows jboss中定义服务名称

您的剧本应定义特定剧本的主持人:

- hosts: windows
  name: Stop JBoss and App Services on Windows servers
  remote_user: '{{ ansible_user }}'
  tasks:
  - name: Stopping Service.
    win_service:
      name: '{{ service_name }}'
      start_mode: manual
      state: stopped
不要使用-extra-vars,而是使用-l或-limit=停止一项服务,但不要停止另一项服务:

ansible-playbook test-playbook.yml -l windows_app

@jww您在问题中看到的是一段Ansible代码。如何处理与编程或开发无关的代码?