十三周 playbook的高级用法

1、ansible-playbook实现MySQL的二进制部署

1 ansible服务器配置

1.1 安装ansible

# yum -y install ansible

1.2 配置主机清单文件

# vi /etc/ansible/hosts
[local]
10.0.0.7    ansible_connection=local    #指定连接类型为本地,无需通过ssh连接
[mysql]
10.0.0.17
10.0.0.27
10.0.0.37

1.3 mysql配置文件

# cat /apps/mysql/my.cnf
[mysqld]
user=mysql
datadir=/data/mysql
socket=/data/mysql/mysql.sock
innodb_file_per_table=on    
skip_name_resolve = on      #禁止主机名解析,建议使用

[client]
port=3306
socket=/data/mysql/mysql.sock

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/data/mysql/mysql.pid

2 ssh免密授权

2.1 使用脚本实现

# bash ssh_key.sh 
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:laHw87m60FI35AeBGdv5NhU8PW4Ol77WFPssLZK+LEY root@7-1
The key's randomart image is:
+---[RSA 2048]----+
|      . .+o  ... |
|       oo+ =  oo.|
|        = B   o.o|
|         * + o * |
|        S * = * o|
|       o .E= . +.|
|      o ...  . ++|
|       o .o.o oo=|
|        oo o+o.o |
+----[SHA256]-----+
sshpass-1.06-2.el7.x86_64
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -o 'StrictHostKeyChecking=no' '10.0.0.7'"
and check to make sure that only the key(s) you wanted were added.

ssh: connect to host 10.0.0.3 port 22: Connection refused
lost connection
ssh: connect to host 10.0.0.3 port 22: Connection refused
lost connection
known_hosts                                                  100% 1195   619.5KB/s   00:00    
known_hosts                                                                                                                                                100% 1195     1.1MB/s   00:00    
known_hosts                                                                                                                                                100% 1195   604.3KB/s   00:00    
known_hosts                                                                                                                                                100% 1195     1.8MB/s   00:00    
known_hosts                                                                                                                                                100% 1195     1.6MB/s   00:00    
known_hosts                                                                                                                                                100% 1195     1.5MB/s   00:00    
known_hosts            

2.2 ssh健康性检查

# ansible mysql -m ping 
10.0.0.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.17 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.37 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.27 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"

3 批量安装mysql

# cat install-bin-mysql5.6.yml 
---
# 批量安装二进制mysql5.6
# 将配置文件my.cnf放到目录/apps/mysql下
- hosts: mysql
  remote_user: root
  gather_facts: no

  tasks:
    - name: install packages
      yum : name=libaio,perl-Data-Dumper,autoconf state=installed
    - name: create group mysql
      group:
        name: mysql 
        gid: 306
        system: yes
    - name: create user mysql
      user:
        name: mysql 
        uid: 306 
        group: mysql
        shell: /sbin/nologin 
        system: yes 
        home: /data/mysql
    - name: download mysql_file
      unarchive :
        src: "http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz"
        dest: "/usr/local"
        owner: root
        remote_src: yes 
    - name: prepare Soft links
      shell: ln -s mysql-5.6.51-linux-glibc2.12-x86_64/ mysql
      args: 
        chdir: "/usr/local"
    - name: bash mysql_instll_db
      shell: ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/
      args:
        chdir: "/usr/local/mysql"
    - name: prepare my.cnf
      copy:
        src: "/apps/mysql/my.cnf"
        dest: "/etc/my.cnf"
    - name: prepare service file
      shell: cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld && chkconfig --add mysqld && chkconfig mysqld on
    - name: add path
      shell: echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh && . /etc/profile.d/mysql.sh
    - name: start mysql
      shell: service mysqld start

# ansible-playbook --syntax-check install-bin-mysql5.6.yml  #检查语法
# ansible-playbook install-bin-mysql5.6.yml #运行

PLAY [mysql] ******************************************************************************

TASK [install packages] *******************************************************************
changed: [10.0.0.17]
changed: [10.0.0.37]
changed: [10.0.0.27]

TASK [create group mysql] *****************************************************************
changed: [10.0.0.17]
changed: [10.0.0.27]
changed: [10.0.0.37]

TASK [create user mysql] ******************************************************************
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.27]

TASK [download mysql_file] ****************************************************************
changed: [10.0.0.17]
changed: [10.0.0.27]
changed: [10.0.0.37]

TASK [prepare Soft links] *****************************************************************
[WARNING]: Consider using the file module with state=link rather than running 'ln'.  If
you need to use command because file is insufficient you can add 'warn: false' to this
command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
changed: [10.0.0.27]
changed: [10.0.0.37]
changed: [10.0.0.17]

TASK [bash mysql_instll_db] ***************************************************************
changed: [10.0.0.37]
changed: [10.0.0.27]
changed: [10.0.0.17]

TASK [prepare my.cnf] *********************************************************************
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.27]

TASK [prepare service file] ***************************************************************
changed: [10.0.0.17]
changed: [10.0.0.27]
changed: [10.0.0.37]

