Asible最佳实践-进阶版-RHCA447 定义分组与变量

news/2024/4/30 10:52:24/文章来源:https://www.cnblogs.com/libin-linux/p/16785893.html

 Asible最佳实践-进阶版-RHCA447 -------定义角组变量/主机变量/变量文件

 

6.1 所有受管节点设置sudo免密

 

 

 

[root@libin libin]# vim /etc/sudoers.d/devops

libin ALL=(ALL) NOPASSWD:ALL

[root@libin sudoers.d]# scp devops 192.168.124.134:`pwd`

 

 

 

6.2 自定义ansible目录

 

[root@libin ansible]# whoami

root

[root@libin ansible]# su - libin

[libin@libin ~]$ mkdir ansible

[libin@libin ~]$ cd ansible/

[libin@libin ansible]$ vim ansible.cfg

[defaults]

inventory = /home/libin/ansible/inventory

remote_user = libin

remote_ask_pass = false

 

[inventory]

enable_plugins = host_list, virtualbox, yaml, constructed, ini          

 

[privilege_escalation]

become=True

become_method=sudo

become_user=root

become_ask_pass=False

 

 

[libin@libin ansible]$ cat /etc/ansible/ansible.cfg | grep privi -A5

:通过找到privi 看它下面的5

 

[libin@libin ansible]$ grep -E ^#en  /etc/ansible/ansible.cfg

#enable_plugins = host_list, virtualbox, yaml, constructed

: 查看inventory默认支持清单的格式

 

6.3自定义inventory清单ini的格式并为分组定义变量

 

[libin@libin ansible]$ pwd

/home/libin/ansible

 

[libin@libin ansible]$ vim inventory

[web]

192.168.124.132

192.168.124.134

 

[db]

libin.com username=libin ourse_info=DO447       #usernam/ourse_infolibin.com定义变量

libin3.com course_day=12                      #course_daylibin3.com 定义变量

 

[alllibin:children]                   #定义子组

web

db

 

[web:vars]                        #web组定义变量

corse_info=DO447

 

 

[libin@libin ansible]$ ansible web -m ping

192.168.124.132 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

192.168.124.134 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

"ping": "pong"

 

[libin@libin ansible]$ ansible db  -m ping

libin.com | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

libin3.com | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

 

 

 

6.4 查看yaml格式的inventory清单

 

[libin@libin ansible]$ ansible-inventory --yaml --list -i inventory

all:

  children:

    alllibin:

      children:

        db:

          hosts:

            libin.com:

              username: libin

            libin3.com:

              course_day: 12

        web:

          hosts:

            192.168.124.132:

              course_info: DO447

            192.168.124.134:

              course_info: DO447

    ungrouped: {}

 

 

 

 

6.5 查看默认清单

 

[libin@libin ansible]$ ansible-inventory --graph

@all:

  |--@alllibin:

  |  |--@db:

  |  |  |--libin.com

  |  |  |--libin3.com

  |  |--@web:

  |  |  |--192.168.124.132

  |  |  |--192.168.124.134

  |--@ungrouped:

 

 

 

6.6 设置编辑yaml格式剧本时敲TAB的跳跃格式

 

[libin@libin ansible]$ vim ~/.vimrc

autocmd FileType yaml setlocal ai ts=2 sw=2 et

 

 

 

6.7 自定义inventory清单yaml的格式并定义受管节点和全局变量

 

course_info: ansible_best_pratic   #为全局变量

 

course_day: 12                 #为全局变量

 

 

 

[libin@libin ansible]$ vim hosts

 

 

 

 

web:

  hosts:

    libin.com:

      username: libin                #libin.com定义变量

    libin3.com:

      course_day: 12                # libin3.com定义变量

db:

  hosts:

    192.168.124.132:

    192.168.124.134:

alllibin:

  children:

    web:

    db:

  vars:

course_info: ansible_best_pratic 

course_day: 12 

 

