IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 创建角色和变量 -> 正文阅读

[网络协议]创建角色和变量

创建角色和变量

角色创建流程

在Ansible中创建角色不需要特别的开发工具。创建和使用角色包含三个步骤:

  1. 创建角色目录结构
  2. 定义角色内容
  3. 在playbook中使用角色

创建角色目录(独享)


[root@control2 test]# mkdir  -p  httpd/{defaults,vars,files,templates,tasks,handlers,test} 
[root@control2 test]# tree  httpd/
httpd/
|-- defaults
|-- files
|-- handlers
|-- tasks
|-- templates
|-- tests
`-- vars


[root@control2 test]# touch httpd/{defaults/main.yml,tasks/main.yml,vars/main.yml}
[root@control2 test]# tree  httpd/
httpd/
|-- defaults
|   `-- main.yml
|-- files
|-- handlers
|-- tasks
|   `-- main.yml
|-- templates
|-- tests
`-- vars
    `-- main.yml

创建角色(共享)

[root@control2 test]# ansible-galaxy init  apache
- Role apache was created successfully

[root@control2 test]# ls
apache  httpd  roles
[root@control2 test]# tree  apache/
apache/
|-- README.md
|-- defaults     //默认值
|   `-- main.yml
|-- files
|-- handlers         //触发程序
|   `-- main.yml
|-- meta
|   `-- main.yml
|-- tasks             //任务文件
|   `-- main.yml
|-- templates        //模板文件   .j2
|-- tests            //play文件
|   |-- inventory
|   `-- test.yml
`-- vars
    `-- main.yml    //变量

用角色安装httpd

在apache/tasks/main.yml编写play

[root@control2 tasks]# cat  main.yml 
---
# tasks file for apache
- name: install apache
  yum:
    name: httpd
    state: present

- name: install policycoreutils-python-utils  //可有可无
  yum:
    name: policycoreutils-python-utils
    state: present

- name: config  apache
  template:
    src: httpd.conf.j2      //事先准备好httpd.conf.j2模板
    dest: /etc/httpd/conf/httpd.conf

- name: service apache
  service:
    name: httpd
    state: restarted #重启服务    #也可以写started 开启服务 两者性质不一样根据防火墙规则来修改

- name: service firewalld   #防火墙可关可不关
  service:
    name: firewalld
    state: stopped 

修改httpd.conf.j2模板

[root@control2 apache]# vim   templates/httpd.conf.j2 
#Listen 12.34.56.78:80
Listen {{ PORT }}   //把端口号定义成一个变量

定义模板变量

[root@control2 apache]# cat   defaults/main.yml 
---
# defaults file for apache
PORT: 80

编写执行角色的play

[root@control2 roles]# cat  apache.yml 
---
- hosts: server4
  roles:
    - apache
[root@control2 roles]# ls
apache  apache.yml      //角色文件和角色执行play必须在同一级别




执行apache.yml

[root@control2 project]# ansible-playbook playbook/roles/apache.yml 

PLAY [server4] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.56.133]

TASK [install apache] **********************************************************
ok: [192.168.56.133]

TASK [config  apache] **********************************************************
ok: [192.168.56.133]

TASK [service apache] **********************************************************
changed: [192.168.56.133]

TASK [apache : service firewalld] **********************************************
changed: [192.168.56.133]

PLAY RECAP *********************************************************************
192.168.56.133             : ok=5    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

在server4上查看

[root@server4 ~]# ss  -antl
State           Recv-Q          Send-Q                   Local Address:Port                    Peer Address:Port          
LISTEN          0               128                            0.0.0.0:22                           0.0.0.0:*             
LISTEN          0               128                                  *:80                                 *:*             
LISTEN          0               128                               [::]:22                              [::]:* 
//80端口已启动

通过变量更改角色的行为

编写良好的角色利用默认变量来改变角色行为,使之与相关的配置场景相符。这有助于让角色变得更为通用,可在各种不同的上下文中重复利用。

如果通过以下方式定义了相同的变量,则角色的defaults目录中定义的变量的值将被覆盖:

  • 在清单文件中定义,作为主机变量或组变量
  • 在playbook项目的group_vars或host_vars目录下的YAML文件中定义
  • 作为变量嵌套在play的vars关键字中定义
  • 在play的roles关键字中包含该角色时作为变量定义

下例演示了如何将motd角色与system_owner角色变量的不同值搭配使用。角色应用到受管主机时,指定的值someone@host.example.com将取代变量引用。

