ansible自动化运维2: playbook

1,基本使用:一个tasks

官网指南:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html

##1,编写playbook的yaml文件
[root@eadage ansible]# cat t1.yml 
- hosts: docker2
  remote_user: root

  tasks:
    - name: create empty file
      file: name=/a.txt mode=600 owner=docker state=touch
    - name: create noempty file
      copy: content="aa\nbb\ncc" dest=/a2.txt
    - name: install httpd
      yum:  name=httpd state=installed 
    - name: start httpd 
      service: name=httpd state=started
    - name: check httpd
      shell: "ss -nltp |grep :80"



##2,调用playbook     
[root@eadage ansible]# tail -3 /etc/ansible/hosts 
docker  #172.16.98.183 #docker
docker2 ansible_user=docker  ansible_ssh_pass='123456' ansible_sudo_pass='123456' #172.16.98.184 #docker2

[root@eadage ansible]# ansible-playbook -s t1.yml 
[DEPRECATION WARNING]: The sudo command line option has been deprecated in favor of the "become" command line arguments. This feature will be removed in version 2.6. 
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

PLAY [docker2] **************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [docker2]

TASK [create empty file] ****************************************************************************************************************************************************
changed: [docker2]

TASK [create noempty file] **************************************************************************************************************************************************
ok: [docker2]

TASK [install httpd] ********************************************************************************************************************************************************
ok: [docker2]

TASK [start httpd] **********************************************************************************************************************************************************
changed: [docker2]

TASK [check httpd] **********************************************************************************************************************************************************
changed: [docker2]

PLAY RECAP ******************************************************************************************************************************************************************
docker2                    : ok=6    changed=3    unreachable=0    failed=0   

2,ansible扩展1(大任务):多个tasks

[root@eadage ansible]# cat web-db.yml 
- hosts: webservers
  remote_user: root
  tasks:
  - name: install httpd 
    yum:
      name: httpd
      state: latest
  - name: replace httpd config 
    template:
      src: /srv/httpd.j2
      dest: /etc/httpd.conf
    notify: restart httpd
  handlers: 
    - name: restart httpd
      service: name=httpd state=restarted

- hosts: databases
  remote_user: root
  tasks:
  - name: install mysql 
    yum:
      name: mysql-server
      state: latest
  - name: start mysql
    service:
      name: mysqld
      state: started

3,ansible扩展2(大任务的拆分):role, template

a, 配置一个role目录结构: (roles/nginx)

[root@eadage nginx-role]# tree
.
├── nginx.yml
└── roles
    └── nginx                      ##在nginx.yml中配置的名字
        ├── defaults ################配置默认变量值
        │   └── main.yml          
        ├── files				   ##一般文件存在处:安装包,测试文件
        │   ├── index.html
        │   └── nginx-1.6.0.tar.gz
        ├── handlers #################tasks中的任务调动的handlers规则
        │   └── main.yml
        ├── tasks ####################该角色的任务动作
        │   ├── install.yml
        │   └── main.yml
        └── templates			   ##配置文件模板:以.j2结尾
            └── nginx.conf.j2
            
7 directories, 8 files

############1,  nginx.yml 
[root@eadage nginx-role]# cat nginx.yml 
- name: install nginx from src
  hosts: docker2
  remote_user: root
  roles:
    - nginx

############2,  tasks/main.yml 
[root@eadage nginx-role]# cat roles/nginx/tasks/main.yml 
- import_tasks: install.yml

[root@eadage nginx-role]# cat roles/nginx/tasks/install.yml 
- name: add nginx user
  user: name={{ ngx_user }} state=present  system=yes 
- name: install dep-rpms-pcre
  yum:  name=pcre-devel state=installed 
- name: install dep-rpms-openssl
  yum:  name=openssl-devel state=installed 
- name: cp files to dest host
  unarchive:  src={{ ngx_tar_name }} dest=/tmp

- name: ./configure nginx in /tmp/{{ ngx_dir }}
  shell: cd /tmp/{{ ngx_dir }} &&  ./configure --user={{ ngx_user }} --prefix=/usr/local/nginx --with-http_ssl_module
- name: make & make install 
  shell: cd /tmp/{{ ngx_dir }} && make && make install
  
- name: start nginx
  shell: pkill nginx; /usr/local/nginx/sbin/nginx
- name: replace nginx.conf
  template:
    src: "{{ ngx_conf }}"
    dest: /usr/local/nginx/conf/nginx.conf
- name: check nginx syntax
  command: /usr/local/nginx/sbin/nginx -t
  notify: restart nginx

- name: set index.html
  copy: src=index.html dest=/usr/local/nginx/html/
- name: get nginx index.html
  uri:  url=http://localhost:{{ ngx_port }} method="GET"
  tags: get_index
  
############3,  handlers/main.yml 
[root@eadage nginx-role]# cat roles/nginx/handlers/main.yml 
- name: restart nginx
  shell: /usr/local/nginx/sbin/nginx -s reload
  
############4,  defaults/main.yml 
[root@eadage nginx-role]# cat roles/nginx/defaults/main.yml 
ngx_user: nginx
ngx_group: nginx
ngx_tar_name: nginx-1.6.0.tar.gz
ngx_dir: nginx-1.6.0
ngx_conf: nginx.conf.j2
ngx_port: 8080

############5,  templates/nginx.conf.j2 
[root@eadage nginx-role]# cat roles/nginx/templates/nginx.conf.j2 
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       {{ ngx_port }};
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

b, 测试调用该role

[root@eadage nginx-role]# ls
nginx.yml  roles

[root@eadage nginx-role]# ansible-playbook -s  nginx.yml 
[DEPRECATION WARNING]: The sudo command line option has been deprecated in favor of the "become" command line arguments. This feature will be removed in version 2.6. 
Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

PLAY [install nginx from src] ***********************************************************************************************************************************************

TASK [nginx : add nginx user] ***********************************************************************************************************************************************
ok: [docker2]

TASK [nginx : install dep-rpms-pcre] ****************************************************************************************************************************************
ok: [docker2]

TASK [nginx : install dep-rpms-openssl] *************************************************************************************************************************************
ok: [docker2]

TASK [nginx : cp files to dest host] ****************************************************************************************************************************************
ok: [docker2]

TASK [nginx : ./configure nginx in /tmp/nginx-1.6.0] ************************************************************************************************************************
changed: [docker2]

TASK [nginx : make & make install] ******************************************************************************************************************************************
changed: [docker2]

TASK [nginx : start nginx] **************************************************************************************************************************************************
changed: [docker2]

TASK [nginx : replace nginx.conf] *******************************************************************************************************************************************
ok: [docker2]

TASK [nginx : check nginx syntax] *******************************************************************************************************************************************
changed: [docker2]

TASK [nginx : set index.html] ***********************************************************************************************************************************************
ok: [docker2]

TASK [nginx : get nginx index.html] *****************************************************************************************************************************************
ok: [docker2]

RUNNING HANDLER [nginx : restart nginx] *************************************************************************************************************************************
changed: [docker2]

PLAY RECAP ******************************************************************************************************************************************************************
docker2                    : ok=12   changed=5    unreachable=0    failed=0   
发布了276 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/104607314