52筆記---變量

1.什么是變量?
 以一個固定的字符串,表示一個不固定的值 

2.定義變量
  vars 關鍵字
  vars_file 

3.在Inventory主機清單中定義變量
  1)清單文件中直接定義
  2)準備hosts_vars group_vars目錄

4.通過外置參數傳遞(傳遞)-e
5.變量沖突砰奕,優(yōu)先級
6.變量注冊

定義變量

1.(關鍵字)配置文件內定義變量吮螺,但只能是該變量所在的hosts內能調用使用
[root@manager project1]# cat f2.yml 
- hosts: webservers
  vars:
  - file_name: playbook_vars

  tasks:
    - name: Create New File
      file:
        path: /tmp/{{ file_name }}
        state: touch

2.(vars_file)共享,任何 *.yml文件都可以使用
1570755668515.png
[root@manager project1]# cat vars_file.yml 
web_packages: httpd
ftp_packages: vsftpd

  [root@manager project1]# cat f2.yml 
  - hosts: webservers
    vars:
      - file_name: playbook_vars

#調用共享vars_file文件,只不過剛好文件名叫vars_file
vars_files: ./vars_file.yml

tasks:
  - name: Create New File
    file:
      path: /tmp/{{ file_name }}
      state: touch

  - name: Installed Packages {{ web_packages }}
    yum:
      name: "{{ web_packages }}"
      state: present

在主機清單中定義變量(hosts)

1.清單文件中直接定義  hosts文件定義
[webservers]
172.16.1.7
172.16.1.8 
[webservers:vars]
file_name=hostsfile_group_vars

2.創(chuàng)建hosts_vars  group_vars 目錄
[root@manager project1]# mkdir hosts_vars   #單個主機
[root@manager project1]# mkdir group_vars   #主機組

 1)單個主機定義和使用方式 (host_vars能分別對不同的主機定義變量)
    [root@manager project1]# cat host_vars/172.16.1.7 
    host_vars_name: 172.16.1.7

    [root@manager project1]# cat host_vars/172.16.1.8 
    host_vars_name: 172.16.1.8

    [root@manager project1]# cat f4.yml 
    - hosts: webservers

    tasks:
      - name: Create New File
        file:
          path: /opt/{{ host_vars_name }}
          state: touch

 2)針對主機組定義的方式 
    #給指定的webserver組設定變量.其他組主機無法使用該變量
   [root@manager project1]# cat group_vars/webservers 
   group_host_vars: webservers

  [root@manager project1]# cat f5.yml 
  - hosts: webservers
    tasks:
      - name: Create New File {{ group_host_vars }}
        file:
          path:  /opt/{{ group_host_vars }}
          state: touch

  3)針對主機組定義的方式  (給所有的主機和主機組設定變量)
    [root@manager project1]# cat group_vars/all 
    group_host_vars: all

      [root@manager project1]# cat f5.yml 
      - hosts: webservers
    tasks:
     - name: Create New File {{ group_host_vars }}
        file:
          path:  /opt/{{ group_host_vars }}
          state: touch

3)通過外置傳參定義變量? -e
[root@manager project1]# ansible-playbook -i hosts f6.yml  -e "web_vars=123"

變量沖突伏伐,測試優(yōu)先級

1)在plabook中定義vars變量
2)在playbook中定義vars_files變量
3)在inventory主機定義變量
4)在inventory主機組定義變量
5)在host_vars中定義變量
6)在group_vars中定義變量   單個組  all組
7)通過執(zhí)行命令傳遞變量


--->
優(yōu)先級等級(由高到低):
外置傳入參數-->playbook(vars_files(共享)--->Vars(私有))--->host_Vars -->group_vars/group_name-->group_vars/all

變量注冊

register關鍵字宠进,可以將某個task任務結果存儲到變量中,最后使用debug輸出變量內容藐翎,可用于后續(xù)排障
[root@manager project1]# cat f8.yml 
- hosts: webservers
  tasks:
    # System_Status=$(netstat -lntp)
- name: Get Network Status
    shell: netstat -lntp | grep "nginx"
    register: System_Status      #shell執(zhí)行的命令賦值于此 

    # echo "$System_Status"
- name: Debug output Variables
    debug:
      msg: "{{ System_Status.stdout_lines }}"  #將賦值的結果輸出出來

