ansile

ansible

ansible 是一個自動化運維工具,他是基于python語言實現,基于openssh安全的工具

特性:

1)冪等性:一個任務執行1遍和執行n遍效果一樣 ,不因重復執行帶來意外情況
2)無需代理不依賴PKI(無需ssl)
3)可使用任何編程語言寫模塊
4)YAML格式,編排任務,支持豐富的數據結構
5)較強大的多層解決方案

ansible可以直接由一臺服務器連接到其他服務器,由于連接服務器時一般需要輸入密碼,這比較繁瑣,然而ansible是基于ssh的,所以我們通常都會用秘鑰的方式來連接ansible主機與其他主機

如果我們首次鏈接,為了避免挨個先鏈接所以可以把

/etc/ansible/ansible.cfg
文件中
# uncomment this to disable SSH key host checking
#host_key_checking = False

host那行取消掉注釋

常用ansible時,建議吧日志那行啟用起來

ansible可以編譯安裝或者直接yum在epel源中安裝

ansible 的配置文件

1) /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
2) /etc/ansible/hosts 主機清單
3) /etc/ansible/roles/ 存放角色的目錄

配置文件詳解

Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默認)
[defaults]
#inventory = /etc/ansible/hosts # 主機列表配置文件
#library = /usr/share/my_modules/ # 庫文件存放目錄
#remote_tmp = $HOME/.ansible/tmp #臨時py命令文件存放在遠程主機目錄
#local_tmp = $HOME/.ansible/tmp # 本機的臨時命令執行目錄
#forks = 5 # 默認并發數
#sudo_user = root # 默認sudo 用戶
#ask_sudo_pass = True #每次執行ansible命令是否詢問ssh密碼
#ask_pass = True
#remote_port = 22
#host_key_checking = False # 檢查對應服務器的host_key,建議取消注釋
#log_path=/var/log/ansible.log #日志文件

host:主機清單

可以使用
1)主機名
2)主機IP
3)用[]中括號括起來,中括號內放一個名字,這個名字是組的定義,下方寫主機的名字或者IP
4)中括號中支持展開[01:06]代表01到06

程序

1) /usr/bin/ansible 主程序,臨時命令執行工具
2)/usr/bin/ansible-doc 查看配置文檔,模塊功能查看工具
3)/usr/bin/ansible-galaxy 下載/上傳優秀代碼或Roles模塊的官網平臺
3)/usr/bin/ansible-playbook 定制自動化任務,編排劇本工具/usr/bin/ansib le-pull 遠程執行命令的工具
4)/usr/bin/ansible-vault 文件加密工具
5)/usr/bin/ansible-console 基于Console界面與用戶交互的執行工具

使用方法

ansible-doc -s moudle(模塊名):查看模塊man文檔

ansible-doc moudle 詳細模式查看模塊用法

-v -vv -vvvv :顯示過程
(v越多越詳細)

-C :測試ansible執行情況(不執行只測試執行結果)

命令

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

-f forks :啟動的并發線程數
-m moudle_name :要使用的模塊
-a args:模塊的參數(-a 參數需要加引號,最好是單引號)

–version 顯示版本
-m module 指定模塊,默認為command
-v 詳細過程 –vv -vvv更詳細
–list-hosts 顯示主機列表,可簡寫—list
-k, –ask-pass 提示連接密碼,默認Key驗證
-K, –ask-become-pass 提示輸入sudo
-T, –timeout=TIMEOUT 執行命令的超時時間,默認10s
-u, –user=REMOTE_USER 執行遠程執行的用戶
-b, –become 代替舊版的sudo 切換

host_pattern:

可以跟 1)單個IP
2)多個ip(中間用逗號隔開)
3)主機名
4)組名(定義在/etc/ansible/hosts文件中)
5)all 所有主機

6)a:b :指的是a組或b組中的用戶(a:b要用單引號引起來)
7)a:!b
:指的是在a中但是不能再b中(同樣引號引起來)

顏色定義

返回值為

