如何在Ansible剧本中动态更改主机

时间:2020-03-10 15:59:47

标签: ansible devops ansible-2.x ansible-awx

我需要在Ansible剧本中动态更改主机

下面是我的示例剧本

---
- name: Deployment Playbook  
  hosts:  “{{Servers}}”
  tasks:
    - name: deployment   
      shell: "deploy.sh {{DEPLOY_NAME}}"  

在上面的游戏中,我需要根据DEPLOY_NAME更改服务器

示例

如果{{DEPLOY_NAME}} = APP

{{Servers}} = 172.17.65.17

如果{{DEPLOY_NAME}} = SCRIPT

{{Servers}} = 172.17.65.66

以前,我们将其作为AWX的清单传递给我们。但是现在我们需要在剧本上进行处理。

所以请在这个问题上帮助我

2 个答案:

答案 0 :(得分:2)

---
- name: Deployment Playbook targetting Servers_1, will be skipped if DEPLOY_NAME is not APP
  hosts:  “{{Servers_1}}”
  tasks:
    - name: deployment   
      shell: "deploy.sh {{DEPLOY_NAME}}"
      when: DEPLOY_NAME == 'APP'

- name: Deployment Playbook targetting Servers_1, will be skipped if DEPLOY_NAME is not SCRIPT      
  hosts:  “{{Servers_2}}”
  tasks:
    - name: deployment   
      shell: "deploy.sh {{DEPLOY_NAME}}"
      when: DEPLOY_NAME == 'SCRIPT'

答案 1 :(得分:0)

我认为您无法做到。我认为这可能对您有用,而是改为执行此操作:

public class AutoHeightWebViewRenderer : WebViewRenderer
{
    static AutoHeightWebView _xwebView = null;

    public AutoHeightWebViewRenderer(Android.Content.Context context) : base(context)
    {
    }

    class DynamicSizeWebViewClient : WebViewClient
    {
        public async override void OnPageFinished(Android.Webkit.WebView view, string url)
        {
            try
            {
                if (_xwebView != null)
                {
                    view.Settings.JavaScriptEnabled = true;
                    view.Settings.DomStorageEnabled = true;
                    _xwebView.HeightRequest = 0d;

                    await Task.Delay(100);

                    string result = await _xwebView.EvaluateJavaScriptAsync("(function(){return document.body.scrollHeight;})()");
                    _xwebView.HeightRequest = Convert.ToDouble(result);
                }
                base.OnPageFinished(view, url);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{ex.Message}");
            }
        }
    }

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
    {
        base.OnElementChanged(e);
        _xwebView = e.NewElement as AutoHeightWebView;

        if (e.OldElement == null)
        {
            Control.SetWebViewClient(new DynamicSizeWebViewClient());
        }
    }
} 

您甚至可以通过使用“来自awx的清单”,将其加载为包含该列表的“ vars_files”来改善此情况。因此,您的最终循环将遍历该列表。像这样:

---
- name: Deployment Playbook  
  hosts:  localhost
  tasks:
    - name: deployment   
      shell: ssh root@{{ item.server }} deploy.sh {{ item.app }}
      loop:
        - { server: 'server1', app: 'app_1' }
        - { server: 'server1', app: 'app_1' }