facts變量

image.png
Ansible facts是在被管理主機上通過ansible自動采集發(fā)現的變量材蹬,facts包含每臺特定的主機信息,比如:主機名 IP地址 系統(tǒng)版本 CPU數量 內存狀態(tài)等等
使用場景
  1)檢查cpu信息吝镣,生成不同的nginx配置文件
        A: 1核心    work_process 1;
        B: 2核心    work_process 2;
  2)檢查名稱信息堤器,生成不同的zabbix配置文件
            zabbix_agent
    Server:   ===> 指向172.16.1.61
    Hostname:      web01   web02

[root@manager project1]# cat ./file/zabbix_agent.conf.j2 
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_hostname }}

[root@manager project1]# cat f11.yml 
- hosts: webservers
  vars:
  - zabbix_server_ip: 172.16.1.61
  tasks:
- name: Configure zabbix-agent.conf
  template:
    src: ./file/zabbix_agent.conf.j2
    dest: /tmp/zabbix-agent.conf
    
3)檢查內存狀態(tài),生成不同的memcached的配置文件
  [root@manager project1]# cat f12.yml 
  - hosts: webservers
  tasks:
    - name: Installed Memcached Server
      yum:
        name: memcached
        state: present

    - name: Configure Memcached Server
      template:
        src: ./file/memcached.j2
        dest: /etc/sysconfig/memcached
      notify: Restart Memcached Server

    - name: System Memcached Server
      systemd:
        name: memcached
        state: started
        enabled: yes

  handlers:
    - name: Restart Memcached Server
      systemd:
        name: memcached
        state: restarted
 
[root@manager project1]# cat file/memcached.j2 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb //2 }}"
OPTIONS=""

判斷語句

* 1.centos和ubuntu系統(tǒng)都需要安裝httpd,  判斷系統(tǒng).
* 2.安裝軟件倉庫,只有web組的安裝webtatic其他的主機全部跳過.
* 3.TASK任務, TASK1任務執(zhí)行成功,才會執(zhí)行TASK2  

#根據不同的系統(tǒng),安裝不同的服務
  - hosts: webservers
  tasks:
- name: CentOS Installed Httpd Server
  yum:
    name: httpd
    state: present
  when: ( ansible_distribution == "CentOS" )

- name: Ubuntu Installed Httpd Server
  yum:
    name: httpd2
    state: present
  when: ( ansible_distribution == "Ubuntu" )

#安裝軟件倉庫,只有web組的安裝webtatic其他的主機全部跳過.
[root@manager project1]# cat f16.yml 
- hosts: all
  tasks:
  - name: Add Nginx Yum Repository
    yum_repository:
      name: nginx
      description: Nginx Repository
      baseurl: http://nginx.org/packages/centos/7/$basearch/
    when: ( ansible_hostname is match ("web*"))

#TASK任務, TASK1任務執(zhí)行成功,才會執(zhí)行TASK2  
[root@manager project1]# cat f17.yml 
- hosts: webservers
  tasks:

    - name: Check Httpd Server
      command: systemctl is-active httpd
      register: Check_Httpd
      ignore_errors: yes

#判斷Check_Httpd.rc是否等于0,如果為0則執(zhí)行任務,否則不執(zhí)行
    - name: Restart Httpd Server
      systemd:
        name: httpd
        state: restarted
      when: ( Check_Httpd.rc == 0 )

循環(huán)語句

#一次啟動多個服務
[root@manager project1]# cat f18.yml 
- hosts: webservers
  tasks:
    - name: Systemd Nginx Status
      systemd:
        name: "{{ item }}"    #調用的變量也不變,也是固定
        state: started

#固定的語法格式
      with_items:
        - nginx
        - php-fpm


#一次拷貝多個文件
[root@manager project1]# cat f19.yml
- hosts: webservers
  tasks:
    - name: Configure nginx.conf
      copy:
        src: '{{ item.src }}'
        dest: '{{ item.dest }}'
        mode: '{{ item.mode }}'
      with_items:
      - { src: ./file/nginx.conf.j2, dest: /etc/nginx/nginx.conf, mode: '0644' }
        - { src: ./file/kold.oldxu.com.conf.j2, dest: /etc/nginx/conf.d/kold.oldxu.com.conf, mode: '0600' }

