1. 程式人生 > >ansible學習筆記之——知識點整理

ansible學習筆記之——知識點整理

相關命令

1.ansible-doc命令:獲取模組列表,及模組使用格式;
ansible-doc -l :獲取列表
ansible-doc -s module_name :獲取指定模組的使用資訊

2.ansible-vault
ansible-vault主要應用於配置檔案中含有敏感資訊,又不希望他能被人看到,vault可以幫你加密/解密這個配置檔案

3.ansible-galaxy
下載第三方擴充套件模組

4.ansible-pull
The ansible-pull is a small script that will checkout a repo of configuration instructions from git, and then run ansible-playbook against that content.

5.ansible-playbook
執行playbook

ansible使用

ansible 命令格式

ansible [-f forks] [-m module_name] [-a args]

<host-pattern> 指明管控主機,以模式形式表示或者直接給定 IP ,必須事先定義在檔案中; all 設定所有
[-f forks] 指明每批管控多少主機,預設為 5 個主機一批次
[-m module_name] 使用何種模組管理操作,所有的操作都需要通過模組來指定
[-a args] 指明模組專用引數; args 一般為 key=value 格式 注意:command模組(預設模組 )的引數非為kv格式,而是直接給出要執行的命令即可;

更多引數 ansible -h

一些常用模組

command模組 [執行遠端命令]
shell模組 [執行遠端主機的shell/python指令碼]
script模組 [在遠端主機執行主控端的shell/python指令碼]
raw模組 [類似於command模組、支援管道傳遞]

#user

# ansible test -m user -a ‘name=mtest state=present system=true’

#crontab

# ansible test -m cron -a ‘name=”Time” state=present minute=”*/5” job=”/usr/sbin/ntpdate time.nist.gov”’

#file

# ansible test -m file -a ‘path=/tmp/test.txt state=touch mode=600 owner=mtest’

#copy template
Tips:Template可以把變數(vars)傳過去(檔案中)

# ansible test -m copy -a ‘src=/root/1 dest=/tmp/ owner=mtest mode=755’

#yum

#service

# ansible test -m service -a ‘name=httpd state=started enabled=yes’

#script

# ansible test -m script -a ‘/root/1.sh’

#setup 收集主機的系統資訊

# ansible test -m setup –tree /tmp/facts #將所有主機的資訊輸入到/tmp/facts目錄下

playbook 使用

playbooks 是 ansible 更強大的配置管理元件,實現基於文字檔案編排執行的多個任務,且多次重複執行

(1) 核心元素
Tasks 任務、 Variables 變數、 Templates 模板、 Handlers 處理器、 Roles 角色

(2)playbooks 中 定義任務:
- name: task description 註釋 描述資訊
module_name: module_args 宣告模組:定義 ansible 模組引數

 # vim 1.yml

- hosts: test
  remote_user: root
  gather_facts: False
  tasks:
       - name: install php
         yum: name=php state=present

# vim useradd.yml

- hosts: test
  remote_user: root
  gather_facts: False
  vars:
       username: ghosts
       password: 12345
  tasks:
       - name: add user
         user: name={{username}} state=present
       - name: set password
         shell: /bin/echo {{password}} | /usr/bin/passwd --stdin {{username}}

變數的重新賦值呼叫# ansible-playbook useradd.yml –extra-vars “username=ubuntu”

條件判斷

- hosts: test
  remote_user: root
  #gather_facts: False(需要收集facts的資訊時,必須開啟)
  tasks:
       - name: install php
         yum: name=php state=present
         when: ansible_os_family == "Redhat"

迭代

- hosts: test
  remote_user: root
  gather_facts: False
  tasks:
       - name: add users
         user: name={{item}} state=present
         with_items:
                   - user1
                   - user2
- hosts: test
  remote_user: root
  gather_facts: False
  tasks:
       - name: add users
         user: name={{item.name}} state=present groups={{item.groups}}
         with_items:
                   - {name: 'user1',groups: 'root'}
                   - {name: 'user2',groups: 'ko'}

Handlers
handlers:也是task,但只有其關注的條件滿足時,才會被觸發執行
Handlers最佳的應用場景是用來重啟服務,或者觸發系統重啟操作

- hosts: test
  remote_user: root
  gather_facts: False
  tasks:
       - name: install httpd
         yum: name=httpd state=present

       - name: install config file
         copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
         notify:                  # 如果copy執行完之後檔案傳送了變化,則執行
               - restart httpd      # 呼叫handler
         tags: conf

       - name: start httpd service
         service: name=httpd state=started

  handlers:
       - name: restart httpd
         service: name=httpd state=restarted

在 notify 中定義內容一定要和tasks中定義的 - name 內容一樣,這樣才能達到觸發的效果,否則會不生效。
tags執行一部分內容 ansible-playbook -t conf web.yml

sudo
clien賦予sudo許可權

# visudo

root    ALL=(ALL)       ALL
tyt     ALL=(ALL)       ALL

server

# vim /etc/ansible/hosts

[test]
192.168.182.130 ansible_sudo_pass=***

# vim msu.yml

