天天看点

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,如需转载请自行联系原作者

继续阅读