首页 > 其他分享 >ansible实战-2023

ansible实战-2023

时间:2023-06-04 12:44:08浏览次数:30  
标签:实战 httpd name roles handlers ansible 2023 yml

环境信息:
cat /etc/ansible/hosts
[webserver]
192.168.31.18 ansible_ssh_user=root ansible_ssh_pass=123456 http_port=815 testvar=31.18 mysql_port=3309
[dbserver]
192.168.31.19 ansible_ssh_user=root ansible_ssh_pass=123456 http_port=816 testvar=31.19 mysql_port=3310

变量的使用
- hosts: all #指定所有主机
  remote_user: root #指定远程账户
  tasks: #定义任务
    - name: copy file #任务名
      copy: content="{{ansible_date_time}}\n {{testvar}}\n" dest=/tmp/var.ansible #引用copy模块,将content内容覆盖写入到远程文件里,\n表示内容换行
###然后执行ansible-playbook var.yml

安装httpd
- hosts: all  #指定主机
  remote_user: root #指定远程账号
  vars:  #定义变量,方便下面引用,在hosts清单里也可以定义全局变量
    package: httpd   #定义package变量
    service: httpd   #定义service变量
  tasks:  #定义任务
    - name: install httpd package  #任务名
      yum: name={{package}} state=latest   #引用yum模块,name指定安装的软件包 state指定软件版本,latest为最新
    - name: install configuration file for httpd  #任务名
      copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf  #copy模块 src为本地源文件路径,dest为远程服务器目标路径
      notify:   #关注本任务是否有变更 changed,有的话触发handlers,handlers名为restart httpd
      - restart httpd #触发的handlers
    - name: start httpd service  #任务名
      service: enabled=true name={{service}} state=started #service模块,enabled设置开机是否启动 name指定服务名 state指定服务状态
  handlers:  #配合notify执行动作
  - name: restart httpd #handlers名
    service: name=httpd state=restarted #动作,启动service服务管理模块 name指定服务名 state指定服务状态
###然后执行:ansible-playbook httpd.yml

数组item的运用
- hosts: all     #指定主机
  remote_user: root #指定远程账号
  vars:  #定义变量
    username: user10 #变量
  tasks:  #定义任务
    - name: create {{username}} user  #任务名
      user: name={{username}}  #使用user模块创建用户
      when: ansible_fqdn == "node2"  #when,当fact变量 ansible_fqdn == "node2"时执行此任务,fact变量是内置的,通过setup模块获得
    - name: add several users #任务名
      user: name={{item}} state=present groups=wheel #使用user模块创建用户,item为内置数组变量,遍历item里面的元素
      with_items: #item为内置的数组变量,下面两个元数testuser1,testuser2都遍历
        - testuser1 #item元数
        - testuser2 #item元数
###然后执行 ansible-playbook cond.yml

template模板应用
- hosts: all #指定host里面所有主机
  remote_user: root #远程账号
  vars: #定义变量
    package: httpd #变量
    service: httpd #变量
  tasks: #定义任务
    - name: install httpd package #任务名 -表示列表
      yum: name={{package}} state=latest #yum模块,name指定安装包名,state指定软件包版本
    - name: install configuration file for httpd #任务名
      template: src=/root/ansible/template/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf #引用template本地模板,直接复制到远程服务器,文件里{{http_port}}为/etc/ansible/hosts里指定的变量,{{ansible_fqdn}}为fact内置变量
      notify: # #关注本任务是否有变更 changed,有的话触发handlers,handlers名为restart httpd
        - restart httpd #指定handlers名
    - name: start httpd service #任务名
      service: enabled=true name={{service}} state=started # service服务管理模块,enabled定义开机启动,name指定服务名,state定制服务状态
  handlers: #触发任务,需要notify触发
    - name: restart httpd #handler触发名
      service: name=httpd state=restarted #触发动作,service服务管理模块,name指定服务名,state指定服务状态
###然后执行ansible-playbook httpd2.yml

tags标签任务的运用
- hosts: all
  remote_user: root
  vars:
    package: httpd
    service: httpd
  tasks:
    - name: install httpd package
      yum: name={{package}} state=latest
    - name: install configuration file for httpd
      template: src=/root/ansible/template/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      tags:     #打上标签,可以指定或忽略此标签任务执行
        - conf
      notify:
        - restart httpd
    - name: start httpd service
      service: enabled=true name={{service}} state=started
      tags:
        - always #此标签任务表示怎么样都运行
  handlers:
    - name: restart httpd
      service: name=httpd state=restarted