1、在vars目录编写变量

[root@control2 apache]# cat  vars/main.yml 
---
# vars file for apache
PORT: 82
[root@control2 apache]# cat  defaults/main.yml 
---
# defaults file for apache
PORT: 80

####如果关闭了防火墙就直接开始第二步

执行apache.yml

//会报错
TASK [service apache] **********************************************************
fatal: [192.168.56.133]: FAILED! => {"changed": false, "msg": "Unable to restart service httpd: Job for httpd.service failed because the control process exited with error code.\nSee \"systemctl status httpd.service\" and \"journalctl -xe\" for details.\n"}

那是应为受控主机上没有82端口,要安装服务,添加端口

[root@server4 ~]# yum -y  install policycoreutils-python-utils
Failed to set locale, defaulting to C.UTF-8

用semanage查看已添加端口

[root@server4 ~]# semanage  port --list  | grep  http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
//可以发现没有82端口

这时我们添加端口

[root@server4 ~]# semanage port -a -t http_port_t -p tcp 81 
ValueError: 已定义端口 tcp/81


[root@server4 ~]# semanage  port --list  | grep  http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      85, 84, 83, 82, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

//添加多个端口

也可以用系统角色添加

[root@control2 roles]# cat  apache.yml 
---
- hosts: server4
  vars:
    selinux_ports: 
      - ports: "{{ PORT }}"
        setype: 'httpd_port_t'
        state: 'present'
        porto: 'tcp'
    PORT: 82     //添加82端口
  roles:
    - apache


2、执行

[root@control2 project]# ansible-playbook playbook/roles/apache.yml 

可以看出vars变量替代了defaults变量 vars>defaults

[root@server4 ~]# ss  -antl
State    Recv-Q   Send-Q       Local Address:Port                     Peer Address:Port                 
LISTEN   0        128                0.0.0.0:22                            0.0.0.0:*                    
LISTEN   0        128                      *:82                                  *:*                    
LISTEN   0        128                   [::]:22                               [::]:*  

3、更换变量位子 play清单里的变量大于defaults

[root@control2 roles]# cat  apache/vars/main.yml 
---
# vars file for apache
#PORT: 82     
[root@control2 roles]# cat  apache.yml 
---
- hosts: server4
  vars:
    PORT: 85
  roles:
    - apache
//执行
[root@control2 project]# ansible-playbook playbook/roles/apache.yml 

//查看结果
[root@server4 ~]# ss  -antl
State    Recv-Q   Send-Q       Local Address:Port                     Peer Address:Port                 
LISTEN   0        128                0.0.0.0:22                            0.0.0.0:*                    
LISTEN   0        128                      *:85                                  *:*                    
LISTEN   0        128                   [::]:22                               [::]:*   

4、更换变量位置

[root@control2 roles]# cat  apache/defaults/main.yml 
---
# defaults file for apache
PORT: 80
[root@control2 roles]# cat  apache/vars/main.yml ---
# vars file for apache
PORT: 82
[root@control2 roles]# cat  apache.yml 
---
- hosts: server4
  vars:
    PORT: 83
  roles:
    - role: apache
      PORT: 81         
//执行
[root@control2 project]# ansible-playbook playbook/roles/apache.yml


//查看
[root@server4 ~]# ss  -antl
State    Recv-Q   Send-Q       Local Address:Port                     Peer Address:Port                 
LISTEN   0        128                0.0.0.0:22                            0.0.0.0:*                    
LISTEN   0        128                      *:81                                  *:*                    
LISTEN   0        128                   [::]:22                               [::]:*    

角色内嵌参数变量 > vars/main.yml 变量 > 在playbook清单中定义vars定义变量 > 在playbook项目的group_vars或host_vars目录下的YAML文件中定义主机变量 主机组变量 > defaults/main.yml定义变量(默认变量)

使用ansible galaxy部署角色

介绍ansible galaxy

Ansible Galaxy [https://galaxy.ansible.com]是一个Ansible内容公共资源库,这些内容由许许多多Ansible管理员和用户编写。它包含数千个Ansible角色,具有可搜索的数据库,可帮助Ansible用户确定或许有助于他们完成管理任务的角色。Ansible Galaxy含有面向新的Ansible用户和角色开发人员的文档和视频链接

安装角色

ansible-galaxy role install  xxx.httpd
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:47:35  更:2021-08-10 13:49:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:50:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码