新闻客户端网站开发,网站做描本好处,网站设计的素材,网络营销课程设计计划书小阿轩yx-案例#xff1a;Ansible剧本文件实践
Playbook 介绍
什么是 playbook
playbook 顾名思义#xff0c;即剧本#xff0c;现实生活中演员按照剧本表演在 ansible 中#xff0c;由被控计算机表演#xff0c;进行安装#xff0c;部署应用#xff0c;提供对外的服…小阿轩yx-案例Ansible剧本文件实践
Playbook 介绍
什么是 playbook
playbook 顾名思义即剧本现实生活中演员按照剧本表演在 ansible 中由被控计算机表演进行安装部署应用提供对外的服务等以及组织计算机处理各种各样的事情。playbook 是 ansible 用于配置部署和管理节点的剧本通过 playbook 的详细描述执行其中的一些列 tasks可以让远端的主机达到预期的状态。playbook 就像 ansible 控制器给被控节点列出的一系列 to-do-list而且被控节点必须要完成。
Ansible play 使用场景
执行一些简单的任务使用 ad-hoc 命令可以方便的解决问题但有时一个设施过于复杂需要大量的操作的时执行的 ad-hoc 命令是不合适的这时候最好使用 playbook。就像执行 shell 命令与写 shell 脚本一样也可以理解为批处理任务不过 playbook 有自己的语法格式使用 playbook 可以方便的重复使用这些代码可以移植到不同的机器上面像函数一样最大化的利用代码。使用 Ansible 的过程中会发现处理的大部分操作都是编写playbook。可以把常见的应用都编写为 playbook之后管理服务器会变得很简单。
Playbook 的组成
由一个或多个 “play” 组成的列表
主要功能
通过将 task 定义好的角色归并为组进行统一管理 也就是通过 Task 调用 Ansible 的模板将多个 “play” 组织在一个 Playbook 中运行 Playbook 本身由下面几部分组成
Tasks任务即调用模块完成的某操作Variables变量Templates模板Handlers处理器某条件满足时触发执行的操作Roles角色。
恢复上一章 Ansible 部署的快照
Playbook 的简单示例
[rootansible-node1 ~]# vi a.yml
---
- hosts: webremote user:roottasks :- name: create useruser:name: zhangsanpassword: {{ aptech | password_hash(sha512) }}state: presenttags:- CCC
...
执行 playbook进行语法检查
[rootansible-node1 ~]# ansible-playbook --syntax-check a.yml
预测试
[rootansible-node1 ~]# ansible-playbook -C a.ym1
列出主机
[rootansible-node1 ~]# ansible-playbook --list-hosts a.yml
列出任务
[rootansible-node1 ~]# ansible-playbook --list-tasks a.yml
列出标签
[rootansible-node1 ~]# ansible-playbook --list-tags a.yml
执行任务
[rootansible-node1 ~]# ansible-playbook a.yml
Hosts 和 Users 介绍
Playbook 的设计目的
为了让某个或某些主机以某个用户身份去执行完成相应的任务。 用于指定要执行指定任务的主机用 hosts 定义可以是一个也可以是由冒号分隔的多个主机组;用于指定被管理主机上执行任务的用户用 remote user 来定义 如示例所示
- hosts: webremote_user: zhangsan
remote_user 也可定义指定用户通过 sudo 的方法在被管理主机上运行指令 甚至可以在使用sudo 时用 sudo user 指定 sudo 切换的用户。
[rootansible-node1 ~]# vim b.yaml
---
- hosts: webremote_user: zhangsantasks:- name: test connectionping:
...
远程连接拷贝
[rootansible-node1 ~]# ssh-copy-id zhangsan192.168.10.102
执行
[rootansible-node1 ~]# ansible-playbook b.yaml
任务列表和 action 介绍
“Play” 的主体是任务列表Tasks list。任务列表中的任务按照次序逐个在 hosts 中指定的所有主机上执行在顺序执行这些任务时如果发生错误会将所有已执行任务回滚。因此需要在更正 Playbook 中的错误后重新执行这些任务。
Task 的任务
按照指定的参数去执行模块。每个 task 使用 name 输出 Playbook 的运行结果一般输出内容为描述该任务执行的步骤。如果没有提供将输出 action 的运行结果。定义 task 的格式可以用 “action:module options” 或 “module:options” 都可其中后者可以实现向后兼容。如果 action 的内容过多可在行首使用空白字符进行换行。
[rootansible-node1 ~]# vi a.yml
---
- hosts: webremote_user: roottasks:- name: create usenuser:name: zhangsanpassword: {{ aptech | password_hash(sha512) }}state: presenttags:
- hosts: dbremote_user: roottasks:- name: copy file to webcopy: src/etc/passwd dest/opttags:- ddd
...
- hosts: db remote_user: root tasks: - name: copy file to web copy: src/etc/passwd dest/opt tags: - ddd
执行
[rootansible-node1 ~]# ansible-playbook a.yml
如果多次执行修改的 Playbook 时涉及到一些没有变化的代码可以使用 tages 让用户选择跳过没有变化代码只运行 Playbook 中发生变化的部分代码。可以在 Paybook 中为某个或某些任务定义 “标签”在执行此 Playbook 时通过 ansible-playbook 命令的 --tags 选项能实现仅运行指定的 tasks 而非所有的 tasks。
Handlers 介绍
Handlers 用于当关注的资源发生变化时所采取的操作。在 notify 中列出的操作便称为 handler也就是 notify 中需要调用 handler 中定义的操作。而 notify 这个动作用于在每个 “play” 的最后被触发仅在所有的变化发生完成后一次性地执行指定操作。
拷贝模板文件为 /etc/foo.conf 文件时重新启动 memcached 和 apache 服务
创建 conf 目录
[rootansible-node1 ~]# mkdir conf
安装 httpd
[rootansible-node1 ~]# yum -y install httpd
拷贝文件到指定目录下
[rootansible-node1 ~]# cp /etc/httpd/conf/httpd.conf conf
修改配置文件
[rootansible-node1 ~]# vim conf/httpd.conf
Listen 8080 //修改端口号
编写配置文件
[rootansible-node1 ~]# vim a.yml
- host: webremote_user: roottasks:- name: install httpd packageyum: namehttpd statelatest- name: install configuration file or httpdcopy: src/root/conf/httpd.conf dest/etc/httpd/conf/httpd.conf- name: start httpd serviceservice: enabledtrue namehttpd statestarted
执行
[rootansible-node1 ~]# ansible-playbook a.yml
登录被管理主机 ansible-node2
[rootansible-node2 ~]# rpm -qa httpd
查看执行结果
[rootansible-node2 ~]# grep Listen /etc/httpd/conf/httpd.conf | grep -v #
查看状态
[rootansible-node2 ~]# systemctl status httpd
设置 handlers
如果配置文件有改动 如Apache 端口号改变则需要定义 notify 和 handlers触发更新相关执行操作。 修改端口号
[rootansible-node1 ~]# vim conf/httpd.conf
Listen 808
编写文件
[rootansible-node1 ~]# vim b.yml
---
- hosts: webremote_user: roottasks:- name: change portcopy: src/root/conf/httpd.conf dest/etc/httpd/conf/httpd.confnotify:- restart httpd serverhandlers:- name: restart httpd serverservice: namehttpd staterestarted
...
执行
[rootansible-node1 ~]# ansible-playbook b.yml
node2 上要关闭 selinux否则同步配置会出错
登录被管理主机 ansible-node2 进行查看
[rootansible-node2 ~]# netstat -anpt | grep httpd
Templates 介绍
Jinja 是基于 Python 的模板引擎。Template 类似 Jinja 的另一个重要组件可以看作是一个编译过的模板文件。用来产生目标文本传递 Python 的变量给模板去替换模板中的标记。
创建 templates 目录
[rootansible-node1 ~]# mkdir templates
拷贝文件到指定目录下
[rootansible-node1 ~]# cp conf/httpd.conf templates/httpd.conf.j2
创建模板文件
[rootansible-node1 ~]# vim templates/httpd.conf.j2
Listen {{ http_port }}
ServerName {{ ansible_fqdn }}
为远程主机添加变量
[rootansible-node1 ~]# vim /etc/ansible/hosts
[web]
192.168.10.102 http_port8888
[db]
192.168.10.103
http_port8888
编写 playbook 文件
[rootansible-node1 ~]# vim apache.yml
- hosts: webremote_user: rootvars:- package: httpd- service: httpdtasks:- name: install httpd packageyum: name{{ package }} statelatest- name: install configuration file for httpdtemplate: src/root/templates/httpd.conf,i2 dest/etc/httpd/conf/httpd.confnotify:- restart httpd- name: start httpd serviceservice: enabledtrue name{{ service }} statestartedhandlers:- name: restart httpdservice: name{{ service }} staterestarted
- restart httpd- name: restart httpd
执行
[rootansible-node1 ~]# ansible-playbook apache.yml
登录被管理主机 ansible-node2 执行查看命令
[rootansible-node2 ~]# grep -i listen /etc/httpd/conf/httpd.conf | grep -v #
[rootansible-node2 ~]# grep -i servername /etc/httpd/conf/httpd.conf | grep -v #
Roles 介绍
什么是 Roles
Ansible 为了层次化、结构化地组织 Playbook使用了角色roles可以根据层次结构自动装载变量文件、tasks 以及 handlers 等。只需要在 Playbook 中使用 include 指令便可使用 roles。 简单来讲 roles 就是分别将变量、文件、任务、模块及处理器设置于单独的目录中便捷地使用它们。 利用 Roles 部署 mariadb
被管理主机配置 yum 源
配置数据库角色
[rootnode1 ~]# mkdir -pv /etc/ansible/roles/mariadb/{files,tasks,handlers}
mkdir: 已创建目录 /etc/ansible/roles/mariadb
mkdir: 已创建目录 /etc/ansible/roles/mariadb/files
mkdir: 已创建目录 /etc/ansible/roles/mariadb/tasks
mkdir: 已创建目录 /etc/ansible/roles/mariadb/handlers
进入 tasks 目录
[rootnode1 ~]# cd /etc/ansible/roles/mariadb/tasks/
编写主文件
[rootnodel tasks]# vi main.yml
---
- name: install mariadbyum: namemariadb-server statepresent
- name: install MySOL-pythonyum: nameMySOL-python statepresent
- name: move config mariadbshell: [ -e /etc/my.cnf ] mv /etc/my.cnf /etc/my.cnf.bak
- name: provide a new config filecopy: srcmy.cnf dest/etc/my.cnf
- name: reload mariadbshell: systemctl restart mariadb
- name: create database testdbshell: mysql -u roote -e create database testdb;grant all on testdb.* to test192.168.10.% identified by test123;flush privileges;notify:- restart mariadb
...
切换至 handlers 目录
[rootnode1 tasks]# cd /etc/ansible/roles/mariadb/handlers
编写触发器文件
[rootlocalhost handlers]# vi main.yml
---
- name:restart mariadbservice: namemariadb staterestarted
...
切换至 files 目录
[rootnodel tasks]# cd /etc/ansible/roles/mariadb/files
查看
[rootnode1 files]# ls
my.cnf ##将编辑好的 my.cnf 文件拷贝在此处
切换至 ansible 目录
[rootnode1 files]# cd /etc/ansible
编写角色文件
[rootnodel ansible]# vi mariadb.yml
---
- hosts: dbremote_user: rootroles:- mariadb
...
测试角色文件
[rootnodel ansible]# ansible-playbook --syntax-check mariadb.yml
执行 yml 文件
[rootnodel ansible]# ansible-playbook mariadb.yml
检查远程服务器上数据库
查看数据库信息看看有没有创建制定的数据库
利用 Ansible 管理数据库
用 ansible 查看数据库
[rootlocalhost ~]# ansible db -m shell -a mysql -u root -e show databases;
192.168.10.103 | SUCCESS Database
information_schema
mysql
performance_schema
test
testdb
创建账户并授权
[rootlocalhost ~]# ansible db -m yum -a nameMySQL-python statepresent
[rootlocalhost ~]# ansible db -m mysql_user -a namezhangsan passwordpwd123 host192.168.10.% priv*.*:ALL
[rootlocalhost ~]# ansible db -m mysql_user -a namelisi passwordpwd123 priv*.*:ALL
张三能够远程登录但李四不能要想使用 mysql_user 模块需要在客户端安装MySQL-python安装时注意大小写
为老用户授权语法和创建用户并授权的语法是相同的
[rootlocalhost ~]# ansible db -m mysql_user -a nameroot passwordpwd123 host192.168.10.% priv*.*:ALL 小阿轩yx-案例Ansible剧本文件实践