[libin@libin ansible]$ vim ansible.cfg

inventory = /home/libin/ansible/hosts         #如果使用yaml格式清单hosts

 

[libin@libin ansible]$ vim hosts

[libin@libin ansible]$ ansible-inventory --graph  #查看默认清单

@all:

  |--@alllibin:

  |  |--@db:

  |  |  |--192.168.124.132

  |  |  |--192.168.124.134

  |  |--@web:

  |  |  |--libin.com

  |  |  |--libin3.com

  |--@ungrouped:

 

 

6.8 查看清单

 

-i:可以指定hosts清单,可以定义多个hosts清单名字随意,-i就是默认清单

 

[libin@libin ansible]$ ansible -i hosts  --list-hosts web

  hosts (2):

    libin3.com

    libin.com

[libin@libin ansible]$ ansible -i hosts  --list-hosts db

  hosts (2):

    192.168.124.134

    192.168.124.132

[libin@libin ansible]$ ansible -i hosts  --list-hosts alllibin

  hosts (4):

    libin3.com

    libin.com

    192.168.124.134

    192.168.124.132

 

 

 

6.9 playbook编写格式,使用debug显示我们定义的变量信息

 

name: 名字(随意)

 

hosts: 清单

 

task: 任务

 

为必备的playbook格式

 

实战1:

[libin@libin ansible]$ pwd

/home/libin/ansible

 

 

 

 

[libin@libin ansible]$ vim libin1.yaml

 

 

 

---

- name: test var for libin

  hosts: web                        #我指定web组清单

  tasks:

  - name: debug                     #如果要显示多个debug信息我们需要写2debug

    debug:

      msg: "{{ course_info }}"          #course_info这为全局变量,web组肯定都有

  - name: debug

    debug:

      msg: "{{ course_day }}"          #course_day 这为全局变量,web组肯定都有

 

[libin@libin ansible]$ ansible-playbook libin1.yaml

 

 

 

 

 

实战2:指定inventory清单运行剧本(因为我这里默认清单为hosts)

 

 

 

 

[libin@libin ansible]$ vim libin1-1.yaml

 

 

 

---

- name: test var for libin

  hosts: web

  tasks:

  - name: debug

    debug:

      msg: "{{ course_info }}"

 

[libin@libin ansible]$ ansible-playbook -i inventory libin1-1.yaml

 

 

 

 

 

6.10 将inventory 清单ini格式转化为yaml格式

 

[libin@libin ansible]$ ansible-inventory --yaml --list -i inventory

all:

  children:

    alllibin:

      children:

        db:

          hosts:

            libin.com:

              course_info: DO447

              username: libin

            libin3.com:

              course_day: 12

        web:

          hosts:

            192.168.124.132:

              course_info: DO447

            192.168.124.134:

              course_info: DO447

    ungrouped: {}

 

 

 

6.11 将inventory 清单ini格式转化为yaml格式并输出重命名清单

 

--output :输出

 

[libin@libin ansible]$ ansible-inventory --yaml --list -i inventory --output test1

 

 

 

 

 

 

 

6.12 直接使用转化后的格式清单

 

[libin@libin ansible]$ ansible-playbook -i test1 libin1-1.yaml

 

 

 

 

 

[libin@libin ansible]$ ansible-inventory --graph -i test1

@all:

  |--@alllibin:

  |  |--@db:

  |  |  |--libin.com

  |  |  |--libin3.com

  |  |--@web:

  |  |  |--192.168.124.132

  |  |  |--192.168.124.134

  |--@ungrouped:

 

 

 

6.13 小结

 

1.在资产清单中定义变量(yaml格式)6.7

2.ansible-inventory --yaml --list -i inventory --output test1 #通过ini格式输出转化成yaml并且保存到另外一个制定文件中

3.ansible-inventory --graph #查看默认清单 (我这里默认有进行调整,展示可能不同,读者不要被误解)

4. ansible-inventory --graph -i test1  #查看制定的清单

 

 

 

