天天看點

ansible實戰與配置

1 用playbook安裝nginx

- 思路:先在一台機器上編譯安裝好nginx、打包,然後再用ansible去下發

先在服務端編譯nginx(服務端為chy01 192.168.212.11 客戶機為chy02 192.168.212.12)

<code>[root@chy01 ~]</code><code># cd /etc/ansible/</code>

<code>[root@chy01 ansible]</code><code># mkdir nginx_install //先建立一個nginx的安裝目錄</code>

<code>[root@chy01 ansible]</code><code># cd nginx_install/</code>

<code>[root@chy01 nginx_install]</code><code># mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}</code>

<code>說明:roles目錄下有兩個角色,common為一些準備操作,</code><code>install</code><code>為安裝nginx的操作。每個角色下面又有幾個目錄,handlers下面是當發生改變時要執行的操作,通常用在配置檔案發生改變,重新開機服務。files為安裝時用到的一些檔案,meta為說明資訊,說明角色依賴等資訊,tasks裡面是核心的配置檔案,templates通常存一些配置檔案,啟動腳本等模闆檔案,vars下為定義的變量</code>

<code>[root@chy01 nginx_install]</code><code># ls roles/</code>

<code>common  </code><code>install</code>

<code>[root@chy01 nginx_install]</code><code># ls roles/install/</code>

<code>files  handlers  meta  tasks  templates  vars</code>

<code>[root@chy01 ~]</code><code># ls /etc/init.d/nginx </code>

<code>/etc/init</code><code>.d</code><code>/nginx</code>

<code>[root@chy01 ~]</code><code># ls /usr/local/nginx/</code>

<code>client_body_temp/ fastcgi_temp/     logs/             sbin/             uwsgi_temp/       </code>

<code>conf/             html/             proxy_temp/       scgi_temp/  </code>

<code>[root@chy01 ~]</code><code># ls /usr/local/nginx/conf/nginx.conf</code>

<code>/usr/local/nginx/conf/nginx</code><code>.conf</code>

<code>(如上是之前編譯好的nginx,在這裡就不需要再次編譯安裝了)</code>

編譯完成後需要在服務端打包nginx包:如下操作

<code>[root@chy01 </code><code>local</code><code>]</code><code># tar czvf nginx.tar.gz --exclude "nginx.conf" --exclude "vhosts" nginx/</code>

<code>(如上是打包nginx目錄打包成nginx.</code><code>tar</code><code>.gz 但是在打包的過程中是不需要打包nginx.conf與vhosts的)</code>

<code>[root@chy01 </code><code>local</code><code>]</code><code># mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/</code>

<code>//</code><code>将壓縮包移動到建立的nginx_install目錄下去 </code>

<code>[root@chy01 </code><code>local</code><code>]</code><code># cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/</code>

<code>[root@chy01 </code><code>local</code><code>]</code><code># cp /etc/init.d/nginx  /etc/ansible/nginx_install/roles/install/templates/</code>

<code>啟動腳本、配置檔案都要放到</code><code>/etc/ansible/nginx_install/roles/install/templates</code><code>下面</code>

 定義common的tasks,nginx是需要一些依賴包的

<code>[root@chy01 </code><code>local</code><code>]</code><code># cd /etc/ansible/nginx_install/roles/</code>

<code>[root@chy01 roles]</code><code># cd common/</code>

<code>[root@chy01 common]</code><code># vi tasks/main.yml </code>

<code>- name: Install initializtion require software</code>

<code>  </code><code>yum: name={{ item }} state=installed</code>

<code>  </code><code>with_items:</code>

<code>    </code><code>- zlib-devel</code>

<code>    </code><code>- pcre-devel</code>

<code>(安裝依賴包與相應的庫)</code>

定義變量

<code>[root@chy01 common]</code><code># vim /etc/ansible/nginx_install/roles/install/vars/main.yml </code>

<code>nginx_user: www</code>

<code>nginx_port: 80</code>

<code>nginx_basedir: </code><code>/usr/local/nginx</code>

<code>//</code><code>左邊是定義的名字,右邊是值</code>

<code>[root@chy01 common]</code><code># vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml //把所有用到的文檔拷貝到目标機器(定義一個子配置檔案)</code>

<code>- name: Copy Nginx Software </code>

<code>  </code><code>copy: src=nginx.</code><code>tar</code><code>.gz dest=</code><code>/tmp/nginx</code><code>.</code><code>tar</code><code>.gz owner=root group=root</code>

<code>- name: Uncompression Nginx Software</code>

<code>  </code><code>shell: </code><code>tar</code> <code>zxf </code><code>/tmp/nginx</code><code>.</code><code>tar</code><code>.gz -C </code><code>/usr/local/</code>

<code>- name: Copy Nginx Start Script</code>

<code>  </code><code>template: src=nginx dest=</code><code>/etc/init</code><code>.d</code><code>/nginx</code> <code>owner=root group=root mode=0755</code>

<code>- name: Copy Nginx Config</code>

<code>  </code><code>template: src=nginx.conf dest={{ nginx_basedir }}</code><code>/conf/</code> <code>owner=root group=root mode=0644</code>

建立使用者并且啟動服務以及删除壓縮包

<code>[root@chy01 common]</code><code># vim /etc/ansible/nginx_install/roles/install/tasks/install.yml </code>

<code>- name: Create Nginx User</code>

