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: python

  • 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放置於{}中進行標識,例如nginx

    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有諸多限制,貌似只能使用它本身的參數web

  • name: Deploy mezzanine
    hosts: web
    gather_facts: False

    vars & vars_files section not shown here

    tasks:shell

    • 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在配置文件中定義變量在配置文件中定義變量,而後在每一個主機上後邊跟上相關的值,就能夠將每一個主機的配置文件都設置爲適合本身的。
相關文章
相關標籤/搜索