ansible YAML

9.YAML
9.1簡介
(1)YAML是一個可讀性高的用來表達資料序列的格式。
(2)YAML參考了其它多種語言。包括:XML、C語言、python、perl以及電子郵件格式的RFC2822等。Clark Evans在2001年首次發表了這種語言。
(3)YAML不是XML,在開發這種語言時,YAML的意思其實是:yet another markup language,
9.2特性
(1)YAML的可讀性好
(2)和腳本語言的交互性好
(3)使用語言的數據類型
(4)一致的信息模型
(5)易於實現
(6)基於流來處理
(7)表達能力強,擴展性好
9.3語法
(1)YAML的語法和其它高級語言類似,並且可以簡單表達清單、散列表、標量等數據結構。(2)其結構通過空格來展示,序列裏的項用“-”來代表。Map裏的鍵值對用“:”分割
同一個數據有多個時叫做序列
9.4數據類型
9.4.1鍵值對
(1)一個鍵對應一個值
Name:zhang //鍵值對
Age:24
Gender:male
(2)一個鍵對應多個值
Spouse: //也是鍵值對,採用縮進的方式,表示值是下邊的三項,
Name:wang
Age:24
Gender:female
(3)一個鍵對應兩個列表,一個列表裏有多個值
Children:

  • Name:kebi
    Age:7
    Gender:male
  • Name:james
    Age:8
    Gender:female
    //也是鍵值對,同一類數據有多個值時,叫做序列,每一個數據項使用一個橫線“-”來引導,值是另外一組鍵值對
    ansible YAML
    9.4.2列表
    列表的所有元素均使用“-”打頭,例如:

    A list of tasty fruits

  • apple
  • orange
  • strawberry
  • mango
    9.4.3字典
    字典通過key 與 value進行標識

    Aemployee record

    Name: zhang
    Job:engineer
    Skill:pragram
    也可以將key:value放置於{}中進行標識,例如

    an example record

    {name:zhang,job:engineer,skill:pragram}
    9.5基礎元素
    9.5.1 facts
    (1)facts是由正在通信的遠程目標主機發回的信息,這些信息被保存在ansible變量中
    (2)要獲取指定的遠程主機所支持的所有facts,可使用如下命令
    ansible hostname –m setup
    9.5.2 register
    (1)把任務的輸出定義爲變量,然後用於其他任務
    (2)實例如下
    Tasks:
    shell:/usr/bin/foo
    register:foo_result
    ignore_errors:true
    9.5.3 max_fail_percentage
    設置最大失敗的比率,比如設置25%,則如果有4臺機器,有2臺執行任務失敗則會終止整個play,其它任務不再執行
    max_fail_percentage:25
    9.5.4 set_fact
    可以把比如register註冊的變量,裏邊可能是一個json,然後取值之後使用set_fact
    9.5.5 serial
    指定每次在幾個hosts中執行
    9.5.6 local_action&delegate_to: localhost
    如果只想在控制機器執行,而不是遠程機器執行,用這個,但是local_action有諸多限制,貌似只能使用它自己的參數

  • name: Deploy mezzanine
    hosts: web
    gather_facts: False

    vars & vars_files section not shown here

    tasks:

    • name: wait for ssh server to be running
      local_action: wait_for port=22 host="{{ inventory_hostname }}" search_regex=OpenSSH
      9.6變量
      9.6.1變量組成
      變量只能由字母數字下劃線組成,且只能以字母開頭
      9.6.2通過命令行傳遞變量
      (1)在運行playbook的時候也可以傳遞一些變量供playbook使用
      (2)示例如下:
      ansible-playbook test.yml –extra-vars “host=www user=zhang”
      9.6.3通過roles來傳遞變量
      (1)當給一個應用主機角色的時候可以傳遞變量,然後在角色內使用這些變量
      (2)實例如下:
  • hosts:webservers
    roles:
    • common
    • { role:foo_app_instance,dir:‘/web/htdocs/a.com’,port:8080}
      Inventory
      9.6.4定義主機時添加變量
      (1)在inventory中定義主機時爲其添加主機變量以便在playbook中使用
      (2)例如:
      [webservers]
      www.1.mage.com http_port=80 maxRequestsPerChild=80 定義主機時,有自己專用的變量,每個子進程能夠接受的最大訪問量
      1.ansible_ssh_host # 要連接的主機名
      2.ansible_ssh_port # 端口號默認是22
      3.ansible_ssh_user # ssh連接時默認使用的用戶名
      4.ansible_ssh_pass # ssh連接時的密碼
      5.ansible_sudo_pass # 使用sudo連接用戶是的密碼
      6.ansible_ssh_private_key_file # 祕鑰文件如果不想使用ssh-agent管理時可以使用此選項
      7.ansible_shell_type # shell的類型默認sh
      8.ansible_connection # SSH 連接的類型: local , ssh , paramiko在 ansible 1.2 之前默認是 paramiko
      9後來智能選擇,優先使用基於 ControlPersist 的 ssh (支持的前提)
      ansiblepython interpreter #用來指定 python 解釋器的路徑,同樣可以指定ruby 、perl 的路徑
      9.6.5組變量
      (1)組變量是指賦予給指定組內所有主機上的在playbook中可用的變量
      (2)例如:
      [webservers]
      www1.mage.com
      www2.mage.com
      [webservers:vars]
      ntp_server=ntp.magedu.com
      nfs_server=nfs.magedu.com
      9.6.6組嵌套
      (1)Inventory中,組還可以包含其它的組,並且也可以向組中的主機指定變量。不過,這些變量只能在ansible-playbook中使用,而ansible不支持
      (2)例如:
      nginx和apache是webserver的子組
      ansible YAML
      9.6.7在配置文件中定義變量
      在配置文件中定義變量,然後在每個主機上後邊跟上相關的值,就可以將每個主機的配置文件都設置爲適合自己的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章