<code>  </code><code>user: name={{ nginx_user }} state=present createhome=no shell=</code><code>/sbin/nologin</code>

<code>- name: Start Nginx Service</code>

<code>  </code><code>shell: </code><code>/etc/init</code><code>.d</code><code>/nginx</code> <code>start</code>

<code>- name: Add Boot Start Nginx Service</code>

<code>  </code><code>shell: chkconfig --level 345 nginx on</code>

<code>- name: Delete Nginx compression files</code>

<code>  </code><code>shell: </code><code>rm</code> <code>-rf </code><code>/tmp/nginx</code><code>.</code><code>tar</code><code>.gz</code>

<code>//</code> <code>nginx_user 調用參數;state=present 表示存在。</code>

再建立main.yml并且把copy和install調用

<code>[root@chy01 tasks]</code><code># vim /etc/ansible/nginx_install/roles/install/tasks/main.yml </code>

<code>- include: copy.yml</code>

<code>- include: </code><code>install</code><code>.yml</code>

<code>到此兩個roles:common和</code><code>install</code><code>就定義完成了</code>

最後要定義一個入口配置檔案

<code>[root@chy01 tasks]</code><code># vim /etc/ansible/nginx_install/install.yml </code>

<code>---</code>

<code>- hosts: chy02</code>

<code>  </code><code>remote_user: root</code>

<code>  </code><code>gather_facts: True</code>

<code>  </code><code>roles:</code>

<code>    </code><code>- common</code>

<code>    </code><code>- </code><code>install</code>

<code>[root@chy01 tasks]</code><code># ansible-playbook /etc/ansible/nginx_install/install.yml</code>

<code>[DEPRECATION WARNING]: The use of </code><code>'include'</code> <code>for</code> <code>tasks has been deprecated. Use </code><code>'import_tasks'</code> <code>for</code> <code>static inclusions or </code>

<code>'include_tasks'</code> <code>for</code> <code>dynamic inclusions. This feature will be removed </code><code>in</code> <code>a future release. Deprecation warnings can be disabled by</code>

<code> </code><code>setting deprecation_warnings=False </code><code>in</code> <code>ansible.cfg.</code>

<code>[DEPRECATION WARNING]: include is kept </code><code>for</code> <code>backwards compatibility but usage is discouraged. The module documentation details </code>

<code>page may explain </code><code>more</code> <code>about this rationale.. This feature will be removed </code><code>in</code> <code>a future release. Deprecation warnings can be </code>

<code>disabled by setting deprecation_warnings=False </code><code>in</code> <code>ansible.cfg.</code>

<code>PLAY [chy02] *********************************************************************************************************************</code>

<code>TASK [Gathering Facts] ***********************************************************************************************************</code>

<code>ok: [chy02]</code>

<code>TASK [common : Install initializtion require software] ***************************************************************************</code>

<code>failed: [chy02] (item=[u</code><code>'zlib-devel'</code><code>, u</code><code>'pcre-devel'</code><code>]) =&gt; {</code><code>"changed"</code><code>: </code><code>false</code><code>, </code><code>"failed"</code><code>: </code><code>true</code><code>, </code><code>"item"</code><code>: [</code><code>"zlib-devel"</code><code>, </code><code>"pcre-devel"</code><code>], </code><code>"msg"</code><code>: </code><code>"No Package matching '['zlib-devel'' found available, installed or updated"</code><code>, </code><code>"rc"</code><code>: 0, </code><code>"results"</code><code>: []}</code>

<code>    </code><code>to retry, use: --limit @</code><code>/etc/ansible/nginx_install/install</code><code>.retry</code>

<code>PLAY RECAP ***********************************************************************************************************************</code>

<code>chy02                      : ok=1    changed=0    unreachable=0    failed=1   </code>

<code>在執行的時候會報一個錯誤,這時初步感覺是因為不支援循環,解決方法需要修改一下main.yml的配置檔案</code>

<code>  </code><code>yum: name=</code><code>"pcre-devel,zlib-devel"</code> <code>state=installed</code>

<code>[root@chy01 common]</code><code># ansible-playbook /etc/ansible/nginx_install/install.yml</code>

<code>再次啟動就正常了</code>

<code>[root@chy02 ~]</code><code># ps aux |grep nginx</code>

<code>root       5566  0.0  0.0  45484  1284 ?        Ss   03:05   0:00 nginx: master process </code><code>/usr/local/nginx/sbin/nginx</code> <code>-c </code><code>/usr/localnginx/conf/nginx</code><code>.conf</code>

<code>nobody     5568  0.0  0.2  47972  3920 ?        S    03:05   0:00 nginx: worker process</code>

<code>nobody     5569  0.0  0.2  47972  3920 ?        S    03:05   0:00 nginx: worker process</code>

<code>root       5683  0.0  0.0 112664   976 pts</code><code>/0</code>    <code>R+   03:05   0:00 </code><code>grep</code> <code>--color=auto nginx</code>

<code>//</code><code>在客戶機測試成功</code>

<code>如上需要注意一個問題:需要釋放80端口,還需要保證客戶機上沒有安裝nginx(包括用yum安裝的)</code>

ansible實戰與配置

     本文轉自我不是瘦子51CTO部落格,原文連結:http://blog.51cto.com/chy940405/1980400,如需轉載請自行聯系原作者

繼續閱讀