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   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章