ansible(一)

一.目的

代碼發佈系統node

二.準備工做:乾淨的虛擬機準備4個

準備一個虛擬機後克隆出另外三個,注意,克隆前要將虛擬機關機python

 

三.能夠用來代碼發佈的工具

puppet ansible slatstackweb

四.ansible(批量在遠程主機上執行 命令)

1.下載ansible

第一步:下載wget
yum install wget
第二部:下載epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
第三部:安裝ansible
yum install -y ansible

2.ansible 經過ssh來鏈接並控制‘被控節點’

注:ssh 的認證方式shell

  • 密碼鏈接json

  • 祕鑰鏈接bash

ansible使用祕鑰登陸併發

ssh-keygen # 用來生成ssh的密鑰對
ssh-copy-id 192.168.177.132 # 複製祕鑰到遠程主機
ssh-copy-id 192.168.177.133 # 複製祕鑰到遠程主機
ssh-copy-id 192.168.177.134 # 複製祕鑰到遠程主機

注:135做爲主節點,後三個做爲被控者節點ssh

結果:在192.168.177.135主機中,想要鏈接另外三個被控節點,使用命令:ssh 192.168.177.132(ssh ip)便可高併發

3.ansible命令格式

(1)查看ansible的全部命令
ansible -h
-a MODULE_ARGS, --args=MODULE_ARGS #模塊的參數
-C, --check # 檢查
-f FORKS, --forks=FORKS #用來作高併發的
--list-hosts #列出主機列表
-m MODULE_NAME #模塊名稱
--syntax-check # 語法檢查
-k 輸入密碼
(2)查看ansible生成的文件
rpm -ql ansible
/etc/ansible
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/hosts
/etc/ansible/roles
(3)查看是否可以連通單個IP(查看某個IP是否在線)
ansible 192.168.177.132 -m ping

若是ping不通,在hosts文件中添加相應IP工具

vi /etc/ansible/hosts
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character #以警號開頭的表明註釋
#   - Blank lines are ignored #空白行能夠被忽略
#   - Groups of hosts are delimited by [header] elements #主機組須要下載[組名]下
#   - You can enter hostnames or ip addresses #能夠寫主機名或者IP地址
#   - A hostname/ip can be a member of multiple groups #一臺主機能夠在多個組中

192.168.177.132
192.168.177.133
192.168.177.134

根據註釋:You can enter hostnames or ip addresses,能夠在hosts文件中加入主機命

或IP地址,以此來ping通相應IP

(4)查看全部被控節點是否在線
ansible all -m ping
(5)測試特定的某幾個機器是否在線
ansible 192.168.177.132,192.168.177.132 -m ping
(6)測試特定的某組機器是否在線

在配置文件中

# Ex 2: A collection of hosts belonging to the 'webservers' group

## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
[web]
192.168.177.[132:133]

[db]
192.168.177.133
192.168.177.134

[cache]
192.168.177.134
ansible web,db  -m ping #查看web,db兩個組的機器是否在線
(7)查看兩個組的交集的機器是否在線
ansible 'web:&db'  -m ping
(8)查看兩個組的並集的機器是否在線
ansible 'web:db'  -m ping #方式一
ansible web,db -m ping #方式二
(9)查看兩個組的差集的機器是否在線
ansible 'web:!db'  -m ping

注:系統自帶的ping走的是ICMP協議

4.ansible-doc查看模塊的幫助信息(有哪些參數可使用)

ansible-doc -h

-j, --json           **For internal testing only** Dump json metadata for #以json的格式返回全部的ansible模塊 ansible-doc -j
                     
-l, --list           List available plugins #以列表的格式返回全部的ansible模塊 ansible-doc -l

-s, --snippet         Show playbook snippet for specified plugin(s) #以片斷的形式顯示ansible的幫助信息 ansible-doc -s 模塊

查看詳細信息

ansible-doc command
ansible-doc shell

5.命令相關模塊

(1)command模塊(不支持特殊字符)
ansible web -m command -a 'ls /' #(默認就是command,command能夠省略)
ansible web -a 'ls /' #可簡寫爲這
ansible web -a 'pwd' #
command的參數

