文章目錄
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