###然后执行ansible-playbook  /root/httpd3.yml --tags=conf 指定此标签任务运行
###执行ansible-playbook  /root/httpd3.yml --skip-tags=conf 忽略此标签任务运行

ignore_errors的用法
- hosts: webserver #指定webserver主机组
  remote_user: root #指定远程账户
  tasks: #定义任务
    - name: create nginx group #任务名
      group: name=testgroup gid=515 system=yes #group模块创建组,name指定组名,gid指定组id,system指定系统组
    - name: create nginx user #任务名
      user: name=testgroup uid=515 group=testgroup system=yes #user创建用户模块,name指定用户,uid指定用户id
- hosts: dbserver #指定dbserver主机组
  remote_user: root #指定远程用户
  tasks: #定义任务
    - name: copy file to dbserver #任务名
      copy: src=/etc/inittab dest=/tmp/inittab.ansible #copy模块,src指定本地源文件路径,dest指定远程主机路径
      ignore_errors: True #忽略任务执行报错,继续往下执行
###然后执行ansible-playbook nginx.yml

roles的使用
ansible自1.2版本引入了新特性,用于层次性、结构化地组织playbook,roles能够根据层次型结构自动装载变量文件、tasks
以及handlers等。要使用roles只需要在playbook中使用include指令即可。
简单来讲,roles就是通过分别将变量、文件、任务、模块以及处理器放置于单独的目录中,并可以便捷地include它们的
一种机制。roles一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等的场景中。
一个roles的案例如下所示:
   site.yml   #主接口文件 即ansible-playbook site.yml
   webserver.yml #子yml文件
   fooserver.yml #子yml文件
   roles/     #roles文件目录
      common/  #通行角色
        files/
        templates/
        tasks/
        handlers/
        vars/
        meta/
      webserver/  #服务器角色
        files/
        templates/
        tasks/
        handlers/
        vars/
        meta/

创建roles的步骤
(1)创建以roles命名的目录;
(2)在roles目录中分别创建以各角色名称命名的目录,如webservers等;
(3)在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以
创建为空目录,也可以不创建。
(4)在plabook文件中,调用各角色,一般为site.yml

roles内各目录中可用的文件
tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表:此文件可以使用include包含其他的位于此目录中的task文件;
files目录:存放由copy或script等模块调用的文件。
templates目录:template模块会自动在此目录中寻找jinjia2模板文件。
handlers目录:此目录中应当包含一个main.yml文件,用于定义此角色用到的各handlers,在handler中使用include包含的其他的handler文件也应该位于此目录中。
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量。
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系:ansible 1.3版本以后才支持。
default目录:应当包含一个main.yml文件,为当前角色设定默认变量时使用此目录。


ansible_playbooks/
1,目录名同角色名
2,目录结构有固定格式
  files:直接复制的静态文件
  templates: 模板文件 或jinjia2
  tasks:至少有main.yml文件,定义各tasks
  hanlder:至少有一个main.yml文件,定义各handlers
  vars:至少有一个main.yml文件,定义变量
  meta:定义依赖关系等信息
3,site.yml 定义 playbook
4,执行命令 ansible-playbook site.yml
实例:

├── roles

│   ├── dbserver 主机角色,同主机分组名

│   │   ├── files  #直接引用files目录路径

│   │   │   └── my.cnf  #直接复制的静态文件

│   │   ├── handlers #至少一个handlers目录

│   │   │   └── main.yml 至少有一个main.yml文件,定义各handlers

│   │   ├── meta #定义依赖关系等信息

│   │   ├── tasks #至少一个tasks目录

│   │   │   └── main.yml #至少有一个main.yml文件,定义各tasks

│   │   ├── templates #存放模板文件,或jinjia2文件

│   │   └── vars #存放变量的文件

│   └── webserver

│       ├── files

│       │   └── httpd.conf

│       ├── handlers

│       │   └── main.yml

│       ├── meta

│       ├── tasks

│       │   └── main.yml

│       ├── templates

│       └── vars

│           

└── site.yml  #执行的playbook文件

实际操作:
mkdir -pv ansible_playbooks/roles/{webserver,dbserver}/{tasks,files,templates,meta,handlers,vars}
[root@node1 ~]# tree ansible_playbooks/
ansible_playbooks/
└── roles
    ├── dbserver #主机角色,同主机分组名
    │   ├── files #直接引用files目录里的静态文件,静态文件里不能传变量,存放由copy或script等模块调用的文件。
    │   ├── handlers #至少一个handlers目录,里面至少有一个main.yml文件,定义各handlers。
    │   ├── meta #应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系:ansible 1.3版本以后才支持。
    │   ├── tasks #至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表:此文件可以使用include包含其他的位于此目录中的task文件;
    │   ├── templates #template模块会自动在此目录中寻找jinjia2等包括其他格式的模板文件。
    │   └── vars #应当包含一个main.yml文件,用于定义此角色用到的变量。
    └── webserver
        ├── files
        ├── handlers
        ├── meta
        ├── tasks
        ├── templates
        └── vars