綠色:表示執行成功,但對目標主機沒有做出任何修改
黃色:表示執行成功,對目標主機做出了修改
藍色:顯示詳細過程
紅色:表示執行失敗

常見的模塊:

1)command:給明shell中的命令(此項是默認選項可以省略)

示例:ansible all -a ‘ls’
172.20.113.9 | SUCCESS | rc=0 >>
anaconda-ks.cfg
~None
original-ks.cfg

172.20.113.8 | SUCCESS | rc=0 >>
anaconda-ks.cfg
~None
original-ks.cfg

2)shell 類似于command 但是他可以用管道、變量等

3)cron: 給明生成一個定時任務(在crontab中生成任務 格式與定時任務的格式相同)

示例:
ansible all -m cron -a ‘minute=”*/5″ job=”/bin/echo hello” name=”test corn”‘
其中單引號中整個都是參數

4)user:修改用戶屬性
示例:ansible all -m user -a ‘name=“user1”’
(在所有主機中創建user1用戶)
ansible all -m user -a ‘name=“user1” state=”absent”‘
(刪除用戶suer1)

5)group:組管理

示例:ansible all -m group -a ‘name=a gid=1 system=yes’

創建組名 a gid為1的系統組

6)copy:文件復制

示例ansible all -m copy ‘src=/etc/fstab dest=/tmp/fstat.txt owner=zhang mode=644’

復制本地/etc/fatab 到主機中的/tmp下改名為fatat.txt 數組是zhang 權限改為644

備注:src指定源文件
dest指定目標文件
(他們必須指定絕對路徑)
生成文件也可以不用src 可以用content 指明文件內容

7)file:設置文件的
(修改權限 屬主 屬組 創建鏈接等
刪除 創建文件、目錄等)

示例:ansible all -m file -a ‘path=/tmp/fstab.link src=/tmp/fstab state=link’

給tpm/fstab創建軟鏈接

8)ping:常用于測試ansible狀態
測試遠程主機的連通性
示例
ansible all -m ping
172.20.113.9 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
172.20.113.8 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
172.20.116.145 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
[root@localhost .ssh]#

9)service:用于管理服務的

ansible all -m service -a ‘enabled=ture name=httpd state=startd’

httpd服務啟動,并設為開機啟動

常見選項
enabled= (ture或者false)
name= (服務名)
state= (狀態 startd stopped restarted)

10)script:把本地的腳本復制到每一臺主機中,并執行

11)yum:管理程序包的
(前提是源都配置好)
ansible all -m yum -a ‘name=httpd’
(默認就是安裝)

ansible all -m yum -a ‘name=httpd state=absent’
指的是卸載程序包

可以同時安裝多個包
包名之間用逗號隔開

如果要更新緩存可以用update_catch=yes作為參數

12)setup:收集遠程主機的facts(每個被管理的節點在接受并運行管理命令之前,會將自己主機的相關信息如版本、IP cpu mem等信息傳送給ansible主機中)

13)fetch :和copyyige 用法一樣,是把遠程文件抓取到本機上

playbook:

playbook使用YAML語言

在yaml中

列表中的所有元素使用-打頭

多個鍵值對(映射)組成的叫做字典
我們可以把字典中的項放在花括號中

yaml基礎語言元素

變量
inventory
條件測試
迭代

使用方法
ansible-playbook Name.yaml

Ansible-vault:功能,加密playbook

語法:ansible-vault [create|decrypt|edit|encrypt|rekey|view]
ansible-vault encrypt hello.yml 加密
ansible-vault decrypt hello.yml 解密
ansible-vault view hello.yml 查看
ansible-vault edit hello.yml 編輯加密文件
ansible-vault rekey hello.yml 修改口令
ansible-vault create new.yml 創建新文件

yaml 格式

通常首行用—三個-來標記檔案

次行正常寫內容

#代表注釋碼

縮進必須統一

一個完整的代碼塊最少需要name:task

playbook的核心元素

hosts:執行的主機列表
tasks:任務集
varniables:內置變量或自定義變量的調用
tags:標簽
handlers和notity
templates

用法