6.14 定义分组与主机变量

 

[libin@libin ansible]$ mkdir group_vars            #创建变量文件夹,有利于更好分类

[libin@libin ansible]$ mkdir host_vars

[libin@libin ansible]$ vim group_vars/web          #yaml的写法要用冒号:

user_list:                                     #用户列表,定义web组变量

- user1                                       #用户1,也叫第一个元素

- user2                                       #用户2

 

[libin@libin ansible]$ vim group_vars/db            

database_version: mysql

 

[libin@libin ansible]$ vim host_vars/libin.com        #定义主机变量

HOSTNAME: libin.com

 

[libin@libin ansible]$ vim host_vars/libin3.com

HOSTNAME: libin3.com

 

[libin@libin ansible]$ tree group_vars/ host_vars/

group_vars/                                  #分组的写法

├── db                                     #必须要为清单中的分组

└── web

host_vars/                                  #主机的写法,这里不要写hosts否则有问题

├── libin3.com                               #必须要为清单中的主机

└── libin.com

 

0 directories, 4 files

 

实战1:

我这里的默认清单为hosts(里面包括了libin.com)

 

 

 

 

 #指定libin.com运行剧本,会优先调用我定义的组变量和主机变量

[libin@libin ansible]$ cp libin1-1.yaml libin2-1.yaml       

 

 

 

---

- name: test var for libin

  hosts: libin.com                          

  tasks:

  - name: debug

    debug:

      msg: "{{ user_list }} {{ HOSTNAME }}"

 

[libin@libin ansible]$ ansible-playbook libin2-1.yaml

 

 

实战2:

hosts: libin.com                          #我修改为192.168.124.134时与libin3.com变化

192.168.124.134db,而我并没有定义user_list变量;libin3.comweb,定义了webuser_list变量,也定义了HOSTNAME 变量

 

 

 

 

 

 

实战3:只取用户变量的第一个元素[0]

:如果我只取用户列表的第一个元素时的playbook的写法

[libin@libin ansible]$ vim libin2-1.yaml

 

 

---

- name: test var for libin

  hosts: libin.com

  tasks:

  - name: debug

    debug:

      msg: "{{ user_list[0] }} {{ HOSTNAME }}"

 

 

 

 

 

实战4:192.168.124.134db,我定义了db组的变量database_version: mysql

[libin@libin ansible]$ vim libin2-1.yaml

 

 

 

---

- name: test var for libin

  hosts: 192.168.124.134

  tasks:

  - name: debug

    debug:

      msg: "{{ database_version }}"

 

 

 

 

实战5:192.168.124.134主机在db,我只定义database_version: mysql,没有定义HOSTNAME

[libin@libin ansible]$ vim libin2-1.yaml

 

 

 

---

- name: test var for libin

  hosts: 192.168.124.134

  tasks:

  - name: debug

    debug:

      msg: "{{ database_version }} {{ HOSTNAME }}"

 

 

 

 

(:这里报错的原因为,playbook里面的hosts192.168.124.134,而在我定义的主机变量里面并没有192.168.124.134HOSTNAME)

解决方案:

[libin@libin ansible]$ vim host_vars/192.168.124.134    #写上该主机变量

HOSTNAME: libin3.com

 

 

 

 

 

 

 

6.15 定义变量文件

 

实战1:全局变量,针对所有任务生效

[libin@libin ansible]$ pwd

/home/libin/ansible

 

这里我的默认清单还是hosts

 

 

 

[libin@libin ansible]$ vim vars_file        

user_list:

- rhca

- hunan_changsha

 

[libin@libin ansible]$ cp libin2-1.yaml libin3-1.yaml

[libin@libin ansible]$ vim libin3-1.yaml

 

 

 

---

- name: test var for libin

  hosts: libin.com

  vars_files:                                        #使用文档模块定义文档的路径

    - vars_file

  tasks:

  - name: debug

    debug:

      msg: " {{ HOSTNAME }} {{ user_list[0] }}"       

    