TASK [add path] ***************************************************************************
changed: [10.0.0.27]
changed: [10.0.0.17]
changed: [10.0.0.37]

TASK [start mysql] ************************************************************************
[WARNING]: Consider using the service module rather than running 'service'.  If you need
to use command because service is insufficient you can add 'warn: false' to this command
task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.27]

PLAY RECAP ********************************************************************************
10.0.0.17                  : ok=10   changed=10   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.27                  : ok=10   changed=10   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.37                  : ok=10   changed=10   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

2、Ansible playbook实现apache批量部署,并对不同主机提供以各自IP地址为内容的index.html

1 基于 key验证免密授权

1.1 生成keygen

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:6XyhlugUDjs1ntsb4GCu0fPuwBCSEOhrPjU56RJ6xxE root@8-2
The key's randomart image is:
+---[RSA 3072]----+
|+.               |
|o.               |
|+ .              |
| o .E    .       |
|  o *.= S .      |
| + %.O O o .     |
|+ =.@.B B .      |
|.+.+oB + o       |
| .+. o* o.       |
+----[SHA256]-----+

1.2 复制到远程客户端

# ssh-copy-id root@10.0.0.8
# ssh-copy-id root@10.0.0.18
# ssh-copy-id root@10.0.0.17
# ssh-copy-id root@10.0.0.27
# ssh-copy-id root@10.0.0.37

2 ansible服务器配置

2.1 使用yum仓库安装

# yum -y install ansible

2.2 配置主机清单

# vi /etc/ansible/hosts
[local]
10.0.0.7    ansible_connection=local    #指定连接类型为本地,无需通过ssh连接
[webserver]
10.0.0.17
10.0.0.27
10.0.0.37
10.0.0.8
10.0.0.18

2.3 检查服务端到远程主机的健康性

# ansible all -m ping  #显示绿色表示健康
10.0.0.7 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.37 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.8 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.18 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.27 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.0.0.17 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

2.4 准备工作

# cd /apps/httpd
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.51.tar.bz2 --no-check-certificate 
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.bz2  --no-check-certificate
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.bz2 --no-check-certificate
# vi /apps/httpd/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=forking
ExecStart=/apps/httpd/bin/apachectl start
ExecReload=/apps/httpd/bin/apachectl graceful
ExecStop=/apps/httpd/bin/apachectl stop
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now httpd.service

# ls  #最终准备好四个文件
apr-1.7.0.tar.bz2  apr-util-1.6.1.tar.bz2  httpd-2.4.51.tar.bz2  httpd.service

2.5 准备playbook

# cat install_httpd.yml
---
# install httpd
# 需要将相关文件放到如下目录
# tree /apps/httpd/
# apps/httpd/
# ├── apr-1.7.0.tar.bz2
# ├── apr-util-1.6.1.tar.bz2
# ├── httpd-2.4.51.tar.bz2
# └── httpd.service

- hosts: webserver
  remote_user: root
  gather_facts: no
  vars:
    data_dir: /usr/local/src
    base_dir : /apps/httpd
    install_dir: /apps/httpd
    httpd_version: httpd-2.4.51
    apr_version: apr-1.7.0
    apr_util_version: apr-util-1.6.1
    httpd_url: https://mirrors.tuna.tsinghua.edu.cn/apache/httpd
    apr_url: https://mirrors.tuna.tsinghua.edu.cn/apache/apr
  tasks:
    - name : install packages
      yum : name=gcc,make,pcre-devel,openssl-devel,expat-devel,bzip2 state=installed
    - name : download httpd file
      unarchive :
        src: "{{ base_dir }}/{{ httpd_version }}.tar.bz2"
        dest: "{{ data_dir }}"
        owner: root
        copy: yes
    - name : download apr file
      unarchive :
        src: "{{ base_dir }}/{{ apr_version }}.tar.bz2"
        dest: "{{ data_dir }}"
        owner: root 
        copy: yes
    - name : download apr_util file
      unarchive : 
        src: "{{ base_dir }}/{{ apr_util_version }}.tar.bz2"
        dest: "{{ data_dir }}"
        owner: root 
        copy: yes
    - name : prepare apr dir
      shell: mv {{ apr_version }} {{ httpd_version }}/srclib/apr
      args:
        chdir: "{{ data_dir }}"
    - name : prepare apr_util dir
      shell : mv {{ apr_util_version }} {{ httpd_version }}/srclib/apr-util
      args:
        chdir: "{{ data_dir }}"
    - name : build httpd
      shell : ./configure --prefix={{ install_dir }} --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-enablempms-shared=all --with-mpm=prefork && make -j && make install
      args:
        chdir: "{{ data_dir }}/{{ httpd_version }}"
    - name : create group
      group : name=apache gid=80 system=yes
    - name : create user
      user : name=apache uid=80 group=apache shell=/sbin/nologin system=yes create_home=no home={{ install_dir }}/conf/httpd
    - name : set httpd user
      lineinfile : path={{ install_dir }}/conf/httpd.conf regexp='^User' line='User apache'
    - name : set httpd group
      lineinfile : path={{ install_dir }}/conf/httpd.conf regexp='^Group' line='Group apache'
    - name : set variable PATH
      shell : echo PATH={{ install_dir }}/bin:$PATH >> /etc/profile.d/httpd.sh
    - name : copy service file to remote
      copy: 
        src: "{{ base_dir }}/httpd.service"
        dest: /usr/lib/systemd/system/httpd.service
    - name : start service
      service : name=httpd state=started enabled=yes