cd ansible_playbooks/roles/webserver/;cp /etc/httpd/conf/httpd.conf files/

vim tasks/main.yml #定义角色所有的任务
- name: install httpd package  #任务名
  yum: name=httpd #调用yum模块,name指定要安装的软件包
- name: install configuration file #任务名
  copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf  #复制files目录下的 httpd.conf,files里的静态文件不能传/etc/ansible/hosts里的变量
  tags: #指定任务tags,可以--tags=conf指定此标签任务跑
  - conf #标签名
  notify:  #观察此任务是否有changed,如果有就会触发handlers
  - restart httpd  #notify名,同handlers名
- name: start httpd #任务名
  service: name=httpd state=started #调用service服务管理模块,name指定服务名,state指定服务状态

vim handlers/main.yml 
- name: restart httpd  #handlers名
  service: name=httpd state=restarted #调用service模块,name指定服务名,state指定服务状态

调用角色:
vim ansible_playbooks/site.yml
- hosts: webserver #指定远程主机或/etc/ansible/hosts里主机组
  remote_user: root #远程账号
  roles: #指定调用哪些角色
  - webserver   #指定调用哪个角色

启动:ansible-playbook site.yml
###简单的roles实例已完成###
###新增roles###

vim ansible_playbooks/site.yml
- hosts: 192.168.31.18
  remote_user: root
  roles:
  - webserver   #指定调用哪个角色
- hosts: 192.168.31.19
  remote_user: root
  roles:
  - webserver #调用两个roles
  - dbserver
 
安装mariadb,获取my.cnf配置文件
yum install mariadb-server -y

cd roles/dbserver/;cp /etc/my.cnf files/

vim tasks/main.yml
- name: install mariadb-server package
  yum: name=mariadb-server state=latest
- name: install configuration file
  copy: src=my.cnf dest=/etc/my.cnf #复制files目录下的 my.conf,拷贝files里的静态文件不能传/etc/ansible/hosts里的变量
  tags:
  - myconf
  notify:
  - restart mariadb
- name: start mariadb service
  service: name=mariadb enabled=true state=started

vim handlers/main.yml 
- name: restart mariadb
  service: name=mariadb state=restarted

启动验证:cd /root/ansible_playbooks/;ansible-playbook site.yml

###template模板文件引用###
cd ansible_playbooks/roles/webserver/;cp /etc/httpd/conf/httpd.conf templates/
vim tasks/main.yml #定义角色所有的任务
- name: install httpd package
  yum: name=httpd
- name: install configuration file
  template: src=httpd.conf dest=/etc/httpd/conf/httpd.conf  #复制templates目录下的httpd.conf,templates目录里的模板文件可以传/etc/ansible/hosts里的变量
  tags:
  - conf
  notify:
  - restart httpd
- name: start httpd
  service: name=httpd state=started
vim handlers/main.yml
- name: restart httpd
  service: name=httpd state=restarted

cd roles/dbserver/;cp /etc/my.cnf templates/
vim tasks/main.yml
- name: install mariadb-server package
  yum: name=mariadb-server state=latest
- name: install configuration file
  template: src=my.cnf dest=/etc/my.cnf #复制templates目录下的my.conf,templates目录里的模板文件可以传/etc/ansible/hosts里的变量
  tags:
  - myconf
  notify:
  - restart mariadb
- name: start mariadb service
  service: name=mariadb enabled=true state=started

vim handlers/main.yml 
- name: restart mariadb
  service: name=mariadb state=restarted
启动验证:cd /root/ansible_playbooks/;ansible-playbook site.yml


1,在site.yml这种playbook文件中还可以这样用roles
- hosts: 192.168.31.18
roles:
- webserver

2,也可以向roles传递参数,例如,传递参数暂时还不清楚怎么用
- hosts: all
  roles:
  - { role: webserver, dir: '/opt/a',port: 800 }
  - { role: dbserver, dir: '/var/data',port: 3307 }
实例:site.yml
- hosts: 192.168.31.18
  remote_user: root
  roles:
  - webserver   #指定调用哪个角色
- hosts: all
  remote_user: root
  roles:
  - { role: dbserver, when: "ansible_fqdn == 'node1'"}
  - { role: webserver, dir: '/opt/a', port: 800 }
  - { role: dbserver, dir: '/var/data', port: 3307 }