:#libin.comwebHOSTNAME 单独定了主机变量, user_list[0] 取变量文件变量的第一个元素

 

 

 

 

实战2: 全局变量,针对所有任务生效

[libin@libin ansible]$ vim libin3-1.yaml

 

 

 

---

- name: test var for libin

  hosts: libin.com

  vars_files:

    - vars_file

  vars:

    - rhca_name: libin447

  tasks:

  - name: debug

    debug:

      msg: " {{ HOSTNAME }} {{ user_list[0] }}"

 

  - name: debug1

    debug:

      msg: "{{ rhca_name }}"                      

 

:#因为我vars变量模块定义了rhca_name 的变量libin447

 

 

 

 

实战3: 局部变量设置(标红部分,两种方式定义变量看个人),不要搞混啦

变量设置 set_fact模块

 

 

 

---

- name: test var for libin

  hosts: libin.com

  vars_files:

    - vars_file

  vars:

    - rhca_name: libin447

  tasks:

  - name: debug

    debug:

      msg: " {{ HOSTNAME }} {{ user_list[0] }}"

 

  - name: debug1

    debug:

      msg: "{{ rhca_name }}"

 

  - name: 变量设置 set_facts模块

    set_fact:

      rhca_name2: "welcom to study rhca447"

 

  - name: debug2

    debug:

      msg: "{{ rhca_name2 }}"

 

 

 

 

[libin@libin ansible]$ tree

.

├── ansible.cfg

├── group_vars

│   ├── db

│   └── web

├── hosts

├── host_vars

│   ├── 192.168.124.134

│   ├── libin3.com

│   └── libin.com

├── inventory

├── libin1-1.yaml

├── libin1.yaml

├── libin2-1.yaml

├── libin3-1.yaml

├── test1

└── vars_file

 

2 directories, 14 files

 

 

 

6.16小结(role角色了解,传递变量)

 

6.14定义分组与主机变量

1、变量设置:

2、变量文件夹: group_vars \ host_vars

3、变量文件: vars_file(变量文件,可以随便取)

vars_files:       #使用文档模块定义文档的路径,这为ansible语法不能写错

4、剧本中局部变量: set_fact模块

5、在角色中定义变量;

角色目录中varsmain.yaml文件,在该文件中定义变量

 

[libin@libin ansible]$ pwd

/home/libin/ansible

 

[libin@libin ansible]$ yum provides ansible-galaxy                 #需要装包ansible-galaxy 

[libin@libin ansible]$ sudo yum install  -y ansible-2.9.27-1.el7.noarch

 

[libin@libin ansible]$ yum search rhel role | grep rhel               #安装角色

[libin@libin ansible]$ sudo yum install -y rhel-system-roles.noarch

 

[libin@libin ansible]$ ansible-galaxy init httpd                     #初始化httpd

- Role httpd was created successfully

 

角色文件已经定义

 

 

 

 

[libin@libin ansible]$ cd httpd/

[libin@libin ansible]$ tree httpd/

httpd/

├── defaults

│   └── main.yml

├── files

├── handlers

│   └── main.yml

├── meta

│   └── main.yml

├── README.md

├── tasks

│   └── main.yml

├── templates

├── tests

│   ├── inventory

│   └── test.yml

└── vars                                    #写变量的地方

└── main.yml

 

6、ansible-playbook -e的方式传递变量

[libin@libin ansible]$ cp libin2-1.yaml libin4-1.yaml

[libin@libin ansible]$ vim libin4-1.yaml

 

 

 

---

- name: test var for libin

  hosts: 192.168.124.134

  tasks:

  - name: debug

    debug:

      msg: "{{ CA_NAME }}"                

 

[libin@libin ansible]$ ansible-playbook -e CA_NAME=RHCA-447 libin4-1.yaml

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_22378.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习使用jquery控制select下拉选项的字体样式