- hosts: test
  remote_user: tyt
  gather_facts: False
  tasks:
       - name: httpd start
         service: name=httpd state=started
         sudo: yes

獲取執行命令的輸出結果(用於判斷) –Register

- hosts: test
  remote_user: root
  gather_facts: False
  tasks:
       - name: echo date
         command: date
         register: date_output
       - name: echo date_output
         command: echo "14"
         when: date_output.stdout.split(' ')[2] == '14'                                                          

使用delegate_to關鍵字便可以配置任務在其他機器上執行.其他模組還是在所有配置的管理機器上執行的,當到了這個關鍵字的任務就是使用委託的機器上執行.而facts還是適用於當前的host

  - name: Fetch configuration from all webservers
    hosts: webservers
    tasks:
      - name: Get config
        get_url: dest=configs/{{ ansible_hostname }} force=yes url=http://{{ ansible_hostname }}/diagnostic/config
        delegate_to: test

本地操作功能 –local_action ,轉給本地

- hosts: test
  remote_user: root
  gather_facts: False
  tasks:
       - name: add host
         local_action: shell echo "192.168.182.130 www.nginx4.com" >> /etc/hosts

# vim /etc/ansible/hosts

[test]
192.168.182.130

ansilbe自1.2版本引入的新特性,用於層次性、結構化地組織playbook。roles能夠根據層次型結構自動裝載變數檔案、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡單來講,roles就是通過分別將變數、檔案、任務、模組及處理器放置於單獨的目錄中,並可以便捷地include它們的一種機制。角色一般用於基於主機構建服務的場景中,但也可以是用於構建守護程序等場景中。
1、建立role的步驟
①建立以roles命名的目錄;
②在roles目錄中分別建立以各角色名稱命名的目錄,如webservers、dbservers等;
③在每個角色命名的目錄中分別建立files、handlers、meta、tasks、templates和vars目錄;用不到的目錄可以建立為空目錄,也可以不建立;
④在playbook檔案中,呼叫各角色;
2、role內各目錄中可用的檔案
tasks目錄:至少應該包含一個名為main.yml的檔案,其定義了此角色的任務列表;此檔案可以使用include包含其它的位於此目錄中的task檔案;
files目錄:存放由copy或script等模組呼叫的靜態檔案;
templates目錄:template模組會自動在此目錄中尋找Jinja2模板檔案;
handlers目錄:此目錄中應當包含一個main.yml檔案,用於定義此角色用到的各handler;此檔案可以使用include包含其它的位於此目錄中的handler檔案;
vars目錄:至少有一個main.yml檔案,用於定義此角色用到的變數;
meta目錄:至少有一個main.yml檔案,用於定義此角色的特殊設定及其依賴關係;ansible 1.3及其以後的版本才支援;
default目錄:為當前角色設定預設變數時使用此目錄;應當包含一個main.yml檔案;

ansible-playbook引數:
–check模式,僅檢測,但不實行
–diff 內容變更對比
–synctax-check 檢測一下語法是否有問題
become 的使用,當需要執行某些特殊操作需要專門許可權時,可以用become_user那強調切換

host inventory

ansible基於ssh連線inventory中指定的遠端主機時還可以通過引數指定其互動方式常用的引數如下所示
ansible_ssh_host # 要連線的主機名
ansible_ssh_port # 埠號預設是22
ansible_ssh_user # ssh連線時預設使用的使用者名稱
ansible_ssh_pass # ssh連線時的密碼
ansible_sudo_pass # 使用sudo連線使用者是的密碼
ansible_ssh_private_key_file # 祕鑰檔案如果不想使用ssh-agent管理時可以使用此選項
ansible_shell_type # shell的型別預設sh

Dynamic Inventory指通過外部指令碼獲取主機列表,並按照ansible 所要求的格式返回給ansilbe命令的。這部分一般會結合CMDB資管系統、zabbix 監控系統、crobble安裝系統、雲端計算平臺等獲取主機資訊。(Ansible在接受指令碼動態獲取主機資訊時支援的是json格式)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
hostlip = ['192.168.182.130','192.168.182.129']
group = 'mserver'
hostdata = {group:{"hosts":hostlip}}
#hostdata = {group:host1ip}
print json.dumps(hostdata,indent=4)

Ansible呼叫

# ansible -i muser.py mserver -m command -a ‘uptime’

api

Ansible-api

#!/usr/bin/env python
# -*- coding=utf-8 -*-

import ansible.runner
import json

runner = ansible.runner.Runner(
    module_name='ping',
    module_args='',
    pattern='test',
    forks=5
)

datastructure = runner.run()
data = json.dumps(datastructure,indent=4)
print data

相關推薦

ansible學習筆記——知識點整理

相關命令 1.ansible-doc命令:獲取模組列表,及模組使用格式; ansible-doc -l :獲取列表 ansible-doc -s module_name :獲取指定模組的使用資訊 2.ansible-vault ansible-vau

kafka學習筆記知識點整理

一個 eight true med 分組 pos 間接 fig ges 一、為什麽需要消息系統 1.解耦:  允許你獨立的擴展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。 2.冗余:   消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據

網絡學習筆記零碎知識點

