Ansible經常使用模塊命令

Ansible經常使用模塊命令php

1、安裝ansiblehtml

yum install epel-releaselinux

yum install ansiblenginx

 

2、配置文件配置shell

vi /etc/ansible/ansible.cfg (主要設置一些ansible初始化的信息,好比日誌存放路徑、模塊、插件等配置信息)apache

[defaults]json

inventory = /etc/ansible/hostscentos

library = /usr/share/ansibletomcat

sudo_user = root  (默認遠程執行命令的用戶)服務器

remote_port = 22

fork = 5

host_key_checking = False

log_path = /var/log/ansible.log

module_name = command

roles_path = /etc/ansible/roles

deprecation_warnings = False

 

vi /etc/ansible/hosts  (機器清單,進行分組管理)

       [tomcat]

       192.168.16.192

       192.168.16.193

 

       [nginx]

   app1 ansible_ssh_host=192.168.16.190 ansible_ssh_pass="2039"

   app2 ansible_ssh_host=192.168.16.191 sudo_user=」ald」 ansible_ssh_pass="2039"

 

 (其餘組命名規則查看配置文件例子)

[nginx]組使用的是明文密碼認證,通常都使用密鑰登錄,生產環境用密鑰

 

3、經常使用模塊命令

l  ansible命令經常使用指令

         -m指定模塊

         -a 指定模塊的命令。默認是command模塊,能夠省略

         -B 指定ansible後臺運行超時時間

         -C 測試運行效果,而不是正在運行

         -f 指定使用的並行進程的數量

       -i 指定inventory/hosts文件,默認/etc/ansiable/hosts文件

       --limit=xxx.xxx.xxx.xxx 限制對某個ip或者網段或者組執行

       --list-hosts 顯示將要執行命令的主機

 

l  ansible-doc 命令經常使用指令  (顯示ansiable模塊的幫助文檔)

           -M --module-path=/xxx/xxx  查詢模塊 默認是/usr/share/ansible/

-l  --list          顯示已存在的全部模塊

-s  command     顯示playbook制定模塊的用法,相似 man 命令

 

l  ansible-galaxy 下載第三方模塊指令,相似yum、pip、easy_install這樣的命令

ansible-galaxy install <module_name>

 

l  ansible-playbook命令經常使用指令 (和ansible相似)

--syntax-check  [yaml文件]         語法檢測

-t TAGS    只容許指定的tags標籤任務,多個以 , 分開

--skip-tags=SKIP_TAGS   跳過指定的標籤

--start-at-task=START_AT   從哪一個任務後執行

 

l  ansible-pull 命令經常使用指令

 

l  ansible-vault 命令經常使用指令 (對playbook文件進行加密/解密)

playbook文件在執行時,須要加上 –ask-vault-pass參數,一樣須要輸入密碼後才能正常執行。

============================================================

一、 copy——拷貝模塊   (用於將本地或遠程機器上的文件拷貝到遠程主機上)

ansible all –m copy -a 「src=/xxx/xxx dest=/yyy/yyy owner=root group=root mode=644 force=yes/no backup=yes/no」

解釋:將src 文件/目錄複製到遠程dest上,全部者/組爲root 權限爲644,force爲是否強制替換,backup爲替換前是否須要備份遠程遠文件

 

二、 raw——命令模塊 (和command、shell相似)

 

三、 yum——安裝模塊 (安裝程序)

ansible all –m yum –a 「name=httpd state=present」

解釋:安裝httpd程序,state能夠是present、latest、installed表示安裝程序,absent、removed表示卸載程序

 

四、 file——文件模塊 (文件屬性修改)

ansible all –m file –a 「src=/xxx/xxx/1 dest=/yyy/1 state=link owner=alad group=alad mode=777」

ansible develop -m file -a "path=/xxx/dir recurse=yes owner=root group=alad mode=644"

解釋:一、將src的文件軟鏈接到dest目錄下,並修改全部者/組和權限

      二、將path路徑的目錄遞歸形式設置全部者和權限

