ansible變數

来源:https://www.cnblogs.com/1naonao/archive/2019/09/20/11553704.html
-Advertisement-
Play Games

[toc] ansible變數 定義變數的方式 命令行 playbook 主機清單 如何定義變數 1.在playbook中定義變數 2.使用vars_files定義變數 3.使用ansible內置變數 4.使用主機清單定義變數 調用變數 5.官方推薦方式 6.命令行定義變數 ansible變數優先順序 ...


目錄

ansible變數

定義變數的方式

  • 命令行
  • playbook
  • 主機清單

如何定義變數

1.在playbook中定義變數

#方法一:
- hosts: db02
  vars:
    pkg:
      - MySQL-python
      - mariadb-server
  tasks:
    - name: 
      yum:
        name: "{{ pkg }}"
        state: present
  
#方法二:
- hosts: db01
  vars:
     web_pkg: httpd
     db_pkg:
       - unzip
       - vsftpd
     php_pkg:
       - php-fpm
       - php
       - php-mysql

2.使用vars_files定義變數

#定義階段
[root@m01 project]# vim vars_file.yml
web_pkg: httpd
db_pkg: mariadb-server
php_pkg: php

#調用階段
[root@m01 project]# vim httpd.yml 
- hosts: web_group
  vars_files: ./vars_file.yml
  tasks:
    - name: Install httpd
      yum:
        name: "{{ db_pkg }}"
        state: present

3.使用ansible內置變數

vim mkdri.yml
- hosts: web_group
  tasks:
    - name: MKDIR
      file:
        path: /backup/{{ ansible_fqdn }}_{{ ansible_default_ipv4['address'] }}_{{ ansible_date_time['date'] }}
        state: directory
        recurse: yes

4.使用主機清單定義變數

#定義階段
[webs]
zls_web01 ansible_ssh_host=172.16.1.7
zls_web02 ansible_ssh_host=172.16.1.8

[webs:vars]
web_pkg=nginx

[backup_group]
backup ansible_ssh_host=172.16.1.41

[db_group]
db01 ansible_ssh_host=172.16.1.51
db02 ansible_ssh_host=172.16.1.52

[nfs_group]
nfs ansible_ssh_host=172.16.1.31

[rsync_server:children]
web_group
backup_group

[rsync_server:vars]
web_pkg=httpd

[nfs_server:children]
web_group
nfs_group

調用變數

- hosts: zls_web01
  tasks:
    - name: Install web server
      yum:
        name: "{{ web_pkg }}"
        state: present

5.官方推薦方式

#定義階段
#創建主機組變數定義目錄
mkdir group_vars
[root@m01 ~]# vim group_vars/webs
web_pkg: httpd

#定義階段
[root@m01 ~]# cat group_vars/webs 
web_pkg: httpd
#定義階段
[root@m01 ~]# cat host_vars/zls_web01 
web_pkg: nginx

[root@m01 ~]# vim web.yml 
- hosts: webs
  tasks:
    - name: Install web server
      yum:
        name: "{{ web_pkg }}"
        state: present

6.命令行定義變數

#調用階段
[root@m01 ~]# !vim
vim web.yml 
- hosts: webs
  tasks:
  - name: Install httpd Server
    yum:
      name:
        - "{{ web_pkg }}"

  - name: Install mariadb Server
    yum:
      name:
        - "{{ db_pkg }}"


#定義階段
[root@m01 ~]# ansible-playbook web.yml -e "web_pkg=vsftpd" -e "db_pkg=unzip"

ansible變數優先順序測試

- hosts: webs
  vars:
    dir: playbook_vars
  vars_files: ./vars_file.yml
  tasks:
    - name: Create Dir
      file:
        path: /opt/{{ dir }}
        state: directory
[root@m01 ~]# vim vars_file.yml
dir: vars_file

[root@m01 ~]# vim host_vars/zls_web01
dir: host_vars

[root@m01 ~]# vim group_vars/webs
dir: group_vars

測試階段

[root@m01 ~]# ansible-playbook test.yml -e "dir=command_vars"
[root@web01 ~]# ll /opt/
total 0
drwxr-xr-x 2 root root 6 Sep 19 16:48 command_vars

#2.
[root@m01 ~]# ansible-playbook test.yml
[root@web01 ~]# ll /opt/
total 0
drwxr-xr-x 2 root root 6 Sep 19 16:48 command_vars
drwxr-xr-x 2 root root 6 Sep 19 16:50 vars_file

#3.
[root@m01 ~]# vim test.yml 
- hosts: webs
  vars:
    dir: playbook_vars
  tasks:
    - name: Create Dir
      file:
        path: /opt/{{ dir }}
        state: directory

[root@m01 ~]# ansible-playbook test.yml
[root@web01 ~]# ll /opt/
total 0
drwxr-xr-x 2 root root 6 Sep 19 16:48 command_vars
drwxr-xr-x 2 root root 6 Sep 19 16:52 playbook_vars
drwxr-xr-x 2 root root 6 Sep 19 16:50 vars_file

#4.
- hosts: webs
  tasks:
    - name: Create Dir
      file:
        path: /opt/{{ dir }}
        state: directory

[root@m01 ~]# ansible-playbook test.yml

==命令行 > vars_file > playbook vars > host_vars > group_vars==

ansible層定義變數

#編輯變數文件
[root@m01 ~]# vim vars_file.yml
lamp:
  framework:
    web_package: httpd
    db_package: mariadb-server
    php_package: php