之間 是否 off down spf 生成樹 開啟 ast virtual 1.直連路由並不是一定能通信,要求是在同一網段. 2.掩碼長度不一樣不一定不再同一網段,而要實際計算,比如192.168.1.1/24和192.168.1.1/25,依然算是在同一網段.

學習筆記執行緒、Thread類和執行緒終止相關整理(下)——執行緒異常&JVM停止

提到執行緒的中斷在某些情況下會丟擲InterruptedException異常,最終導致執行緒的終止。其實,執行緒也有可能由於其他異常原因造成終止,在某些情況下為了做一些妥善的處理,我們需要捕獲這些異常情況。看下面程式碼,覺得會怎樣? 1 2 3 4 5

SAS學習筆記函數應用

不能 oracle 理解 資料 oracl 函數應用 特殊 put acl 今天在做數據需求的時候遇到一些問題,因為不能夠在數據庫裏面做,僅僅好在SAS裏面實現。這就遇到了一些麻煩,須要使用一些函數實現部分功能,如查找字段中某個特殊字符出現的次數,查找某個字符的位置等,

c#學習筆記Application.DoEvents應用

box nbsp net replace 運算 技術 oop blank 假死 Visual Studio裏的摘要:處理當前在消息隊列中的所有 Windows 消息。 交出CPU控制權,讓系統可以處理隊列中的所有Windows消息 比如在大運算量循環內,加Applicati

[C#學習筆記異步編程模式2]BeginInvoke和EndInvoke方法 (轉載)

cti otf 函數返回 編程模式 catch 數值 gin 單線程 blog 為什麽要進行異步回調?眾所周知,普通方法運行,是單線程的,如果中途有大型操作(如:讀取大文件,大批量操作數據庫,網絡傳輸等),都會導致方法阻塞,表現在界面上就是,程序卡或者死掉,界面元素不動了,

.NET學習筆記ADO.NET

技術分享 reader sql語句 bsp 技術 area ada 執行sql 學習 據提供程序: Connection,用來連接數據庫 Command,用來執行SQL語句 DataReader只讀,只進的結果集,一條一條讀取數據 DataAdapter,一個封裝了上面3個

,NET學習筆記ADO.NET

nbsp png alt 學習 log logs ima http blog ,NET學習筆記之ADO.NET

Metasploit學習筆記——情報搜集

user 技術 得到 版本號 域名 listing 避免 ger max 1.情報搜集 1.1外圍信息搜索 1.1.1通過DNS和IP地址挖掘目標網絡信息 (1)whois域名註冊信息查詢(BT5、kali專有):[email protected]

鋒利的JQuery學習筆記JQuery

function 效率 back 一點 ie6 容易 服務器端 pre loading   今天終於看到了最令我興奮的一章:JQuery與Ajax的應用。AJAX即“Asynchronous JavaScript and XML”(異步JavaScript和XML),

java入門學習筆記1(類的定義,代碼的編譯執行)

spa hex nts 自動調用 [] alt vim 進制 技術 這篇文章講解Java代碼的基本執行過程 我們先拋開各種JAVA IDE,開發工具,只使用文本編輯器,以突出最本質的東西。 在Linux環境下,我們編輯一個文件: vim HelloWorld.java

python學習筆記列表與元組

長度 bsp 最大 一般來說 設置 概述 檢查 常用 而且 一、概述 python包含6種內建的序列,其中列表和元組是最常用的兩種類型。列表和元組的主要區別在於,列表可以修改,元組則不能修改 使用上,如果要根據要求來添加元素,應當使用列表;而由於要求序列不可修改時,此時

Scala 學習筆記函數(1)

操作 函數賦值 array 筆記 val 類型 code function cnblogs 1 class Student { 2 3 val mySayHello1: String => Unit = sayHello 4 val mySayHe

Scala 學習筆記集合(2)

元素 student cnblogs cti 使用 shanghai 列表 學習筆記 brush class StudentTT extends StudentT{ def sayBye(name: String, age: Int)(address: String)

MySQ學習筆記十 NULL值處理

con pop -a 能夠 第一個 ips ng- 索引 one 這是MySQL一大特殊之處。 概念上。NULL意味著“沒有值”或“未知值”,且它被看作有點與眾不同的值。為了測試NULL。你不能使用算術比較

Scala 學習筆記集合(7) Option

bject fin pre object c cti abc collect 結果 == object CollectionDemo8 { def main(args: Array[String]): Unit = { //Option集合的使用,可以用來安全

C++學習筆記泛型算法

vector ace sort clu 算法 clas uniq bits 有時 先貼個代碼 有時間的再補筆記 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 //模板類在接收

Scala 學習筆記集合(9) 集合常用操作匯總

lis cti ring 結果 ray 常用操作 light logs bject object CollectionDemo10 { def main(args: Array[String]): Unit = { var ls = List[Int](1,

vue2.0學習筆記webpack-simple模板中的路由簡單配置案例

nbsp 主頁 default code vue 兩個文件 new ebp 命名 以下是完成後的目錄結構 案例基礎是已經用 webpack+vue-cli 創建了一個名為 vue_router的工程 , 並安裝了vue-rout