*、state還能夠是directory:若是目錄不存在,建立目錄

            file:即便文件不存在,也不會被建立

hard:建立硬連接

               touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間

               absent:刪除目錄、文件或者取消連接文件

五、 cron——計劃任務模塊 (計劃任務crontab)

ansible develop -m cron -a "name='show time' minute=*/1 hour=* day=* month=* weekday=* job='/bin/date'"

ansible develop -m cron -a "name='show time' state=absent"

解釋:一、建立一個每分鐘顯示時間的計劃任務

      二、刪除名爲show time這個計劃任務

 

六、 group——組模塊(用戶組)

ansible all-m group -a "name=develop"

解釋:在全部主機上建立一個develop的組 ,state=absent表示刪除該組

 

七、 user——用戶模塊(用戶)

ansible develop -m user -a "name=harlan groups=root password=-1vFO89dP6qyK"

ansible develop -m user -a "name=harlan state=absent remove=yes"

解釋:一、在全部主機上建立harlan用戶,並將其添加到root組,密碼是通過hash加密後的,明文密碼會被哈希,因此先填入hash後的密碼便可

可用此命令hash密碼  openssl passwd -salt -1 "123456"

      二、刪除harlan用戶。Remove表示是否刪除用戶的同時刪除家目錄

 

八、 service——服務模塊(服務狀態)

ansible develop -m service -a "name=nginx state=running"

ansible develop -m service -a "name=nginx state=restarted enabled=yes"

解釋:一、不管服務處在什麼狀態,最後都是將服務狀態設置爲啓動,當服務正在運行的時候,顯示爲changed爲false,state顯示爲狀態,表示爲正在運行;當服務中止的時候,顯示爲changed爲true,表示這個時候將服務進行了啓動,狀態爲啓動

      二、表示重啓nginx而且將nginx設置爲開機自啓動,state還有staeted、reloaded、stoped值

 

九、 script——腳本模塊(運行腳本)

ansible develop -m script -a "/root/a.sh"

解釋:在develop主機上運行當前服務器上的a.sh腳本

 

十、get_url——下載url上指定文件(相似wget)

ansible develop -m get_url -a "url=http://file.alavening.com/alading_file/head_img/1526900421976.jpg dest=/home/ owner=alad group=alad mode=644"

解釋:將url上的圖片下載到dest目的目錄上,而且設置相應的全部者/組和權限。

 

十一、synchronize——同步目錄(默認推送,mode=pull爲拉取)

       ansible develop -m synchronize -a "src=/home/test/ dest=/home/test compress=yes delete=yes"

ansible develop -m synchronize -a "src=/home/test/ dest=/home/test compress=yes mode=pull"

解釋:一、將src下的文件同步到dest上,delete=yes表示以src 目錄爲準鏡像同步。

     二、拉取遠程src上的目錄文件到本地dest上

 

十二、template——文檔內變量的替換的模塊

       ansible develop –m template –a ‘src=/mytemplates/foo.j2 dest=/etc/file.conf mode="u=rw,g=r,o=r"’

解釋:將src上foo.j2的變量模版複製到dest上。Template適合用playbook編寫 ,經過變量而後拷貝到遠程主機。

能夠參考:https://www.cnblogs.com/jsonhc/p/7895399.html

 

1三、fetch——從遠程主機下載文件(不能拉取目錄)

    ansible develop -m fetch -a "src=/home/test/xxx dest=/home/ flat=yes"

解釋:將遠程xxx文件拉取到本地home目錄下,目錄結構會是dest路徑+遠程主機名+src,假如遠程主機名爲develop,拉取的xxx文件在本地的/home/develop/home/test目錄。若是須要指定拉取到某目錄下 加個flat=yes的參數便可。

 

1四、unarchive——解壓文件

ansible develop -m unarchive -a "src=/root/apache-tomcat-7.0.85.tar.gz dest=/home/test owner=alad group=alad mode=755"

