新建网站怎么做优化,网站推广办法,互联网网站开发用哪个语言开发,网站关键词 提醒Playbook 特点 playbook 剧本是由一个或多个play组成的列表play的主要功能在于将预定义的一组主机#xff0c;装扮成事先通过ansible中的task定义好的任务角色。Task实际是调用ansible的一个module#xff0c;将多个play组织在一个playbook中#xff0c;即可以让… Playbook 特点 playbook 剧本是由一个或多个play组成的列表play的主要功能在于将预定义的一组主机装扮成事先通过ansible中的task定义好的任务角色。Task实际是调用ansible的一个module将多个play组织在一个playbook中即可以让它们联合起来按事先编排的机制执行预定义的动作Playbook 文件是采用YAML语言编写的 二、 YAML 语言介绍 YAMLYAML Aint Markup Language即YAML不是标记语言。主要用来配置大小写敏感不支持tab 是一个可读性高的用来表达资料序列的格式。 YAML 语言特性 YAML的可读性好YAML和脚本语言的交互性好YAML使用实现语言的数据类型YAML有一个一致的信息模型YAML易于实现YAML可以基于流来处理YAML表达能力强扩展性好 YAML 语法简介 在单一文件第一行用连续三个连字号- 开始还有选择性的连续三个点号( ... )用来表示文件的结尾次行开始正常写Playbook的内容一般建议写明该Playbook的功能使用#号注释代码缩进必须是统一的不能空格和tab混用缩进的级别也必须是一致的同样的缩进代表同样的级别程序判别配置的级别是通过缩进结合换行来实现的YAML文件内容是区别大小写的key/value的值均需大小写敏感多个key/value可同行写也可换行写同行使用分隔key后面冒号要加一个空格 比如: key: valuevalue可是个字符串也可是另一个列表YAML文件扩展名通常为yml或yaml 支持的数据类型 标量单个的、不可再分的值对象键值对的集合又称为映射mapping/ 哈希hashes / 字典dictionary数组一组按次序排列的值又称为序列sequence / 列表list 三、 Playbook 核心组件 一个playbook 中由多个组件组成其中所用到的常见组件类型如下: Hosts 执行的远程主机列表Tasks 任务集由多个task的元素组成的列表实现每个task是一个字典一个完整的代码块功能需最少元素需包括 name 和 task一个name只能包括一个taskVariables 内置变量或自定义变量在playbook中调用Templates 模板可替换模板文件中的变量并实现一些简单逻辑的文件Handlers 和 notify 结合使用由特定条件触发的操作满足条件方才执行否则不执行tags 标签 指定某条任务执行用于选择运行playbook中的部分代码。ansible具有幂等性因此会自动跳过没有变化的部分即便如此有些代码为测试其确实没有发生变化的时间依然会非常地长。此时如果确信其没有变化就可以通过tags跳过此些代码片段 1. host 组件 Hosts playbook 中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。 hosts用于指定要执行指定任务的主机须事先定义在主机清单中。 2. remote_user 组件 remote_user: 可用于Host和task中。也可以指定其通过sudo的方式在远程主机上执行任务可用于play全局或某任务此外甚至可以在sudo时使用sudo_user指定sudo时切换的用户。 3. task列表和action组件 play的主体部分是task listtask list中有一个或多个task,各个task 按次序逐个在hosts中指定的所有主机上执行即在所有主机上完成第一个task后再开始第二个task。 task的目的是使用指定的参数执行模块而在模块参数中可以使用变量。模块执行是幂等的这意味着多次执行是安全的因为其结果均一致每个task都应该有其name用于playbook的执行结果输出建议其内容能清晰地描述任务执行步骤。 如果未提供name则action的结果将用于输出。 4. Handlers notify 组件 Handlers本质是task list 类似于MySQL中的触发器触发的行为其中的task与前述的task并没有本质上的不同主要用于当关注的资源发生变化时才会采取一定的操作。而Notify对应的action可用于在每个play的最后被触发这样可避免多次有改变发生时每次都执行指定的操作仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作称为handler也即notify中调用handler中定义的操作 注意: 如果多个task通知了相同的handlers 此handlers仅会在所有tasks结束后运行一次。只有notify对应的task发生改变了才会通知handlers 没有改变则不会触发handlershandlers 是在所有前面的tasks都成功执行才会执行如果前面任何一个task失败会导致handler跳过执行可以使用force_handlers: yes 强制执行handler 5. tags 标签 在playbook文件中可以利用tags组件为特定task指定标签当在执行playbook时可以只执行特定tags的task而非整个playbook文件。 6. ignore_errors 组件 如果一个task出错默认将不会继续执行后续的其它task 利用 ignore_errors: yes 可以忽略此task的错误继续向下执行playbook其它task 7. yml 文件 实操 建议修改vim配置 vim ~/.vimrc set ai //自动对齐 set ts2 //一个tab键等于2个空格 //每次按下Enter键换行时新的行会自动缩进并且缩进将会用2个空格来表示 示例1新建用户 [rootnode1 data]# vim add_user.yml //编写yml文件写法1
---
- hosts: lkkgather_facts: notasks:- name: creat useruser: namecxk uid6666 systemyes 写法2 ---
- hosts: lkkgather_facts: notasks:- name: creat useruser:name: wyfuid: 666system: yes[rootnode1 data]# ansible-playbook --syntax-check add_user.yml //检查语法格式
[rootnode1 data]# ansible-playbook add_user.yml //执行 示例2yum安装httpd并启动 [rootnode1 data]# vim httpd.yml //编写yml文件---
- hosts: lkkgather_facts: notasks:- name: yum httpdyum:name: httpdstate: present- name: stop firewalldservice:name: firewalldstate: stoppedenabled: no- name: start httpdservice:name: httpdstate: started- name: web pagecopy: src/data/index.html dest/var/www/html/[rootnode1 data]# ansible-playbook --syntax-check httpd.yml //检查语法错误
[rootnode1 data]# ansible-playbook httpd.yml //执行[rootnode1 data]# curl 172.16.88.8
7-1
[rootnode1 data]# curl 172.16.88.9
7-1 示例3yum安装nginx并启动 [rootnode1 data]# vim nginx.yml //编写yml文件---
- hosts: lkkgather_facts: notasks:- name: install epelyum: nameepel-release.noarch statepresent- name: install nginxyum: namenginx statepresent- name: stop httpdservice: namehttpd statestopped- name: start nginxservice: namenginx statestarted enabledyes- name: web pagecopy: src/data/index.html dest/usr/share/nginx/html[rootnode1 data]# ansible-playbook --syntax-check nginx.yml //检查语法错误
[rootnode1 data]# ansible-playbook nginx.yml //执行[rootnode1 data]# curl 172.16.88.8
7-1
[rootnode1 data]# curl 172.16.88.9
7-1 示例4编译安装nginx并启动 ---
- hosts: lkkgather_facts: notasks:- name: install packagesyum:name: - gcc- pcre-devel- openssl-devel- zlib-devel- openssl - openssl-develstate: present - name: unarchiveunarchive: src/opt/nginx-1.18.0.tar.gz dest/opt- name: bianyicommand: ./configure --prefix/apps/nginx --usernginx --groupnginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_moduleargs:chdir: /opt/nginx-1.18.0- name: makecommand: makeargs:chdir: /opt/nginx-1.18.0- name: make installcommand: make installargs:chdir: /opt/nginx-1.18.0- name: cpoy servicecopy: src/usr/lib/systemd/system/nginx.service dest/usr/lib/systemd/system/nginx.service- name: reloadcommand: systemctl daemon-reload- name: linkshell: ln -s /apps/nginx/sbin/nginx /usr/bin - name: start nginxservice: namenginx statestarted enabledyes- name: web pagetags: pagecopy: src/data/index.html dest/apps/nginx/html 示例5使用tags标签 [rootnode1 data]# vim nginx.yml //添加tags
---
- hosts: lkkgather_facts: notasks:- name: web pagetags: pagecopy: src/data/index.html dest/apps/nginx/html
[rootnode1 data]# ansible-playbook -t page nginx.yml //仅执行特定tags的task而非整个playbook文件 四、 Playbook 命令 ansible-playbook filename.yml ... [options] 选项 作用 --syntax-check 语法检查可缩写成--syntax相当于bash -n -C --check 模拟执行只检测可能会发生的改变但不真正执行操作dry run --list-hosts 列出运行任务的主机 --list-tags 列出tag标签 --list-tasks 列出task任务列表 --limit 主机列表 只针对主机列表中的特定主机执行例ansible-playbook test.yml --limit 192.168.204.20 -i INVENTORY 指定主机清单文件通常一个项对应一个主机清单文件例ansible-playbook test.yml -i /opt/hosts --start-at-task START_AT_TASK 从指定task开始执行而非从头开始START_AT_TASK为任务的name -v -vv -vvv 显示过程