#創(chuàng)建多個用戶(標準型)
[root@manager project1]# cat f20.yml 
- hosts: webservers
  tasks:
    - name: Create User
      user:
        name: "{{ item }}"

      with_items:
        - test1
        - test2
        - test3
        - test4
 
#創(chuàng)建tt1 --> bin  tt2 -->root tt3 --->adm   附加組
[root@manager project1]# cat  f20.yml 
- hosts: webservers
  tasks:
    - name: Create User
      user:
        name: "{{ item.name }}"
        groups: "{{ item.groups }}"

      with_items:
        - { name: tt1, groups: bin }
        - { name: tt2, groups: root }
        - { name: tt3, groups: adm }

1.標準循環(huán)                   --->居多
item
with_items:
   - test
2.字典循環(huán):                   --->居多
itme.name
with_items:
    - { name: test }


3.變量循環(huán)
- hosts: webservers
  tasks:
    - name: ensure a list of packages installed
      yum: name={{ packages }} state=present
      vars:
        packages:
          - httpd
          - httpd-tools

handlers

[root@manager project1]# cat f22.yml 
- hosts: webservers
  tasks:

- name: Installed Nginx and PHP Packages
  yum:
    name: nginx
    state: present

- name: Configure nginx.conf 
  template:
    src: ./file/nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  #監(jiān)控-->changed狀態(tài)-->通知-->handlers--->name-->Restart Nginx Server
  notify: Restart Nginx Server
  #notify:
  #  - Restart Nginx Server
  #  - Restart php Server

- name: Systemd Nginx Server
  systemd:
    name: nginx
    state: started
    enabled: yes
#當nginx或php配置文件發(fā)生變更才會觸發(fā)此操作
  handlers:
- name: Restart Nginx Server
  systemd:
    name: nginx
    state: restarted

#3.handlers注意事項
1)無論多少個task通知了相同的handlers末贾,handlers僅會在所有tasks結束后運行一次闸溃。
2)只有task發(fā)生改變了才會通知handlers,沒有改變則不會觸發(fā)handlers.
3)不能使用handlers替代tasks拱撵、因為handlers是一個特殊的tasks辉川。


變量->facts-->判斷-->循環(huán)

* 1.安裝Rsyncd服務  (循環(huán))
* 2.安裝Redis   (bind  本地IP地址)    facts 
* 3.安裝NFS      (配置文件,創(chuàng)建目錄,客戶端掛載)    變量

(reverse-i-search)`setup': ansible localhost -m setup -i hosts |less

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拴测,隨后出現的幾起案子乓旗,更是在濱河造成了極大的恐慌,老刑警劉巖集索,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屿愚,死亡現場離奇詭異,居然都是意外死亡务荆,警方通過查閱死者的電腦和手機妆距,發(fā)現死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來函匕,“玉大人毅厚,你說我怎么就攤上這事∑窒洌” “怎么了吸耿?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵祠锣,是天一觀的道長。 經常有香客問我咽安,道長伴网,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任妆棒,我火速辦了婚禮澡腾,結果婚禮上,老公的妹妹穿的比我還像新娘糕珊。我一直安慰自己动分,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布红选。 她就那樣靜靜地躺著澜公,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喇肋。 梳的紋絲不亂的頭發(fā)上坟乾,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音蝶防,去河邊找鬼甚侣。 笑死,一個胖子當著我的面吹牛间学,可吹牛的內容都是我干的殷费。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼低葫,長吁一口氣:“原來是場噩夢啊……” “哼详羡!你這毒婦竟也來了?” 一聲冷哼從身側響起氮采,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤殷绍,失蹤者是張志新(化名)和其女友劉穎染苛,沒想到半個月后鹊漠,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡茶行,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年躯概,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畔师。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡娶靡,死狀恐怖,靈堂內的尸體忽然破棺而出看锉,到底是詐尸還是另有隱情姿锭,我是刑警寧澤塔鳍,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站呻此,受9級特大地震影響轮纫,放射性物質發(fā)生泄漏。R本人自食惡果不足惜焚鲜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一掌唾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忿磅,春花似錦糯彬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至览效,卻和暖如春却舀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锤灿。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工挽拔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人但校。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓螃诅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親状囱。 傳聞我的和親對象是個殘疾皇子术裸,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容