学习使用jquery控制select下拉选项的字体样式实现代码实现代码 <script src"../jquery-2.1.4.min.js"></script><style>div#container {padding: 30px;font-family: verdana, lucida;}a {color: #777;display: block;background-color: #ccc;widt…

向开发者开放免费注册!“远眺捷码”提供一站式软件快速开发平台

近日&#xff0c;远眺科技旗下具有自主知识产权的国产一站式软件快速开发平台——“远眺捷码”宣布正式开放免费注册&#xff0c;有各类软件应用开发等需求开发者、软件开发企业&#xff0c;可访问捷码官网https://www.gemcoder.com/ 操作步骤&#xff1a; Step1、打开捷码PC端…

客户成功 | 数据解码技能提升,Smartbi助力长沙烟草找到“新路子”

让数据会“说话”能“干活”&#xff0c;为客户挖掘出更深层的数据价值&#xff0c;是Smartbi一直以来助力企业数字化转型的目标和方向。大数据时代&#xff0c;每个科学的决策离不开数据的支撑&#xff0c;数字化精益管理是各行业提升自身运营管理的必然选择。数字化转型的成色…

实验1c语言开发环境使用和数据类型,运算符和表达式

1.试验任务1 (1)在垂直方向上打印两个字符小人的源代码,以及运行结果截图\\在垂直方向上打印两个字符小人#include<stdio.h> int main() {printf(" o\n");printf("<H>\n");printf("I I\n");printf("\n\n");printf(&quo…

【PMP学习笔记】第10章 项目沟通管理

【PMP学习笔记】第10章 项目沟通管理 什么是项目沟通管理? 让正确的信息在正确的时间通过正确的方式传递给正确的人,达到正确的效果。一、规划沟通管理规划沟通管理是基于每个相关方或相关方群体的信息需求、可用的组织资产,以及具体项目的需求,为项目沟通活动制定恰当的方…

基于SSM的网上餐厅管理系统

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1研究背景及意义 1 1.2研究现状 1 1.3章节安排 2 第二章 相关技术说明 3 2.1 JSP(Java Server Page)简介 3 2.2 Spring框架简介 3 2.3 Spring MVC框架简介 5 2.4 MyBatis 框架简介 5 2.4 MySql数据库简介 6 2.5 Eclipse简介 6 2.6 T…

顺序表的实现

