Ansible Playbook 入门指南
Ansible Playbook
对 ansible 基础完全不了解可以看我的上一篇文章。
Playbook 是用YAML 格式写成。对YAML不了解的可以参见这篇简短的介绍 。
大部分指令不把输出粘在这里,也是希望读者自己边读,边操作。
为便于拷贝操作,命令行提示符$
都将省略。
ansible-playbook使用方法
脚本式
ansible-playbook playbook.yml
---
- hosts: all
tasks:
- name: Install Apache.
command: yum install --quiet -y httpd httpd-devel
- name: Copy configuration files.
command: >
cp httpd.conf /etc/httpd/conf/httpd.conf
- command: >
cp httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf
- name: Start Apache and configure it to run at boot.
command: service httpd start
- command: chkconfig httpd on
命令:command 指令后紧跟的大于号(>)告诉YAML“自动将下一组缩进行引为一个长字符串,每行之间用空格分隔”。在某些情况下,它有助于提高任务的可读性。使用有效的YAML语法有多种描述配置的方法。
上面的playbook 与脚本无异,有助于把你原有的shell脚本的技能进行平滑过渡。
Ad-hoc 式
下面展示更有 ansible 味道的写法。
---
- hosts: all
become: yes
tasks:
- name: Install Apache.
yum: name={{ item }} state=present
with_items:
- httpd
- httpd-devel
- name: Copy configuration files.
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: root
group: root
mode: 0644
with_items:
- src: "httpd.conf"
dest: "/etc/httpd/conf/httpd.conf"
- src: "httpd-vhosts.conf"
dest: "/etc/httpd/conf/httpd-vhosts.conf"
- name: Make sure Apache is started now and at boot.
service: name=httpd state=started enabled=yes
这里become: yes
相当于 --sudo
的作用。state=present
相当没有就安装。可选的 state 还有 latest
- 保持最新,absent
- 有就卸载,started
- 启动等。
运行ansible-playbook时加--check
参数用于核查服务器的状态,不做修改操作(dry-run)。
可以通过 --limit
参数指定范围,如:
ansible-playbook playbook.yml --limit webservers
下面的指令将显示出作用于哪些主机:
ansible-playbook playbook.yml --list-hosts
指定专门用户:
ansible-playbook playbook.yml --remote-user=johndoe
或以另一个用户身份执行(同时在命令行询问密码):
ansible-playbook playbook.yml --become --become-user=janedoe \
--ask-become-pass
其他常用参数:
- --inventory = PATH(-i PATH):定义自定义清单文件(默认为默认的Ansible清单文件,通常位于/etc/ansible/hosts中)。
- --verbose(-v):详细模式(显示所有输出,包括成功选项的输出)。您可以传入-vvvv来提供每分钟的详细信息。
- --extra-vars = VARS(-e VARS):以“键=值,键=值”格式定义要在剧本中使用的变量。
- --forks = NUM(-f NUM):并发数(整数)。将此值设置为大于5的数字可增加Ansible将在其上同时运行任务的服务器的数量。
- --connection = TYPE(-c TYPE):将使用的连接类型(默认为ssh;您有时可能希望使用local在本地计算机上或通过cron在远程服务器上运行剧本)
这里有一些完整的例子,可以在DevOps实践中加以运用。
Ubuntu Server上装 solr
---
hosts: all
vars_files;
- var.yml
pre_tasks:
- name: Update apt cache if needed.
apt: update_cache=yes cache_valid_time=3600
handlers:
- name: restart solr
service: name=solr state=restarted
tasks:
- name: Install Java.
apt: name=openjdk-8-jdk state=present
- name: Download Solr.
get_url:
url: "https://archive.apache.org/dist/lucene/solr/{{ solr_version }}/solr-{{ solr_version }}.tgz"
dest: "{{ download_dir }}/solr-{{ solr_version }}.tgz"
checksum: "{{ solr_checksum }}"
- name: Expand Solr.
unarchive:
src: "{{ download_dir }}/solr-{{ solr_version }}.tgz"
dest: "{{ download_dir }}"
copy: no
creates: "{{ download_dir }}/solr-{{ solr_version }}/README.txt"
- name: Run Solr installation script.
shell: >
{{ download_dir }}/solr-{{ solr_version }}/bin/install_solr_service.sh
{{ download_dir }}/solr-{{ solr_version }}.tgz
-i /opt
-d /var/solr
-u solr
-s solr
-p 8983
creates={{ solr_dir }}/bin/solr
- name: Ensure solr is started and enabled on boot.
service: name=solr state=started enabled=yes
执行:
ansible-playbook solr.yml --limit-hosts solr
顺利的话, 过一会就可以通过浏览器访问8983端口的solr管理界面了。
如有什么问题,可以参考这里的 源代码。
If everything is under control, you are going too slow...
小结
指南就到这里,实践才是关键。祝您好运。
推荐阅读
从原生 JavaScript 到 React
React 是一个用于构建用户界面的 JavaScript 框架。它可用于通过动态操作页面内容来创建 JavaScript 应用程序。浏览器已经提供了在页面中创建元素的 API,即 DOM,所以新手可能想知道 React 带来了什么以及它与 D...
Yujiaao赞 7阅读 3.5k
使用kubeasz部署高可用kubernetes集群
本实验采用kubeasz作为kubernetes环境部署工具,它是一个基于二进制方式部署和利用ansible-playbook实现自动化来快速部署高可用kubernetes集群的工具,详细介绍请查看kubeasz官方。本实验用到的所有虚拟机默认软...
李朝阳赞 4阅读 728
linux中用户登录加载配置文件的过程
shell的类型(站在用户登录登录的角度)登录式shell正常通过某终端登录su - USERNAMEsu -l USERNAME非登录式shellsu USERNAME图形终端下打开命令窗口自动执行的shell脚本用户登录时相关的bash配置文件全局配置文件/...
Dabric阅读 5.3k评论 3
在Linux上查看活跃线程数与连接数
现如今,有两种常见的软件资源几乎成了Java后端程序的标配,即线程池与连接池,但这些池化资源非常的重要,一旦不够用了,就会导致程序阻塞、性能低下,所以有时我们需要看看它们的使用情况,以判断这里是否是瓶颈。
扣钉日记赞 3阅读 990
9个超有用的 Linux Touch 命令实例讲解
touch 命令用于创建空文件,也用于更改 Linux 系统中现有文件的时间戳。这里更改时间戳意味着更新文件和目录的访问和修改时间。命令语法touch {options} {file}语法选项1) 创建一个空文件touch 命令创建一个空文...
鸠摩智首席音效师赞 1阅读 1.7k
C语言获取服务器mac地址
它的信息保存在结构体struct ifconf中,有可能不止一个。获取到的信息保存在ifc_buf中。第二个逻辑就是根据网卡的名字去获取mac地址,主要用下面的函数完成:
禹鼎侯阅读 3.3k
搭建zookeeper集群
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、...
Zeran赞 1阅读 1.4k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。