lnmp:
  framework:
    web_package: nginx
    db_package: mysql
    php_package: php
    
#編輯playbook文件
[root@m01 ~]# vim test.yml
- hosts: web_group
  vars_files: ./vars_file.yml
  tasks:
    - name: Install LAMP httpd
      yum:
        name: "{{ lamp.framework.web_package }}"

    - name: Install LAMP mariadb-server
      yum:
        name: "{{ lamp.framework.db_package }}"

    - name: Install LAMP php
      yum:
        name: "{{ lamp.framework.php_package }}"
       
       
#官方推薦寫法
[root@m01 ~]# vim test.yml
- hosts: web_group
  vars_files: ./vars_file.yml
  tasks:
    - name: Install LAMP httpd
      yum:
        name: "{{ lamp['framework']['web_package'] }}"

    - name: Install LAMP mariadb-server
      yum:
        name: "{{ lamp['framework']['db_package'] }}"

    - name: Install LAMP php
      yum:
        name: "{{ lamp['framework']['php_package'] }}"

facts基本用法

#編輯
[root@m01 ~]# vim facts.yml
- hosts: web_group
  tasks:
    - name: Get Host Info
      debug:
        msg: >
          Hostname "{{ ansible_fqdn }}" and IP "{{ ansible_default_ipv4.address }}"

#執行
[root@m01 ~]# ansible-playbook facts.yml
[root@m01 ~]# ansible-playbook facts.yml

PLAY [web_group] *****************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************************
ok: [web02]
ok: [web01]

TASK [Get Host Info] *************************************************************************************************************************************************************************************************************************
ok: [web01] => {
    "msg": "Hostname \"web01\" and IP \"10.0.0.7\"\n"
}
ok: [web02] => {
    "msg": "Hostname \"web02\" and IP \"10.0.0.8\"\n"
}

PLAY RECAP ***********************************************************************************************************************************************************************************************************************************
web01                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
web02                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
- hosts: webs
  tasks:
    - name: mem
      file:
        path: /opt/{{ ansible_facts['fqdn'] }}
        #path: /root/{{ ansible_fqdn }}
        state: directory

關閉facts

[root@m01 ~]# vim facts.yml
- hosts: web_group
  gather_facts: no #關閉信息採集
  tasks:

facts生成zabbix配置文件

- hosts: web_group
  vars:
    - zabbix_server: 172.16.1.71
  tasks:
    - name: copy zabbix agent conf
      template:
        src: ./zabbix_agentd.conf
        dest: /tmp/zabbix_agentd.conf

facts生成mysql配置文件

- hosts: db_group
  tasks:
    - name: Install mysql server
      yum:
        name: mariadb-server
        state: present

    - name: copy mysql  conf
      template:
        src: ./my.cnf
        dest: /etc/my.cnf


[root@m01 ~]# vim /etc/my.cnf
[mysqld]
basedir=/usr
datadir=/var/lib/mysql/
socket=/var/lib/mysql/mysql.sock
log_error=/var/log/mariadb/mariadb.log
innodb_buffer_pool_size={{ ansible_memtotal_mb * 0.8 }}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SQL DROP INDEX 語句 我們可以使用 DROP INDEX 命令刪除表格中的索引。 用於 Microsoft SQLJet (以及 Microsoft Access) 的語法: 用於 MS SQL Server 的語法: 用於 IBM DB2 和 Oracle 語法: 用於 MySQL ...
  • 一 SELECT語句關鍵字的定義順序 二 SELECT語句關鍵字的執行順序 三 準備表和數據 \1. 新建一個測試資料庫TestDB; 2.創建測試表table1和table2; 3.插入測試數據; 準備工作做完以後,table1和table2看起來應該像下麵這樣 四 準備SQL邏輯查詢測試語句 + ...
  • 本文基於Flink1.9版本簡述如何連接Kafka。 流式連接器 我們知道可以自己來開發Source 和 Sink ,但是一些比較基本的 Source 和 Sink 已經內置在 Flink 里。 預定義的source支持從文件、目錄、socket,以及 collections 和 iterators ...
  • 查詢指定日期,指定顯示欄位,排序,註釋功能 規整的查詢格式 ...
  • 問題經濟學上有個“海盜分金”模型:是說5個海盜搶得100枚金幣,他們按抽簽的順序依次提方案:首先由1號提出分配方案,然後5人表決,超過半數同意方案才被通過,否則他將被扔入大海喂鯊魚,依此類推,假設海盜是足夠聰明的先利己再傷人,最後方案是怎樣的?網上百度來的的代碼with a as (select 1... ...
  • 參考官方文檔Net Services Reference的7 Oracle Net Listener Parameters (listener.ora)1 監聽概念oracle監聽,是個伺服器端進程,負責監聽客戶端發來的請求監聽器可以不必駐留在資料庫主機上,即可以把實例註冊到遠程主機上的監聽監聽是o... ...
  • 引用:https://blog.csdn.net/u012615705/article/details/78321022 文章轉自上述地址,內部有稍許改動,如有需要請查看原文。 oracle樹狀結構查詢即層次遞歸查詢,是sql語句經常用到的,在實際開發中組織結構實現及其層次化實現功能也是經常遇到的。... ...
  • 問題描述: 早上巡檢是發現一套RAC的ora.chad一個節點的狀態是offline,其他的均正常。 crsctl stat res -t ora.chad ONLINE ONLINE csdb2-bm001 STABLE OFFLINE OFFLINE csdb2-bm002 STABLE 解決: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...