ansible develop -m unarchive -a "src=/home/alad/ansible/elk/logstash-6.2.4.tar.gz dest=/home/test remote_src=yes"

ansible develop -m unarchive -a "src=http://mirrors.linuxeye.com/oneinstack-full.tar.gz dest=/home/test remote_src=yes"

解釋:將本地的tomcat壓縮包解壓到遠程主機dest目錄下,並修改其權限和全部者/組,remote_src=yes 表示解壓遠程主機已有的壓縮包,src爲url表示下載此包到遠程主機dest目錄進行解壓縮後,並刪除壓縮包源文件

 

1五、command和shell——linux命令模塊

shell和command的區別:shell模塊能夠特殊字符,而command是不支持

簡單說:command運行的命令中沒法使用變量,管道。若是須要使用管道、變量,請使用raw模塊,或者shell模塊。

 

 

1六、setup——獲取主機信息

       ansible develop -m setup

       ansible develop -m setup -a 'filter=ansible_*_mb'

解釋:一、顯示系統全部信息

      二、一般配合filter進行過濾來獲取主機信息,(例子是顯示內存信息)

 

1七、assemble——配置文件組裝發送到遠程主機

ansible test -m assemble -a "src=/root/test dest=/root/ansible/fileone mode=777 remote_src=False delimiter='========'"

解釋:將src test目錄下全部文件(不含test子目錄內容)的內容發送到dest fileone文件中,remote_src默認爲Ture表示src爲遠程主機上的路徑,False爲ansible控制端的路徑,delimiter爲文件之間內容分隔符。

 

4、PlayBook語法和結構

Playbook須要7個文件夾,如ansible安裝nginx,則須要在/etc/ansible/roles目錄下創建如下文件夾。

mkdir -pv nginx/{default,tasks,vars,meta,handlers,templates,files}

 

對於Ansible,幾乎每一個YAML文件都以一個列表開始。列表中的每一個項目都是鍵/值對列表,一般稱爲「散列」或「字典」。因此,咱們須要知道如何在YAML中編寫列表和字典。

YAML還有一個小小的怪癖。全部YAML文件(不管它們是否與Ansible相關聯)均可以選擇開始---和結束---.。這是YAML格式的一部分,並指示文檔的開始和結束。

列表中的全部成員都是以相同的縮進級別開頭的行(短劃線和空格):"- "

例如如下例子:

 

 

第一次的話都會運行,後邊若是copy的文件內容發生改變就會觸發 notify ,而後會直接執行 handlers 的內容( 這裏notify後邊的事件就都不會執行了 )。

 

5、        template模塊jinja2語法

A:template:使用了Jinjia2格式做爲文件模版,進行文檔內變量的替換的模塊。至關於copy,將jinja2的文件模板理解並執行,轉化爲各個主機間的對應值。

如:template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

http.conf.j2必須是完整的文件內容,由於這是覆蓋操做,而非只選擇性遠程主機替換變量,dest要指定文件名,若是是目錄就至關於copy了http.conf.j2到遠程目錄下,不是咱們要的結果。

B:when語句:在tasks中使用,Jinja2的語法格式

- name: start nginx service

 shell: systemctl start nginx.service

 when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"

當系統爲 centos 7的時候執行sysctemctl命令,不然不執行

 

C:循環:迭代,須要重複執行的任務

       變量名爲item,而with_item爲要迭代的元素。若是某個任務出錯,後面不執行

- name: install packages

 yum: name={{ item }} state=latest

 with_items:

    - httpd

    - php

這是基於字符串列表給出元素示例

 

- name: create users

    user: name={{ item.name }} group={{ item.group }} state=present

    with_items:

    - {name: 'userx1', group: 'groupx1'}

    - {name: 'userx2', group: 'groupx2'}

這是基於字典列表給元素示例:item.name  . 後邊的表示鍵

相關文章
相關標籤/搜索