天天看點

Ansible常用子產品

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 =&gt; {</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 =&gt; {</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 &gt;&gt;</code>

<code>skipped, since </code><code>/tmp/22</code> <code>exists</code>

<code>192.168.121.128 | SUCCESS | rc=0 &gt;&gt;</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