-hosts:
remote_user:

tasks:
– name:
Moudlename: 要執行的語句

– name:
Moudlename:
要執行的語句

– name:
Moudlename:
要執行的語句

handlers:觸發器,和tasts是并列關系

格式
hangdlers:
– name :
moudlename: 語句

– name :
moudlename: 語句

需要出發的項就在tasks中的最下行寫
notify: name(handlers的)

如果是多任務,則notify: 換行后Name前面要加-
變量使用

變量命名
變量名僅能由字母、數字和下劃線組成,且只能以字母開頭
變量定義:key=value
示例:http_port=80
變量調用方式:
通過{{ variable_name }} 調用變量,且變量名前后必須有空格,有時用“{{ variable_name }}”才生效

1) 在命令中定義變量
ansible-playbook –e 選項指定
ansible-playbook test.yml -e “hosts=centos7”

2)ansibe中自帶變量模塊
模塊是setup
查看方法:ansible all -m setup
可以用自己需要的變量做判斷或者引用變量

3)playbook中變量定義
在remote_user下面寫

vars:
– var1: Var
– var2: Var2
在下方tasks中用{{}}調用

4)hosts中定義變量

1、在ip后直接定義 var=var
(每個主機可以定義自己的變量,不同的主機的變量可以同名,還可以定義多個變量,)
2、還可以定義給組中的所有成員定義通用變量
格式
[組名:變量名]
var1=var1
var2=var2

變量的生效優先級:
命令行中的變量>host>playbook

host中的變量普通變量優先級高于分組優先級

5) 在playbook文件的同級目錄新建file 以.yml結尾
文件中直接寫變量var: var
var2: var2
(備注定義變量文件并不需要加-)

playbook的組成

1)host: 由哪些主機組成
2)moudles: 調用哪些模塊
3)運行哪些命令

palybooks
1)tasks: 任務
2) var: 變量
3)templates:模板
4)handlers: 觸發器
5)roles: 角色

play的主體部分是task list。task list中的各任務按次序逐個 在hosts中指定的所有主機上執行,即在所有主機上完成第一個任務后再開始第二個。在運行自下而下某playbook時,如果中途發生錯誤,所有已執行任務都將回滾,因此,在更正playbook后重新執行一次即可
?task的目的是使用指定的參數執行模塊,而在模塊參數中可以使用變量。模塊執行是冪等的,這意味著多次執行是安全的,因為其結果均一致
?每個task都應該有其name,用于playbook的執行結果輸出,建議其內容盡可能清晰地描述任務執行步驟。如果未提供name,則action的結果將用于輸出

playbook中 條件測試使用when 表示,在要調用的tasks最后寫when: 條件

template:

template只能在playbook中調用

template 模板最好放在playbook文件的文件新建一個文件夾,名字叫templates。模板存在其中模板格式為j2。

針對每臺主機的不同情況,可以再j2中調用不同的變量
如:hostname中的
setup中的
等等

template 用法和copy一樣,他調用變量把文件按照主機不同進行重新定義,發送
這樣就做到了根據主機不同配置不同的配置文件

when

跟在某task下when后寫條件,指的是,滿足條件時才執行task下的任務

playbook中判斷相等用 ==
號(兩遍有空格)

循環

with_items:循環
示例


– hosts: all
remote_user: root

tasks:
– name: create dir
file: path=/data/{{ item }} state=directory

with_items:
– dir1
– dir2
– dir3

迭代嵌套子變量

示例
– hosts:websrvs
remote_user: root
tasks:
– name: add some groups
group: name={{ item }} state=present
with_items:
– group1
– group2
– group3
– name: add some users
user: name={{ item.name }} group={{ item.group }} state=present
with_items:
– { name: ‘user1’, group: ‘group1’ }
– { name: ‘user2’, group: ‘group2’ }
– { name: ‘user3’, group: ‘group3’ }

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100294

(0)
a.張笑a.張笑
上一篇 2018-06-04 08:57
下一篇 2018-06-04 10:28

相關推薦

欧美性久久久久