函数接口定义:顺序表描述的结构体为 typedef struct {ElemType *elem; //存储空间的基地址int length; //当前长度 } SqList;需要实现函数的接口分别为:int GetElem(SqList L, int i, ElemType &e) 顺序表的取值 判断i值是否合理,若不合理,返回0;[i-1]单元存储第i个数…

服务器开发26:Linux中线程和进程的联系与区别(游戏后端请和游戏思考10一起食用)

文章目录一、线程创建方法&#xff08;以redis举例&#xff09;1&#xff09;创建线程函数讲解2&#xff09;线程创建的标记二、内核中对线程的数据结构表示1&#xff09;task_struct具体定义2&#xff09;线程与进程的区别三、进程、线程创建过程及异同1&#xff09;进程创建(…

Oracle Form Builder 安装时遇到的问题记录

Oracle Form Builder 安装时遇到的问题记录 问题1&#xff1a;Checking operating system version: must be 5.0, 5.1 or 5.2. Actual 6.1 Checking operating system version: must be 5.0, 5.1 or 5.2. Actual 6.1 Failed <<<< 解决方法&#xff1a; 修改x:\ds…

JAVAEE多线程synchronized 优化过程

文章目录synchronized 优化过程一、锁升级/锁膨胀1. 偏向锁2. 轻量级锁3. 重量级锁二、锁消除三、锁粗化总结synchronized 优化过程 对于synchronized 1.既是乐观锁,也是悲观锁 2.既是轻量级锁,也是重量级锁 3.乐观锁的部分是基于自旋锁实现的,悲观锁的部分是基于挂起等待锁实…

springboot+jsp云课堂在线教育系统javaweb

“云课堂”在线教育系统是由高校学生依据兴趣爱好自愿组成&#xff0c;按照章程自主开展在线教育课程。“云课堂”在线教育系统是实施素质教育的重要途径和有效方式&#xff0c;在加强校园文化建设、提高学生综合素质、引导学生适应社会、促进学生成才就业等方面发挥着重要作用…

【23种设计模式】组合模式(Composite Pattern) .Net Core实现

文章目录需求变更我们应该怎么做?组合和单个对象是指什么呢?使用组合模式来设计菜单组合迭代器来源组合模式&#xff08;Composite Pattern&#xff09;&#xff0c;又叫部分整体模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象&…

【服务器数据恢复】AIX环境下误删除逻辑卷的数据恢复方案

一、AIX存储层面相关的知识&AIX环境下LV误删除后的恢复方案。 对于AIX而言&#xff0c;PV相当于物理磁盘&#xff0c;一个VG由若干个PV组成&#xff0c;这让我们可以将容量不同的存储空间组合起来进行统一分配。AIX把同一个VG的所有PV按相同大小的存储颗粒&#xff08;PP&…

自制操作系统系列(二):软盘读取

代码仓库地址&#xff1a;https://github.com/freedom-xiao007/operating-system 简介 在上一篇中&#xff0c;我们使用汇编编写了一个直接显示hello的程序&#xff0c;接下来我们继续探索如果使用汇编读取软盘数据 软盘数据读取准备 在上一篇中&#xff0c;我们使用nasm将…

让运维化繁为简,云原生可观测平台 Alibaba Cloud Lens 正式发布

9 月 28 日&#xff0c;阿里云正式推出云产品可观测平台 Alibaba Cloud Lens&#xff08;Lens 透镜&#xff0c;意为洞察细微变化&#xff09;&#xff0c;从成本、性能、安全、数据保护、稳定性、访问分析六个维度&#xff0c;为用户提供对存储类、网络类、数据库类等云产品的…

还在埋头敲代码?不妨学学设计模式,必能让你工作事半功倍

设计模式在开发中占很重要的地位&#xff1b;在大型项目中使用好设计模式往往会取得事半功倍的效果&#xff1b;下面就介绍下几种在开发中常用到的设计模式 装饰者模式(Decorator Pattern) 装饰者模式是在不必改变原类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的…

中断系统:外部中断

中断系统&#xff1a;外部中断 实现功能 按下独立按键Key3&#xff0c;LED流水灯向右&#xff1b;按下Key4&#xff0c;LED流水灯向左。 单片机型号&#xff1a;STC89C52 硬件原理 中断系统就是当系统在进行一项工作时&#xff0c;需要终止这项工作&#xff0c;转而去执行另一…

Springboot复习

本笔记来自b站尚硅谷 文章目录SpringbootHelloWorld原理Value获取值和ConfigurationProperties获取值比较PropertySource 和 ImportResourceprofile自动配置原理整合日志指定配置全面接管SpringMVC启动流程自定义starterdev-toolsyml提示指标监控Springboot HelloWorld原理 配置…

Python函数练习题:通讯录管理程序实战案例

嗨害大家好鸭&#xff01;我是小熊猫❤ 好久没有整实战案例类文章辽 今天就来整一整~ 功能简介 实现一个通讯录管理程序&#xff0c;使用函数来实现程序&#xff0c;采用模块化的程序设计方法&#xff1a; 划分通讯录程序的功能模块&#xff0c;使用函数实现相应的功能首先…

数据湖-hudi概述

前言 数据湖是目前比较热的一个概念&#xff0c;许多企业都在构建或者计划构建自己的数据湖。 数据湖是一个集中式存储库&#xff0c;允许您以任意规模存储所有结构化和非结构化数据。您可以按原样存储数据&#xff08;无需先对数据进行结构化处理&#xff09;&#xff0c;并运…