ansible筆記
hosts:遠端主機
user:執行該任務組的使用者
remote_user:與user相同
sudo:如果設定為yes,執行該任務組的使用者在執行任務的時候,擷取root權限。
sudo_user:如果設定user為tom,sudo為yes,sudo_user為jerry,則tom擷取jerry使用者的權限。
connection:通過什麼方式連接配接到遠端主機。
###gather:收集 facts:事實
gather_facts:除非你明确說明不需要在遠端主機上執行setup子產品,否則預設會自動執行。如果你确實不需要setup子產品所傳過來的變量,你可以啟用該選項。
file 子產品
1
2
3
4
<code>ansible </code><code>test</code> <code>-m </code><code>file</code> <code>-a </code><code>"src=/etc/fstab dest=/tmp/fstab state=link"</code>
<code>ansible </code><code>test</code> <code>-m </code><code>file</code> <code>-a </code><code>'path=/tmp/fstab state=absent'</code>
<code>ansible </code><code>test</code> <code>-m </code><code>file</code> <code>-a </code><code>'path=/tmp/file1 state=touch'</code>
<code>ansible </code><code>test</code> <code>-m </code><code>file</code> <code>-a </code><code>'path=/tmp/dir1 state=directory mode=755 owner=root group=root'</code>
-V 或-vvv參數
ansible執行自動化腳本擷取執行過程的詳細資訊。
5
<code>ansible </code><code>test</code> <code>-m </code><code>ping</code> <code>-</code><code>v</code>
<code>ansible </code><code>test</code> <code>-m </code><code>ping</code> <code>-vvv</code>
<code># ansible 192.168.121.128:192.168.121.129 -m ping -o</code>
<code>192.168.121.129 | SUCCESS => {</code><code>"changed"</code><code>: </code><code>false</code><code>, </code><code>"ping"</code><code>: </code><code>"pong"</code><code>}</code>
<code>192.168.121.128 | SUCCESS => {</code><code>"changed"</code><code>: </code><code>false</code><code>, </code><code>"ping"</code><code>: </code><code>"pong"</code><code>}</code>
copy子產品:
<code>ansible </code><code>test</code> <code>-m copy -a </code><code>'src=jdk.yml dest=/tmp'</code>
<code>#content=:内容填充到檔案中。</code>
<code>ansible </code><code>test</code> <code>-m copy -a </code><code>'content="hello\n world\n" dest=/tmp/test.ansible'</code>
group子產品:
建立新使用者的組:
<code>ansible all -m group -a </code><code>"name=hh system=yes"</code>
添加新使用者:
<code>ansible all -m user -a </code><code>"name=hh group=hh system=yes"</code>
ansible批量添加使用者,前提是你要有這個組,否則會報錯的:
<code>echo</code> <code>ansible | openssl </code><code>passwd</code> <code>-1 -stdin</code><code>//ansible</code> <code>user的password參數需要接受加密後的值。</code>
<code>ansible </code><code>test</code> <code>-m user -a </code><code>'name=meng password="$1$nZ1s3fvA$gzQzd8FZuYRIldm0HMqNm/"'</code> <code>-f 5 -o </code>
<code> </code>
<code>#system=yes 系統使用者,預設使用/bin/bash</code>
<code>ansible </code><code>test</code> <code>-m user -a </code><code>'name=meng group=meng system=yes'</code>
command:
creates:指定一個檔案名,當該檔案存在,下面的指令将不執行。
removes:指定一個檔案名,當該檔案不存在,則後續指令不執行。
6
7
8
9
10
11
12
<code>[root@192 ansible]</code><code># ansible test -a 'creates=/tmp/22 ls /home'</code>
<code>192.168.121.129 | SUCCESS | rc=0 >></code>
<code>skipped, since </code><code>/tmp/22</code> <code>exists</code>
<code>192.168.121.128 | SUCCESS | rc=0 >></code>
<code>[root@192 ansible]</code><code># ansible test -a 'creates=/tmp/file4 ls /home'</code>
<code>meng</code>
<code>ody</code>
command子產品不支援管道過濾。
<code>ansible </code><code>test</code> <code>-a </code><code>'netstat -tnlp|grep ssh'</code>
shell支援管道
<code>ansible </code><code>test</code> <code>-m shell -a </code><code>'netstat -tnlp|grep ssh'</code>
類似于shell指令的raw子產品也支援管道。
<code>ansible </code><code>test</code> <code>-m raw -a </code><code>'netstat -tnlp|grep ssh'</code>
chdir: 執行指令之前先 切換到指定目錄。
<code>ansible </code><code>test</code> <code>-a </code><code>'chdir=/tmp tar czf file.tar.gz file'</code>
service子產品
enable=yes|no 開機自啟動
name:服務名稱
runlevel:運作級别
state:目前服務的運作狀态(started,stopped,restarted,reloaded)
sleep:對服務執行restarted操作,stop和start之間沉睡幾秒鐘。
pattern:定義一個比對模式,如果status指令檢視服務狀态時沒有響應,就會通過ps指令在程序中根據該模式查找,如果比對到,則認為該服務依然在運作。
重新開機服務:
<code>ansible </code><code>test</code> <code>-m raw -a </code><code>'name=httpd state=restarted sleep=3'</code>
停止服務:
<code>ansible </code><code>test</code> <code>-m raw -a </code><code>'name=httpd state=stopped'</code>
cron:計劃任務管理
backup:對遠端主機上的原計劃任務内容修改之前做備份。
cron_file:如果指定該選項,則用該檔案替換遠端主機上的cron.d目錄下的使用者計劃
day:日(1-31,*,*/2,)
hour:小時(0-23,*,*/2)
minute:分鐘(0-59,*,*/2)
mouth:月(1-12,*,*/2)
weekday:周(0-7,*,)
job:要執行的任務,依賴于state=present
name:該任務的描述
special_time:指定什麼時候執行,參數:reboot,yearly,annually,monthly,weekly,daily,hourly
state:确認該任務計劃是建立還是删除。
user:以哪個使用者身份執行。
執行個體:
建立計劃任務:
<code>ansible </code><code>test</code> <code>-m </code><code>cron</code> <code>-a </code><code>'name="reboot system" hour=2 user=root job="/sbin/reboot"'</code>
檢視計劃任務:
<code>ansible </code><code>test</code> <code>-m </code><code>command</code> <code>-a </code><code>'crontab -l'</code>
删除計劃任務:
<code>ansible </code><code>test</code> <code>-m </code><code>cron</code> <code>-a </code><code>'name="reboot system" hour=2 user=root job="/sbin/reboot" state=absent'</code>
filesystem:在塊裝置上建立檔案系統
選項:
dev:目标塊裝置
force:在一個已有檔案系統的裝置上強制建立
fstype:檔案系統的類型
opts:傳遞給mkfs指令的選項
yum軟體包管理:
config_file:yum的配置檔案
disable_gpg_check:關閉gpg_check
disablerepo:不啟用某個源
enablerepo:啟用某個源
list
name:要進行操作的軟體包的名字,也可以傳遞一個url或者一個本地的rpm的路徑。
state:狀态(present,absent,latest)
13
14
<code>- name: 安裝最新版本的apache</code>
<code> </code><code>yum: name=httpd state=latest</code>
<code>- name: 移除apache</code>
<code> </code><code>yum: name=httpd state=absent</code>
<code>- name: 安裝一個特殊版本的apache</code>
<code> </code><code>yum: name=httpd-2.2.29-1.4.amzn1 state=present</code>
<code>- name: 更新所有的軟體包</code>
<code> </code><code>yum: name=* state=latest</code>
<code>- name: 從一個遠端yum倉庫安裝nginx</code>
<code> </code><code>yum: name=http:</code><code>//nginx</code><code>.org</code><code>/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0</code><code>.el6.ngx.noarch.rpm state=present</code>
<code>- name: 從本地倉庫安裝nginx</code>
<code> </code><code>yum: name=</code><code>/usr/local/src/nginx-release-centos-6-0</code><code>.el6.ngx.noarch.rpm state=present</code>
<code>- name: 安裝整個Development tools相關的軟體包</code>
<code> </code><code>yum: name=</code><code>"@Development tools"</code> <code>state=present</code>
dd if:
<code>ansible </code><code>test</code> <code>-m </code><code>command</code> <code>-a </code><code>'dd if=/dev/zero of=/disk.img bs=4k count=1024'</code>
<code>ansible -m commmand -a </code><code>'losetup /dev/loop0 /disk.img'</code>
ansible-playbook的文法校驗。
[root@192 ansible]# ansible-playbook jdk.yml --syntax-check
playbook: jdk.yml
顯示指定playbook中的task。
[root@192 ansible]# ansible-playbook jdk.yml --list-task
play #1 (test): testTAGS: []
tasks:
jdk : jdk-8u101-linux-x64.tar.gzTAGS: []
jdk : tar jdk-8u101-linux-x64.tar.gzTAGS: []
jdk : java_profile_1TAGS: []
jdk : java_profile_2TAGS: []
jdk : java profile_3TAGS: []
jdk : java_4TAGS: []
檢視playbook針對的主機
<code>[root@192 ansible]</code><code># ansible-playbook jdk.yml --list-hosts</code>
<code>playbook: jdk.yml</code>
<code> </code><code>play </code><code>#1 (test): testTAGS: []</code>
<code> </code><code>pattern: [u</code><code>'test'</code><code>]</code>
<code> </code><code>hosts (2):</code>
<code> </code><code>192.168.121.129</code>
<code> </code><code>192.168.121.128</code>
指定task從第某行開始執行。
<code>ansible-playbook jdk.yml --start-at-task=</code><code>'java_profile_1'</code>
使用ansible做秘鑰登入:
推送key的前提是配置檔案編輯好密碼。然後使用下面推送:
<code>10.10.2.9 ansible_ssh_pass=</code><code>'Z6tqEE'</code>
authorized_key 子產品,root使用者下推送:
<code>ansible 10.74.246.69 -m authorized_key -a </code><code>"user=root key={{lookup('file','/root/.ssh/id_rsa.pub') }}"</code>
推送普通使用者的key也是一樣,使用root使用者,不能切換為hh使用者,否則報錯,推送失敗。
<code>ansible 10.74.246.153 -m authorized_key -a </code><code>"user=hh key={{lookup('file','/home/hh/.ssh/id_rsa.pub') }}"</code>
--sudo 使用:
<code>ansible all --</code><code>sudo</code> <code>-m copy -a </code><code>'src=/tmp/tomcat_port.sh dest=/usr/local/zabbix/share/zabbix/alertscripts/ mode=0777'</code>
本文轉自青衫解衣 51CTO部落格,原文連結:http://blog.51cto.com/215687833/1886305