簡體   English   中英

如何在 ansible 劇本中將目標服務器將運行任務的主機名字符串定義為變量?

[英]How to define as variables the strings of hostname of target-server-which-will-run-the-tasks in ansible playbook?

我寫了一個 ansible 劇本,
它被命名為main.yml ,放置在路徑/my_path/ansible-venv/bin/ansible-playbook playbooks/generate_results/

我想通過傳遞一些參數從 bash shell 激活它,如下所示

/my_path/ansible-venv/bin/ansible-playbook playbooks/generate_results/main.yml --extra-vars="field_A=$value_A field_B=$value_B"

這些參數應定義運行 playbook 任務的主機。
該劇本旨在對尋址主機上的數據庫運行查詢,以生成包含查詢結果的 csv 文件。

下面是我的劇本。

有沒有辦法定義以下變量

  • 值_A
  • 值_B
  • 服務器_目標
  • csv_文件名
  • csv_文件名

在需要它們的任務運行之前?

我把它們放在關鍵的vars:下,但這是錯誤的

我該怎么做?

注意:數據庫訪問憑證保存在另一個 ansible 文件中

---


vars:

# inputs
#--------
    # these variables will be overwritten as extra variables by the bash calling this ansible playbook

    value_A: 0                                                    # cannot be left void
    value_B: 0                                                    # cannot be left void


# fixed variables
# ----------------------

    remote_machine_filepath: '/tmp/'


# input processing
#----------------------

    server_target:  "{{ 'server-' + value_A.zfill(3) + '_B'+value_B }}"



# generated variables
# ----------------------

    csv_filename: "results_{{ value_A }}{{ value_B }}.csv"

    copy_query: "\copy (select * from my_table where field_A={{ value_A }} and field_B={{ value_B }}) to '{{ remote_machine_filepath }}{{ csv_filename }}' with delimiter ';' CSV HEADER;"



- hosts: 
    - {{ server_target }}

  order: sorted
  gather_facts: False


  tasks:

    - name: generate csv
      ansible.builtin.shell: 
        cmd: psql -h '{{ db_host }}' -U '{{ db_username }}' -d '{{ db_database }}' -p '{{ db_database_port }}' -tAc "{{ copy_query }}"
      register: psql_output  # this will be like: COPY X
      ignore_errors: true
      no_log: true

解決了

給整個vars塊一個 +1 縮進並在塊開始的地方添加一個 - 就足夠了(我在塊中添加了一個name關鍵字)以使其工作(與hosts相同的縮進級別)

---
  - name: my_playbook

    vars:
    
    # inputs
    #--------
        # these variables will be overwritten as extra variables by the bash calling this ansible playbook
    
        value_A: 0                                                    # cannot be left void
        value_B: 0                                                    # cannot be left void
    
    
    # fixed variables
    # ----------------------
    
        remote_machine_filepath: '/tmp/'
    
    
    # input processing
    #----------------------
    
        server_target:  "{{ 'server-' + value_A.zfill(3) + '_B'+value_B }}"
    
    
    
    # generated variables
    # ----------------------
    
        csv_filename: "results_{{ value_A }}{{ value_B }}.csv"
    
        copy_query: "\copy (select * from my_table where field_A={{ value_A }} and field_B={{ value_B }}) to '{{ remote_machine_filepath }}{{ csv_filename }}' with delimiter ';' CSV HEADER;"
    
    
    
- hosts: 
    - {{ server_target }}

  order: sorted
  gather_facts: False


  tasks:

    - name: generate csv
      ansible.builtin.shell: 
        cmd: psql -h '{{ db_host }}' -U '{{ db_username }}' -d '{{ db_database }}' -p '{{ db_database_port }}' -tAc "{{ copy_query }}"
      register: psql_output  # this will be like: COPY X
      ignore_errors: true
      no_log: true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM