代碼發佈系統node
準備一個虛擬機後克隆出另外三個,注意,克隆前要將虛擬機關機python
puppet ansible slatstackweb
第一步:下載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
注: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)便可高併發
ansible -h
-a MODULE_ARGS, --args=MODULE_ARGS #模塊的參數
-C, --check # 檢查
-f FORKS, --forks=FORKS #用來作高併發的
--list-hosts #列出主機列表
-m MODULE_NAME #模塊名稱
--syntax-check # 語法檢查
-k 輸入密碼
rpm -ql ansible
/etc/ansible
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/hosts
/etc/ansible/roles
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
ansible all -m ping
ansible 192.168.177.132,192.168.177.132 -m ping
在配置文件中
# 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兩個組的機器是否在線
ansible 'web:&db' -m ping
ansible 'web:db' -m ping #方式一
ansible web,db -m ping #方式二
ansible 'web:!db' -m ping
注:系統自帶的ping走的是ICMP協議
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
ansible web -m command -a 'ls /' #(默認就是command,command能夠省略)
ansible web -a 'ls /' #可簡寫爲這
ansible web -a 'pwd' #
ansible web -a 'chdir=/tmp pwd' #切換目錄執行命令,經常使用來編譯安裝,
ansible web -a 'creates=/tmp pwd' #若是目錄已存在,就不執行命令,用來判斷tmp目錄是否存在
ansible web -a 'removes=/data pwd' #目錄已存在,就執行命令
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模塊支持這些符號
ansible web -m shell -a 'echo '123' | passwd --stdin shy' #此時可使用各類特殊符號
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
ansible 192.168.177.132 -m shell -a '/opt/b.py'
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'
backup 備份,以時間戳結尾 dest 目的地址 group 文件的屬組 mode 文件的權限 r 4 w 2 x 1 owner 文件的屬主 src 源文件(加/是保存目錄中的文件,不加/是保存目錄) content 直接把文字輸入到遠程的文件中 # 經過md5碼來判斷是否須要複製
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" # 直接將文本內容注入到遠程主機的文件中
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' #用來在遠程機器上建立文件
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' #用來刪除文件或者文件夾
下載被控節點的文件
dest 目的地址
src 源地址 被管控機上的地址
ansible web -m fetch -a 'src=/var/log/cron dest=/tmp' # 下載被控節點的文件,每臺機器建立一個文件夾(以IP命名),並保留原來的目錄結構