1. 程式人生 > >Ansible自動化運維之YAML、基礎元素

Ansible自動化運維之YAML、基礎元素

定義 bin file block 用戶 規則 ssh eve hash

  • YAML介紹
  • YAML是一個可讀性高的用來表達資料序列的格式。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl等。
    YAML不是XML,不過,在開發的這種語言時,YAML的意思其實是:“Yet Another Makup Language”(仍是一種標記語言)

    • 特點:

    1:具有很好的可讀性,易於實現。
    2:表達能力強,擴展性好。
    3:和腳本語言的交互性好。
    4:有一個一致的信息模型。
    5:可以基於流來處理

    • YAML語法:
    • YAML的語法和其他高階語言類似,並且可以簡單表達清單、散列表、標量等數據結構。其結構(structure)通過空格來展示。
    • 序列(sequence):裏的項用 “-” 來代表,來代表不同元素。
    • MAP裏的鍵值對,用 ":" 分隔

    基本語法規則:
    1.大小寫敏感
    2.使用縮進表示層級關系
    3.縮進時不允許使用Tab鍵,只允許使用空格。
    4.縮進的空格數目不重要,只要相同層級的元素左側對齊即可

    • yaml示例:

      vim test.yaml
      ---
      name:zhangsan
      age:20
      name:lisi
      age:22
      people:
      - name:zhangsan
                  age:20
                  - name:lisi
                  age:22
    • 常用的數據類型
    • YAML支持的數據結構:
    • 1.對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    • 例如:name:Example Developer ( 鍵 : 值)

    .

    • 2.數組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
    • 例如:
      -Apple
      -Orange

    .

    • 3.純量:單個的、不可再分的值
    • 例如:
      number:10.10
      sure:true
    • Ansible基礎元素介紹
    • Inventory
    • Ansible為了更加便捷的管理主機,在主機清單中將被管理主機進行分組命名,默認的Inventory文件是:/etc/ansible/hosts ,主機清單可以設置對個可以通過Dynameic Inventory 動態生成
    • Inventory文件以括號中的字符標識為組名,將主機分組管理,可以將同一主機同時劃分到多個不同的組中。如果被管理的主機使用非默認的SSH端口,還可以在主機名後面用冒號加端口號的方式來標明:

      # vi /etc/ansible/hosts
      [webserver]      #方括號設置組名
      www1.example.org    #定義被監控主機,這邊可以是主機名也可以是IP地址,主機名需要修改/etc/hosts文件
      www2.example.org:2222     #冒號後定義遠程連接端口,默認是ssh的2222端口
    • 如果被管理的主機名遵循類似的命名規則,可以使用列表的方式來標識

      [webserver]
      www[01:50].example.org ansible_ssh_user=root ansible_ssh_pass=123456
      [dbbservers]
      db-[a:f].example.org //支持匹配a b c ... f
    • 在Inventory中有幾個重要的概念

    • (1)主機變量

      [webserver]
      www1.magedu.com http_port=80 maxRequestsChild=808
      www2.magedu.com http_port=8080 maxRequestsChild=909
    • (2)組變量

      [servers:vars]
      ntp_server=ntp.example.org
      nfs_server=nfs.example.org
    • (3)組嵌套

      [apache]
      http1.example.org
      http2.example.org
      
      [nginx]
      ngx1.example.org
      ngx2.example.org
      
      [webservers:children]
      apache
      nginx
    • (4)Inventory參數
    參數 含義
    ansible_ssh_host 將要連接的遠程主機名.與你想要設定的主機的別名不同的話,可通過此變量設置.
    ansible_ssh_port ssh 端口號.如果不是默認的端口號,通過此變量設置.
    ansible_ssh_user 默認的 ssh 用戶名
    ansible_ssh_pass ssh 密碼(這種方式並不安全,我們強烈建議使用 --ask-pass 或 SSH 密鑰)
    ansible_ssh_private_key_file ssh 使用的私鑰文件.適用於有多個密鑰,而你不想使用 SSH 代理的情況.
    ansible_ssh_common_args 此設置附加到sftp,scp和ssh的缺省命令行
    ansible_sftp_extra_args 此設置附加到默認sftp命令行。
    ansible_scp_extra_args 此設置附加到默認scp命令行。
    ansible_ssh_extra_args 此設置附加到默認ssh命令行。
    ansible_ssh_pipelining 確定是否使用SSH管道。 這可以覆蓋ansible.cfg中得設置。
    ansible_shell_type 目標系統的shell類型.默認情況下,命令的執行使用 ‘sh‘ 語法,可設置為 ‘csh‘ 或 ‘fish‘.
    ansible_python_interpreter 目標主機的 python 路徑.適用於的情況: 系統中有多個 Python, 或者命令路徑不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python
    ansible_*_interpreter 這裏的"*"可以是ruby 或perl 或其他語言的解釋器,作用和 ansible_python_interpreter 類似
    ansible_shell_executable 這將設置ansible控制器將在目標機器上使用的shell,覆蓋ansible.cfg中的配置,默認為/bin/sh。

    Ansible自動化運維之YAML、基礎元素