2.6 批量安装

# ansible-playbook install_httpd.yml
PLAY [webserver] ****************************************************************************************************************************************************************************

TASK [install packages] *********************************************************************************************************************************************************************
changed: [10.0.0.8]
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.27]
changed: [10.0.0.18]

TASK [download httpd file] ******************************************************************************************************************************************************************
changed: [10.0.0.17]
changed: [10.0.0.27]
changed: [10.0.0.37]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [download apr file] ********************************************************************************************************************************************************************
changed: [10.0.0.17]
changed: [10.0.0.37]
changed: [10.0.0.27]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [download apr_util file] ***************************************************************************************************************************************************************
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.27]
changed: [10.0.0.8]
changed: [10.0.0.18]

TASK [prepare apr dir] **********************************************************************************************************************************************************************
changed: [10.0.0.37]
changed: [10.0.0.27]
changed: [10.0.0.17]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [prepare apr_util dir] *****************************************************************************************************************************************************************
changed: [10.0.0.27]
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [build httpd] **************************************************************************************************************************************************************************
changed: [10.0.0.17]
changed: [10.0.0.37]
changed: [10.0.0.27]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [create group] *************************************************************************************************************************************************************************
changed: [10.0.0.27]
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [create user] **************************************************************************************************************************************************************************
changed: [10.0.0.27]
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.8]
changed: [10.0.0.18]

TASK [set httpd user] ***********************************************************************************************************************************************************************
changed: [10.0.0.27]
changed: [10.0.0.17]
changed: [10.0.0.37]
changed: [10.0.0.8]
changed: [10.0.0.18]

TASK [set httpd group] **********************************************************************************************************************************************************************
changed: [10.0.0.37]
changed: [10.0.0.27]
changed: [10.0.0.17]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [set variable PATH] ********************************************************************************************************************************************************************
changed: [10.0.0.17]
changed: [10.0.0.27]
changed: [10.0.0.37]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [copy service file to remote] **********************************************************************************************************************************************************
changed: [10.0.0.27]
changed: [10.0.0.37]
changed: [10.0.0.17]
changed: [10.0.0.18]
changed: [10.0.0.8]

TASK [start service] ************************************************************************************************************************************************************************
changed: [10.0.0.17]
changed: [10.0.0.8]
changed: [10.0.0.18]
changed: [10.0.0.37]
changed: [10.0.0.27]

PLAY RECAP **********************************************************************************************************************************************************************************
10.0.0.17                  : ok=14   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.18                  : ok=14   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.27                  : ok=14   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.37                  : ok=14   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
10.0.0.8                   : ok=14   changed=14   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

2.7 测试

# curl 10.0.0.17
<html><body><h1>It works!</h1></body></html>
# curl 10.0.0.27
<html><body><h1>It works!</h1></body></html>
# curl 10.0.0.37
<html><body><h1>It works!</h1></body></html>
# curl 10.0.0.8
<html><body><h1>It works!</h1></body></html>
# curl 10.0.0.18
<html><body><h1>It works!</h1></body></html>
# 测试完成,批量安装成功

3、http的报文结构和状态码总结

http请求报文

图片1.png

request报文格式
<method> <request-URL> <version>
<headers>
<entity-body>

http响应报文

图片2.png

response报文格式
<version> <status> <reason-phrase>
<headers>
<entity-body>

http协议状态码分类
1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505错误类信息,服务器端错误

http协议常用的状态码
200:成功,请求数据通过响应报文的entity-body部分发送;OK
301:请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently
302:响应报文Location指明资源临时新位置 Moved Temporarily
304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified
307:浏览器内部重定向
401:需要输入账号和密码认证方能访问资源;Unauthorized
403:请求被禁止;Forbidden
404:服务器无法找到客户端请求的资源;Not Found
500:服务器内部错误;Internal Server Error
502:代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
503:服务不可用,临时服务器维护或过载,服务器无法处理请求
504:网关超时

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 1、ansible-playbook实现MySQL的二进制部署 ansible:master1(10.0.0.15...
    johndoewy阅读 242评论 0 0
  • 1、ansible-playbook实现MySQL的二进制部署 环境:centos01:192.168.184.1...
    铛铃叮阅读 212评论 0 0
  • 1、ansible-playbook实现MySQL的二进制部署 2、Ansible playbook实现apach...
    如是我闻_17e6阅读 168评论 0 0
  • day40 playbook 什么是playbook? 把所有操作按照ansible编程语...
    WhatGui_c607阅读 264评论 0 1
  • 1、ansible-playbook实现MySQL的二进制部署 受控主机的基于key登录不在脚本里;受控主机的yu...
    yabao11阅读 200评论 0 0