ansible playbook 基础应用

安装ansible
免密码登陆
初始化主机组
本地host主机名
以上步凑已完成

1.测试主机是否正常
[root@server ~]# ansible client -m ping
192.168.1.103 | success >> {
    "changed": false, 
    "ping": "pong"
}

应用1:yum安装httpd
1.确认httpd是否安装
[root@server ~]# ansible client -a 'rpm -q httpd'
192.168.1.103 | FAILED | rc=1 >>
package httpd is not installed

2.编写yaml文件与httpd的配置文件模板

2.1 httpd.conf
/etc/ansible/
├── hosts
└── site
    └── client
        ├── conf
        │   └── httpd.conf
        └── yaml

2.2 编写yaml文件
2.2.1 编写安装apache yaml文件
install_apache.yaml
---
- hosts: client
  remote_user: root
  tasks:
   - name: ensure apache the last version
     yum: name=httpd state=latest
   - name: ensure apache is running
     service: name=httpd state=started
[root@server yaml]# ansible-playbook install_apache.yaml 

PLAY [client] ***************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [192.168.1.103]

TASK: [ensure apache the last version] **************************************** 
changed: [192.168.1.103]

TASK: [ensure apache is running] ********************************************** 
changed: [192.168.1.103]

PLAY RECAP ******************************************************************** 
192.168.1.103              : ok=3    changed=2    unreachable=0    failed=0

#检查apache是否安装
[root@server yaml]# ansible client -a 'rpm -q httpd'
192.168.1.103 | success | rc=0 >>
httpd-2.2.15-15.el6_2.1.x86_64
#检查apache是否启动
[root@server yaml]# ansible client -a '/etc/init.d/httpd status'
192.168.1.103 | success | rc=0 >>
httpd (pid  3209) is running...
#检查Apache占用端口
[root@server yaml]# ansible client -m shell -a 'netstat -nutlp|grep :80'
192.168.1.103 | success | rc=0 >>
tcp        0      0 :::80                       :::*                        LISTEN      3209/httpd 

2.2.2 编写apache 配置文件模板拷贝
copy_configuration.yaml
---
- hosts: client
  remote_user: root
  tasks:
   - name: copy apache configuration file
     copy: src=/etc/ansible/site/client/conf/httpd.conf dest=/etc/httpd/conf/
     notify:
       - restart apache
  handlers:
   - name: restart apache
     service: name=httpd state=restarted
[root@server yaml]# ansible-playbook copy_configuration.yaml 

PLAY [client] ***************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [192.168.1.103]

TASK: [copy apache configuration file] **************************************** 
changed: [192.168.1.103]

NOTIFIED: [restart apache] **************************************************** 
changed: [192.168.1.103]

PLAY RECAP ******************************************************************** 
192.168.1.103              : ok=3    changed=2    unreachable=0    failed=0 

#检查apache是否启动
[root@server yaml]# ansible client -a '/etc/init.d/httpd status'
192.168.1.103 | success | rc=0 >>
httpd (pid  5385) is running...

#检查apache占用端口
[root@server yaml]# ansible client -m shell -a 'netstat -nutlp|grep :8080'
192.168.1.103 | success | rc=0 >>
tcp        0      0 :::8080                     :::*                        LISTEN      5385/httpd

当然你也可以把安装和配置文件做成一个yaml文件
apache.yaml
---
- hosts: client
  remote_user: root
  tasks:
   - name: ensure apache the last version
     yum: name=httpd state=latest
   - name: copy apache configuration file
     copy: src=/etc/ansible/site/client/conf/httpd.conf dest=/etc/httpd/conf/
     notify:
       - restart apache
   - name: ensure apache is running
     service: name=httpd state=started
  handlers:
   - name: restart apache
     service: name=httpd state=restarted
[root@server yaml]# ansible-playbook apache.yaml 

PLAY [client] ***************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [192.168.1.103]

TASK: [ensure apache the last version] **************************************** 
changed: [192.168.1.103]

TASK: [copy apache configuration file] **************************************** 
changed: [192.168.1.103]