3,也可以条件式地使用roles,例如:
- hosts: 192.168.31.19
  roles:
  - { role: dbserver, when: "ansible_fqdn == 'node1'"}
实例: site.yml
- hosts: all
  remote_user: root
  roles:
  - { role: dbserver, when: "ansible_fqdn == 'node1'"}

 

标签:实战,httpd,name,roles,handlers,ansible,2023,yml
From: https://www.cnblogs.com/leiwenbin627/p/17455529.html

相关文章

  • 2023.5 codeforces 杂题选做
    2023.5codeforces杂题选做E.Location\(n\le5\times10^4\)的范围,并且区间赋值、区间维护最值,可以考虑分块。然后对于散块的修改可以直接暴力,对于整块,由于\(b_i\)值不变,\(a_i\)值只有一个,思考如何快速求。由于\(\dfrac{\operatorname{lcm}(a_i,b_i)}{\gcd(a_i,b_i)}=\d......
  • openmmlab实战营二期-mmpose代码课(三)
    openmmlab实战营二期-mmpose代码课(三)点我:视频地址由于代码课涉及笔记较少,多数为代码实战,简单总结代码课涉及的内容:主要分环境配置、训练和预测rtmdet模型、训练和预测rtmpose模型,细分见下:1、环境配置:1)安装pytroch2)安装openmim、mmengine、mmcv、mmdet3)安装其他库(如cv2......
  • openmmlab实战营二期-开营仪式(零)
    openmmlab实战营二期-开营仪式(零)点我:视频地址主页:https://www.cnblogs.com/xielaoban/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利......
  • openmmlab实战营二期-mmpose理论课(二)
    openmmlab实战营二期-mmpose理论课(二)目录openmmlab实战营二期-mmpose理论课(二)标题2标题2标题2标题2注:标题2xxxxxxxxx标题2xxxxxxxxx标题2xxxxxxxxx标题2xxxxxxxxx注:主页:https://www.cnblogs.com/xielaoban/本文版权归作者和博客园共有,欢迎转载,但未经......
  • 2022-2023 java高级面试总结
    1.Java内存模型是什么?JMM即Java内存模型(Javamemorymodel),在JSR133里指出了JMM是用来定义一个一致的、跨平台的内存模型,是缓存一致性协议,用来定义数据读写的规则。Java内存模型规范java如何按需禁用缓存和编译优化的方法。2.mysql查询第一万条数据后20条数据,sql语句如何写?sel......
  • 2022-2023-java大厂面试真题
    【美团】面试真题: 1、SPRINGAOP底层原理 一、AOP概念: AOP(AspectOrientedProgramming),即面向切面编程,可以说是OOP(ObjectOrientedProgramming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发......
  • 论文感谢 2023年3月21日,作于余杭塘河右岸杭州师范大学 信息学院网络空间安全专业应届
    致谢春天已经过去,夏天将要到来,今夜下了很大的雨,青蛙聒噪的叫个不停。我合上论文草稿,打开窗户回忆过去。三年过去了,我却没有很大的成就;一千个日夜的追寻,却也渐渐领悟了科研的真谛。过去种种焦虑焦灼都让我眉头紧锁,所有的开心快乐也都浮上心头。回忆浮现眼前,就像昨天发生的一样,此时......
  • 《CentOS 7.5系统管理与运维实战》pdf电子书免费下载
    本书从实际应用出发,以CentOS 7.5作为操作系统基础,介绍目前企业中常用的软件平台架设和管理方法,通过运维的视角来介绍运维的基础知识和软件平台的常见搭建思路。本书共14章,分为3个知识区块。涵盖的主要内容有:以CentOS7.5特性和安装、运维基础、网络配置与结构为第1个知识区块的......
  • Tengine 入门实战(2)--简单使用
    本文主要介绍Tengine的主动式后端服务器健康检查的扩展功能,其他的扩展功能可参考官网文档:http://tengine.taobao.org/;文中所使用到的软件版本:Centos7.9.2009、Tengine2.3.3。1、相关指令1.1、checkSyntax:checkinterval=milliseconds[fall=count][rise=count][timeou......
  • 2023年AMC8真题试卷分析,近年AMC8考点分布总结
     AMC8考点  AMC8的考点与7、8年级数学大纲相对应,包括(但不局限于)整数、分数、小数、百分数、比例、数论、日常的几何、面积、体积、概率及统计、逻辑推理等。 计算部分:大多有实际应用背景,类似应用题,涉及分数、百分数、小数计算,但是复杂程度较低。考察学生的计算能力,在算......