ansible web -a 'chdir=/tmp pwd' #切換目錄執行命令,經常使用來編譯安裝,
ansible web -a 'creates=/tmp pwd' #若是目錄已存在,就不執行命令,用來判斷tmp目錄是否存在
ansible web -a 'removes=/data pwd' #目錄已存在,就執行命令
在web組中建立一個用戶shy
ansible web -a 'useradd shy'
查看用戶是否建立成功
ansible web -a 'tail -l /etc/passwd' #方式一
ansible web -a 'tail -l /etc/shadow' #方式二
id shy #方式三
給用戶設置密碼
passwd shy
設置密碼 一步搞定
echo '123' | passwd --stdin shy #用這種方式設置密碼,遠程登陸時,不用重複確認密碼
ansible web -a 'echo '123' | passwd --stdin shy ' #管道符不支持

ansible不支持 < > ; &|這些符號,這時候就永遠到了shell模塊,shell模塊支持這些符號

(2)shell模塊(在遠程執行)
shell的參數(與command模塊相同)

設置密碼
ansible web -m shell -a 'echo '123' | passwd --stdin shy' #此時可使用各類特殊符號
批量在在遠程主機上執行shell腳本
ansible 192.168.177.132 -m shell -a 'bash /opt/a.sh' #方式一
ansible 192.168.177.132 -m shell -a '/opt/a.sh' #方式二

注:方式二文件可能沒有可執行權限,須要:chmod +x a.sh

批量在在遠程主機上執行python腳本
ansible 192.168.177.132 -m shell -a  '/opt/b.py'
(3)script模塊(在本地執行)
參數信息(與command和shell參數相同)

執行本地(管控機)(主機)文件
ansible web -m script -a '/opt/m.sh'
判斷的是被管控機(從機)上的文件是否存在,存在就執行本地文件
ansible web -m script -a 'removes=/opt/m.sh /opt/m.sh'
判斷的是被管控機上(從機)的文件是否存在,存在就跳過
ansible web -m script -a 'creates=/opt/m.sh /opt/m.sh'

6.文件相模塊

(1)copy模塊(在本地執行)
copy的參數

backup 備份,以時間戳結尾
dest 目的地址
group 文件的屬組
mode 文件的權限 r 4 w 2 x 1
owner 文件的屬主
src 源文件(加/是保存目錄中的文件,不加/是保存目錄)
content 直接把文字輸入到遠程的文件中
# 經過md5碼來判斷是否須要複製
將192.168.177.135(本地)中的/opt/a.sh複製dao192.168.177.132(遠程)中的/root/a.sh
ansible 192.168.177.132 -m copy -a 'src=/opt/a.sh dest=/root/a.sh'
#複製獲得的權限信息跟原來比少了一個可執行的權限
修改文件的權限
ansible db -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755' #修改文件的權限
修改文件的屬主
 ansible web -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755 owner=shy' 修改文件的屬主
複製本地目錄內的全部文件到遠程主機
 ansible web -m copy -a 'src=/etc/init.d/ dest=/tmp/ mode=755 owner=hsy' # 複製本地目錄內的全部文件到遠程主機,若是改變文件夾的屬性,則文件夾內文件的屬性也會被改變
直接將文本內容注入到遠程主機的文件中
 ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私語\n' dest=/tmp/b.txt" # 直接將文本內容注入到遠程主機的文件中
(2)file模塊(在遠程執行)
file模塊的參數

軟鏈接與硬鏈接
inode 硬盤的地址
id 獲取到的是內存的地址
ln -s a.py b.py 建立軟鏈接 #相似於快捷方式
ln  a.py c.py 建立硬連接 #兩個文件的inode是同樣的
cp a.py d.py #複製
#當源文件變化時,軟鏈接和硬連接文件都會跟着變化,複製的文件不會變化
在遠程機器上建立文件夾
ansible db -m file -a 'path=/lzmly2  state=directory' #在遠程機器上建立文件夾
用來在遠程機器上建立文件
ansible db -m file -a 'path=/root/q.txt  state=touch' #用來在遠程機器上建立文件
建立軟鏈接src是源地址,path是目標地址
ansible db -m file -a 'path=/tmp/f src=/etc/fstab state=link' #建立軟鏈接src是源地址,path是目標地址,state=hard是硬連接
用來刪除文件或者文件夾
ansible db -m file -a 'path=/tmp/f state=absent' #用來刪除文件或者文件夾
(3)fetch模塊

下載被控節點的文件

dest 目的地址
src 源地址 被管控機上的地址
ansible web -m fetch -a 'src=/var/log/cron dest=/tmp' # 下載被控節點的文件,每臺機器建立一個文件夾(以IP命名),並保留原來的目錄結構
相關文章
相關標籤/搜索