TASK: [ensure apache is running] ********************************************** 
changed: [192.168.1.103]

NOTIFIED: [restart apache] **************************************************** 
changed: [192.168.1.103]

PLAY RECAP ******************************************************************** 
192.168.1.103              : ok=5    changed=4    unreachable=0    failed=0   

[root@server yaml]# ansible client -m shell -a 'netstat -nutlp|grep :8080'
192.168.1.103 | success | rc=0 >>
tcp        0      0 :::8080                     :::*                        LISTEN      5860/httpd


应用2:源码安装nginx
1.确认是否运行nginx
[root@server yaml]# ansible client -m shell -a 'ps -ef|grep nginx|grep -v grep'
192.168.1.103 | FAILED | rc=1 >>

2.确认安装的nginx端口是否占用
[root@server yaml]# ansible client -m shell -a 'netstat -nutlp|grep :8888'
192.168.1.103 | FAILED | rc=1 >>

3.资源准备
nginx源码包、pcre源码包
前提:系统与版本号server端与client端一致
[root@server yaml]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.3 (Santiago)
[root@client1 ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.3 (Santiago)

4.编写yaml文件
---
- hosts: client
  remote_user: root
  tasks:
   - name: copy ngxin resourvce package
     copy: src=/etc/ansible/site/client/resource/nginx-1.6.1.tar.gz dest=/tmp/
   - name: copy pcre resourvce package
     copy: src=/etc/ansible/site/client/resource/pcre-8.36.tar.gz dest=/tmp/
   - name: install nginx
     shell: tar -xf /tmp/nginx-1.6.1.tar.gz -C /tmp/;tar -xf /tmp/pcre-8.36.tar.gz -C /tmp/;cd /tmp/nginx-1.6.1;./configure --prefix=/usr/local/nginx --with-pcre=/tmp/pcre-8.36;make&&make install
   - name: ensure nginx is running
     shell: /usr/local/nginx/sbin/nginx || /bin/true
   - name: copy nginx configuration file
     copy: src=/etc/ansible/site/client/conf/nginx.conf dest=/usr/local/nginx/conf/ backup=yes
     notify:
      - reload nginx
   - name: delete install package
     file: dest=/tmp/nginx-1.6.1.tar.gz  state=absent
   - name: delete install package
     file: dest=/tmp/nginx-1.6.1  state=absent  
   - name: delete install package
     file: dest=/tmp/pcre-8.36.tar.gz  state=absent
   - name: delete install package
     file:  dest=/tmp/pcre-8.36 state=absent
  handlers:
   - name: reload nginx
     shell: /usr/local/nginx/sbin/nginx -s reload || /bin/true

[root@server yaml]# ansible-playbook nginx.yaml 

PLAY [client] ***************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [192.168.1.103]

TASK: [copy ngxin resourvce package] ****************************************** 
changed: [192.168.1.103]

TASK: [copy pcre resourvce package] ******************************************* 
changed: [192.168.1.103]

TASK: [install nginx] ********************************************************* 
changed: [192.168.1.103]

TASK: [ensure nginx is running] *********************************************** 
changed: [192.168.1.103]

TASK: [copy nginx configuration file] ***************************************** 
changed: [192.168.1.103]

NOTIFIED: [reload nginx] ****************************************************** 
changed: [192.168.1.103]

PLAY RECAP ******************************************************************** 
192.168.1.103              : ok=7    changed=6    unreachable=0    failed=0 

[root@server yaml]# ansible client -m shell -a 'netstat -nutlp|grep :8888'
192.168.1.103 | success | rc=0 >>
tcp        0      0 0.0.0.0:8888                0.0.0.0:*                   LISTEN      30613/nginx         

[root@server yaml]# ansible client -m shell -a 'ps -ef|grep nginx|grep -v grep'
192.168.1.103 | success | rc=0 >>
root     30613     1  0 15:50 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody   30671 30613  0 15:50 ?        00:00:00 nginx: worker process


你可能感兴趣的:(ansible playbook 基础应用)