Ansible Playbook使用

实践操作

目录结构

建立playbooks目录的结构:

cd /data/ansible/
mkdir -p somebook/{group_vars,host_vars,roles}
touch somebook/{P_hosts,site.yml,websrvs.yml,appsrvs.yml}
tree -C --dirsfirst somebook/

添加主机

vim somebook/P_hosts
# file: P_hosts
# All host in here.
[hz-srvs]
fm_dev1

[sh-srvs]
fm_dev2

# appsrvs in all geos
[appsrvs:children]
hz-srvs
sh-srvs

# websrvs in all geos
[websrvs:children]
hz-srvs
sh-srvs

 

主机/组 变量

所有主机都适用的变量:

vim somebook/group_vars/all
---
# file group_vars/all
ansible_ssh_port: 22
ansible_ssh_user: root
ansible_ssh_private_key_file: /data/ansible/.ssh/id_rsa

设置appsrvs组变量:

vim somebook/group_vars/appsrvs
---
# file: group_vars/appsrvs
JAVA_HOME: /usr/local/jdk1.8.0_121

设置websrvs组变量:

vim somebook/group_vars/websrvs
---
# file: group_vars/websrvs
nginx: /data/nginx
pidfile: /data/nginx/logs/nginx.pid

 

Playbook

剧本主文件:

vim somebook/site.yml
---
# file: site.yml
- import_playbook: appsrvs.yml
- import_playbook: websrvs.yml

剧本副文件1:

vim somebook/appsrvs.yml
---
# file: appsrvs.yml
- hosts: appsrvs
  roles:
    - common
    - tomcat_spider

剧本副文件2:

vim somebook/websrvs.yml
---
# file: websrvs.yml
- hosts: websrvs
  roles:
    - common
    - nginx_check

 

角色&处理程序

创建目录:

mkdir -p somebook/roles/{common,tomcat_spider,nginx_check}/{tasks,handlers,vars} 
touch somebook/roles/{common,tomcat_spider,nginx_check}/{tasks,handlers,vars}/main.yml
tree -C --dirsfirst somebook/roles/

角色roles/common任务配置:

vim somebook/roles/common/tasks/main.yml
---
# file: roles/common/tasks/main.yml
- name: be sure ntpdate installed
  yum:
    name: ntpdate
    state: installed
  tags: ntpdate

- name: syncing ntpdate
  command: ntpdate cn.pool.ntp.org
  tags: ntpdate

角色roles/tomcat_spider任务配置:

vim somebook/roles/tomcat_spider/tasks/main.yml
---
# file: roles/tomcat_spider/tasks/main.yml
- name: kill tomcat_spider old process
  shell: ps -ef | grep tomcat_spider/bin | grep -v grep | awk '{print $2}' | xargs kill -9
  args:
    executable: /bin/bash
  register: result
  ignore_errors: True

- name: start tomcat_spider
  shell: JAVA_HOME={{JAVA_HOME}} && nohup ../bin/startup.sh
  args:
    executable: /bin/bash
    chdir: /data/tomcat_spider/webapps/

- command: /bin/true
  when: result is succeeded
  notify:
    - tomcat restarted
- command: /bin/true
  when: result is failed
  notify:
    - tomcat started

角色roles/tomcat_spider的处理程序:

vim somebook/roles/tomcat_spider/handlers/main.yml
---
# file: roles/tomcat_spider/handlers/main.yml
- name: tomcat restarted
  debug:
    msg: tomcat_spider has been restarted
- name: tomcat started
  debug:
    msg: tomcat_spider has been started

角色roles/nginx_check任务配置:

vim somebook/roles/nginx_check/tasks/main.yml
---
# file: roles/nginx_check/tasks/main.yml
- name: be sure nginx is started and enabled
  systemd:
    name: nginx
    state: started
    enabled: yes

 

运行

声明Ansible的配置文件:

export ANSIBLE_CONFIG=/data/ansible/etc/ansible.cfg

检查主机连接

检查所有主机连接:

ansible -i somebook/P_hosts all -m ping

检查websrvs组的成员主机连接状态:

ansible -i somebook/P_hosts websrvs -m ping

执行临时任务

复制文件:

echo 123 > somefile
ansible -i somebook/P_hosts all -m copy -a "src=somefile dest=/home/somefile owner=ngx"

查看:

ansible -i somebook/P_hosts all -a "ls -l /home/somefile"
ansible -i somebook/P_hosts all -a "cat /home/somefile"

执行Playbook

查看整个playbook影响主机:

ansible-playbook -i somebook/P_hosts somebook/site.yml --list-hosts

查看限定运行组的playbook影响主机:

ansible-playbook -i somebook/P_hosts somebook/appsrvs.yml --list-hosts

执行整个playbook:

ansible-playbook -i somebook/P_hosts somebook/site.yml

执行单个特定playbook:

ansible-playbook -i somebook/P_hosts somebook/appsrvs.yml

这是个简单的示例,Ansible还可以联合Jenkins整合,通过Jenkins提供参数,来实现复数机器上程序的更新和回滚。

发表评论

error: Content is protected !!