Ansible从入门到精通【五】

news2024/11/16 9:53:58

大家好,我是早九晚十二,目前是做运维相关的工作。写博客是为了积累,希望大家一起进步!
我的主页:早九晚十二
专栏名称:Ansible从入门到精通 立志成为ansible大佬

请添加图片描述

ansible-playbook企业级实战--handler

    • handlers介绍
      • hadnlers与notify结合使用触发的条件
      • 举例验证
        • 确认宿主机端口
        • 第一次执行剧本
        • 查看结果
        • 修改httpd配置文件
        • 第二次执行剧本
        • 再次查看结果
        • 解决方法
    • tags介绍
      • 举例验证
    • ansible-playbook 变量的使用
      • ansible setup 变量调用
      • 举例验证
        • 将安装的包设置为pkg变量
        • 使用-e选项给变量赋值
        • 多个变量赋值
        • 测试验证
        • playbook定义变量
      • hosts变量设置
        • 举例验证
        • 查看结果
        • 定义通用分组变量
        • playbook示例
        • 结果查看
      • 变量文件的使用
        • 定义一个变量文件
        • 写一个playbook调用
        • 查看执行结果

handlers介绍

是task列表,这些task与前述的task没有本质的不同,用于当关注的资源发生变化,才会采取一定的操作。

hadnlers与notify结合使用触发的条件

notify此action可用于在每个play的最后被触发。这样可以避免多次有改变发生时每次都执行的操作,仅在所有的变化发生完成后的一次性执行指定操作。在notify中列出的操作称为handler,也即notify中调用handler中定义的操作
比如,某个服务之前使用ansible的剧本进行了安装,后面服务配置变更,需要重启服务,之前的剧本只有启动服务,无法重启,这种情况就用到了handlers与notify

举例验证

[root@zhaoyj ansible]# cat test3.yml 
- hosts: test
  remote_user: root
  
  tasks:
    - name: install pkg
      yum: name=httpd
    - name: copy conf
      copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/ backup=yes
    - name: start service
      service: name=httpd state=started enabled=yes

确认宿主机端口

首先先确认宿主机的httpd配置端口是多少

[root@zhaoyj ansible]# grep -i ^listen /etc/httpd/conf/httpd.conf 
Listen 8090

第一次执行剧本

[root@zhaoyj ansible]# ansible-playbook test3.yml 

查看结果

发现已经启动了8090

[root@zhaoyj ansible]# ansible test -m shell -a "ss -nltup|grep httpd"
139.9.198.12 | CHANGED | rc=0 >>
tcp    LISTEN     0      511    [::]:8090               [::]:*                   users:(("httpd",pid=26206,fd=4),("httpd",pid=26205,fd=4),("httpd",pid=26204,fd=4),("httpd",pid=26203,fd=4),("httpd",pid=26202,fd=4),("httpd",pid=26201,fd=4))

在这里插入图片描述

修改httpd配置文件

接下来我们修改配置文件为8091

[root@zhaoyj ansible]# grep -i ^listen /etc/httpd/conf/httpd.conf 
Listen 8091

第二次执行剧本

[root@zhaoyj ansible]# ansible-playbook test3.yml

再次查看结果

再次查看端口,可以发现端口没改变,所以配置文件改了并没有生效(因为没重启)

[root@zhaoyj ansible]# ansible test -m shell -a "ss -nltup|grep httpd"
139.9.198.12 | CHANGED | rc=0 >>
tcp    LISTEN     0      511    [::]:8090               [::]:*                   users:(("httpd",pid=26206,fd=4),("httpd",pid=26205,fd=4),("httpd",pid=26204,fd=4),("httpd",pid=26203,fd=4),("httpd",pid=26202,fd=4),("httpd",pid=26201,fd=4))

在这里插入图片描述

解决方法

那么,如何实现配置变更自动重启呢?这时候就可以借助handlers,下面继续看↓↓↓

[root@zhaoyj ansible]# cat test3.yml 
- hosts: test
  remote_user: root
  
  tasks:
    - name: install pkg
      yum: name=httpd
    - name: copy conf
      copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart service
    - name: start service
      service: name=httpd state=started enabled=yes

  handlers:
    - name: restart service
      service: name=httpd state=restarted

注意:notify指定的名称需要和handlers的name相同

在这里插入图片描述
在修改一下http配置文件,与上面作区分

[root@zhaoyj ansible]# grep -i ^listen /etc/httpd/conf/httpd.conf
Listen 8092

再次执行ansible剧本,可以发现已经触发了handler

ansible-playbook test3.yml

在这里插入图片描述
再次查看端口,可以发现httpd服务已经变成了8092端口

[root@zhaoyj ansible]# ansible test -m shell -a "ss -nltup|grep httpd"
139.9.198.12 | CHANGED | rc=0 >>
tcp    LISTEN     0      511    [::]:8092               [::]:*                   users:(("httpd",pid=9612,fd=4),("httpd",pid=9611,fd=4),("httpd",pid=9610,fd=4),("httpd",pid=9609,fd=4),("httpd",pid=9608,fd=4),("httpd",pid=9607,fd=4))

在这里插入图片描述

tags介绍

tags相当于给tasks加标签,可以通过标签调用tasks,后续我们可以通过标签调用对应的任务

举例验证

[root@zhaoyj ansible]# cat test3.yml 
- hosts: test
  remote_user: root
  
  tasks:
    - name: install pkg
      yum: name=httpd
      tags: inshttpd
    - name: copy conf
      copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart service
    - name: start service
      service: name=httpd state=started enabled=yes
      tags: rshttpd

  handlers:
    - name: restart service
      service: name=httpd state=restarted

在这里插入图片描述
执行playbook的标签,查看效果
先将httpd服务停止

[root@zhaoyj ansible]# ansible test -m shell -a "systemctl stop httpd"
192.168.1.2 | CHANGED | rc=0 >>

[root@zhaoyj ansible]# ansible test -m shell -a "systemctl status httpd"
192.168.1.2 | FAILED | rc=3 >>
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Wed 2023-06-07 15:11:07 CST; 9s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 10891 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 9607 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=0/SUCCESS)
 Main PID: 9607 (code=exited, status=0/SUCCESS)
   Status: "Total requests: 2; Current requests/sec: 0; Current traffic:   0 B/sec"

Jun 07 14:52:23 0033 systemd[1]: Starting The Apache HTTP Server...
Jun 07 14:52:23 0033 httpd[9607]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 0.0.0.27. Set the 'ServerName' directive globally to suppress this message
Jun 07 14:52:23 0033 systemd[1]: Started The Apache HTTP Server.
Jun 07 15:11:06 0033 systemd[1]: Stopping The Apache HTTP Server...
Jun 07 15:11:07 0033 systemd[1]: Stopped The Apache HTTP Server.non-zero return code

执行启动服务器的rshttpd标签(-t选项)

[root@zhaoyj ansible]# ansible-playbook -t rshttpd test3.yml 

PLAY [test] **************************************************************************************************************************

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

TASK [start service] *****************************************************************************************************************
changed: [192.168.1.2]]

PLAY RECAP ***************************************************************************************************************************
192.168.1.2               : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 


[root@zhaoyj ansible]# ansible test -m shell -a "ss -nltup|grep httpd"
139.9.198.12 | CHANGED | rc=0 >>
tcp    LISTEN     0      511    [::]:8092               [::]:*                   users:(("httpd",pid=11313,fd=4),("httpd",pid=11312,fd=4),("httpd",pid=11311,fd=4),("httpd",pid=11310,fd=4),("httpd",pid=11309,fd=4),("httpd",pid=11308,fd=4))

卸载包后执行tags安装(多个tags以英文逗号分隔)

[root@zhaoyj ansible]# ansible test -m yum -a "name=httpd state=absent"
192.168.1.2 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "changes": {
        "removed": [
            "httpd"
        ]
    }, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-99.el7.centos.1 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package      Arch          Version                       Repository       Size\n================================================================================\nRemoving:\n httpd        x86_64        2.4.6-99.el7.centos.1         @updates        9.4 M\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : httpd-2.4.6-99.el7.centos.1.x86_64                           1/1 \nwarning: /etc/httpd/conf/httpd.conf saved as /etc/httpd/conf/httpd.conf.rpmsave\n  Verifying  : httpd-2.4.6-99.el7.centos.1.x86_64                           1/1 \n\nRemoved:\n  httpd.x86_64 0:2.4.6-99.el7.centos.1                                          \n\nComplete!\n"
    ]
}



[root@zhaoyj ansible]# ansible test -m shell -a "rpm -q httpd"
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because yum, dnf or
zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of
this message.
192.168.1.2 | FAILED | rc=1 >>
package httpd is not installednon-zero return code



[root@zhaoyj ansible]# ansible-playbook -t inshttpd,rshttpd test3.yml 

PLAY [test] **************************************************************************************************************************

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

TASK [install pkg] *******************************************************************************************************************
changed: [192.168.1.2]

TASK [start service] *****************************************************************************************************************
changed: [192.168.1.2]

PLAY RECAP ***************************************************************************************************************************
192.168.1.2              : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@zhaoyj ansible]# ansible test -m shell -a "ss -nltup|grep httpd"
192.168.1.2 | CHANGED | rc=0 >>
tcp    LISTEN     0      511    [::]:80                 [::]:*                   users:(("httpd",pid=13770,fd=4),("httpd",pid=13769,fd=4),("httpd",pid=13768,fd=4),("httpd",pid=13767,fd=4),("httpd",pid=13766,fd=4),("httpd",pid=13765,fd=4))

那么标签可以相同吗?答案是 可以。
修改剧本,将tags修改为统一的httpd

[root@zhaoyj ansible]# cat test3.yml 
- hosts: test
  remote_user: root
  
  tasks:
    - name: install pkg
      yum: name=httpd
      tags: httpd
    - name: copy conf
      copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart service
    - name: start service
      service: name=httpd state=started enabled=yes
      tags: httpd

  handlers:
    - name: restart service
      service: name=httpd state=restarted

卸载httpd

[root@zhaoyj ansible]# ansible test -m yum -a "name=httpd state=absent"
[root@zhaoyj ansible]# ansible test -m shell -a "rpm -q httpd"
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because yum, dnf or
zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of
this message.
192.168.1.2 | FAILED | rc=1 >>
package httpd is not installednon-zero return code
[root@zhaoyj ansible]# ansible-playbook -t httpd test3.yml 

PLAY [test] **************************************************************************************************************************

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

TASK [install pkg] *******************************************************************************************************************
changed: [192.168.1.2]

TASK [start service] *****************************************************************************************************************
changed: [192.168.1.2]

PLAY RECAP ***************************************************************************************************************************
192.168.1.2               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@zhaoyj ansible]# ansible test -m shell -a "ss -nltp|grep httpd"
192.168.1.2 | CHANGED | rc=0 >>
LISTEN     0      511       [::]:80                    [::]:*                   users:(("httpd",pid=14947,fd=4),("httpd",pid=14946,fd=4),("httpd",pid=14945,fd=4),("httpd",pid=14944,fd=4),("httpd",pid=14943,fd=4),("httpd",pid=14942,fd=4))

ansible-playbook 变量的使用

变量只能由字母,数字,下划线组成,且只能以字母开头、

变量来源:

  • ansible setup facts远程主机的所有变量都可以直接调用
  • 在/etc/ansible/hosts定义
    普通变量:主机组中主机单独定义,优先级高于公共变量
    公共(组)变量:针对主机组中所有主机定义统一变量
  • 通过命令行指定变量,优先级最高

ansible-playbook -e varname=value

  • 在play-book中定义
    vars:
    -var1:value1
    -var2:value2
  • 在role中定义

ansible setup 变量调用

查看主机的所有信息

ansible test -m setup |less在这里插入图片描述
过滤hostname

[root@zhaoyj ansible]# ansible test -m setup -a 'filter=ansible_hostname'
192.168.1.2 | SUCCESS => {
    "ansible_facts": {
        "ansible_hostname": "0033", 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

也支持通配符

[root@zhaoyj ansible]# ansible test -m setup -a 'filter=*address*'
192.168.1.2 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.0.121"
        ], 
        "ansible_all_ipv6_addresses": [
            "fe80::f816:3eff:fe4c:8003"
        ], 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

举例验证

将安装的包设置为pkg变量

[root@zhaoyj ansible]# cat test4.yml 
---
- hosts: test
  remote_user: root
  
  tasks:
    - name: install pkg
      yum: name={{ pkg }}
    - name: start service
      service: name={{ pkg }} state=started enabled=yes
...

使用-e选项给变量赋值

[root@zhaoyj ansible]# ansible-playbook -e 'pkg=vsftpd' test4.yml 

PLAY [test] **************************************************************************************************************************

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

TASK [install pkg] *******************************************************************************************************************
changed: [192.168.1.2]

TASK [start service] *****************************************************************************************************************
changed: [192.168.1.2]

PLAY RECAP ***************************************************************************************************************************
192.168.1.2               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@zhaoyj ansible]# ansible test -m shell -a "systemctl status vsftpd"
192.168.1.2 | CHANGED | rc=0 >>
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-06-08 14:35:57 CST; 51s ago
  Process: 31936 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 31937 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─31937 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

Jun 08 14:35:57 0033 systemd[1]: Starting Vsftpd ftp daemon...
Jun 08 14:35:57 0033 systemd[1]: Started Vsftpd ftp daemon.

多个变量赋值

定义两个变量pkg1 与 pkg2

[root@zhaoyj ansible]# cat test5.yml 
---
- hosts: test
  remote_user: root
  
  tasks:
    - name: install pkg
      yum: name={{ pkg1 }}
    - name: install pkg
      yum: name={{ pkg2 }}
...

测试验证

[root@zhaoyj ansible]# ansible-playbook -e 'pkg1=redis pkg2=memcached' test5.yml 

PLAY [test] **************************************************************************************************************************

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

TASK [install pkg] *******************************************************************************************************************
changed: [192.168.1.2]

TASK [install pkg] *******************************************************************************************************************
changed: [192.168.1.2]

PLAY RECAP ***************************************************************************************************************************
192.168.1.2               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   


[root@zhaoyj ansible]# ansible test -m shell -a "rpm -q httpd memcached"
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because yum, dnf or
zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of
this message.
192.168.1.2 | CHANGED | rc=0 >>
httpd-2.4.6-99.el7.centos.1.x86_64
memcached-1.4.15-10.el7_3.1.x86_64

playbook定义变量

[root@zhaoyj ansible]# cat test6.yml 
---
- hosts: test
  remote_user: root
  vars:
    - pkg1: redis
    - pkg2: memcached 
  tasks:
    - name: install pkg
      yum: name={{ pkg1 }}
    - name: install pkg
      yum: name={{ pkg2 }}
...
[root@zhaoyj ansible]# ansible-playbook test6.yml 

PLAY [test] **************************************************************************************************************************

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

TASK [install pkg] *******************************************************************************************************************
changed: [192.168.1.2]

TASK [install pkg] *******************************************************************************************************************
changed: [192.168.1.2]

PLAY RECAP ***************************************************************************************************************************
192.168.1.2               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@zhaoyj ansible]# ansible test -m shell -a "rpm -q redis memcached"
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because yum, dnf or
zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of
this message.
192.168.1.2 | CHANGED | rc=0 >>
redis-3.2.12-2.el7.x86_64
memcached-1.4.15-10.el7_3.1.x86_64

hosts变量设置

举例验证

/etc/ansible/hosts配置

[test]
192.168.1.2:5522 http_port=82

playbook 书写

[root@zhaoyj ansible]# cat test7.yml 
---
- hosts: test
  remote_user: root

  tasks:
    - name: set hostname
      hostname: name=www{{ http_port }}.cn
...

查看结果

[root@zhaoyj ansible]# ansible-playbook test7.yml 

PLAY [test] *************************************************************************************************************************************************************

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

TASK [set hostname] *****************************************************************************************************************************************************
changed: [192.168.1.2]

PLAY RECAP **************************************************************************************************************************************************************
192.168.1.2               : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   


[root@zhaoyj ansible]# ansible test -m shell -a "hostname"
192.168.1.2 | CHANGED | rc=0 >>
www82.cn

定义通用分组变量

hosts文件定义(针对test组做通用变量)

[test]
192.168.1.1:5522 http_port=83

[test:vars]
nodename=test
domainname=.cn

playbook示例

[root@zhaoyj ansible]# cat test8.yml 
---
- hosts: test
  remote_user: root

  tasks:
    - name: set hostname
      hostname: name={{ nodename }}{{ http_port }}{{ domainname }}
...

结果查看

[root@zhaoyj ansible]# ansible-playbook test8.yml 

PLAY [test] **************************************************************************************************************************

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

TASK [set hostname] ******************************************************************************************************************
changed: [192.168.1.2]

PLAY RECAP ***************************************************************************************************************************
192.168.1.2               : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@zhaoyj ansible]# ansible test -m shell -a "hostname"
192.168.1.2 | CHANGED | rc=0 >>
test83.cn

如果命令中使用-e指定了变量,与配置文件变量名相等,优先读命令行。主机清单中,公共变量优先级也大于组变量。

变量文件的使用

定义一个变量文件

[root@zhaoyj ansible]# cat var.yml 
var1: httpd
var2: vsftpd
var3: redis

写一个playbook调用

[root@zhaoyj ansible]# cat test.yml 
---
- hosts: test
  remote_user: root
  
  vars_files:
    - var.yml

  task:
    - name: install pkg
      yum: name= {{ var1 }}
    - name: create file
      file: name=/root/{{ var2 }}.log state=touch
...

查看执行结果

[root@zhaoyj ansible]# ansible-playbook test.yml 

PLAY [test] **************************************************************************************************************************

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

TASK [install pkg] *******************************************************************************************************************
changed: [192.168.1.2]

TASK [create file] *******************************************************************************************************************
changed: [192.168.1.2]

PLAY RECAP ***************************************************************************************************************************
192.168.1.2               : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@zhaoyj ansible]# ansible test -m shell -a "rpm -q httpd"
[WARNING]: Consider using the yum, dnf or zypper module rather than running 'rpm'.  If you need to use command because yum, dnf or
zypper is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of
this message.
192.168.1.2 | CHANGED | rc=0 >>
httpd-2.4.6-99.el7.centos.1.x86_64

[root@zhaoyj ansible]# ansible test -m shell -a "ls -a /root/vsftpd.log"
192.168.1.2 | CHANGED | rc=0 >>
/root/vsftpd.log

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爬虫基本的编码基础知识

爬虫的编码基础知识包括以下几个方面: 网络请求:使用Python中的requests库或urllib库发送HTTP请求,获取网页内容。 解析网页:使用Python中的BeautifulSoup库或lxml库解析HTML或XML格式的网页内容,提取所需的数据。 数…

如何开发视频上传和播放功能时,既省钱又体验好?

前言 现如今,大部分带内容的网站或应用都有视频区了,不说是大厂平台,就连个人开发者也相继在自己网站或小程序上迭代出视频板块。那既然有了视频模块,除个性化推荐,智能审核等这种费钱又耗时的功能外(个人开发者暂缓)。…

软件测试金融测试岗面试热点问题

1、网上银行转账是怎么测的,设计一下测试用例。 回答思路: 宏观上可以从质量模型(万能公式)来考虑,重点需要测试转账的功能、性能与安全性。设计测试用例可以使用场景法为主,先列出转账的基本流和备选流。…

Hive Code2报错排查

前言 大多数可能的code2报错一般是内存不够,所以加下面这个配置可以有效解决这个问题 set hive.auto.convert.join false; #取消小表加载至内存中 但这个不一定是因为内存不够,其实很多错误都是报这种官方错误的,所以一定要去yarn上看日志。…

如何解决vcruntime140.dll找不到的问题?两种方法教你解决

当你在运行某些应用程序或游戏时,可能会遇到一个错误提示,即“找不到vcruntime140.dll”文件。这是因为你的电脑中缺少了这个动态链接库文件,这个问题可能会导致你无法正常使用某些应用程序。在本文中,我们将介绍两种方法来解决 …

Vue3.0快速入门(速查)

Vue也是基于状态改变渲染页面&#xff0c;Vue相对于React要好上手一点。有两种使用Vue的方式&#xff0c;可以直接导入CDN&#xff0c;也可以直接使用CLI创建项目&#xff0c;我们先使用CDN导入&#xff0c;学一些Vue的基本概念。 <!-- 开发环境版本&#xff0c;包含了有帮…

泰克AFG31000系列任意波函数发生器应用

模拟电路检定 这是一个模拟世界。所有物理量均使用模拟信号捕获和表示。因此&#xff0c;需要检定放大器、滤波器和转换器等模拟电路的性能。 InstaView? 技术避免在阻抗不匹配的 DUT 上增加的波形不确定性频率范围为 25 MHz 至 250 MHz由于信号保真度高&#xff0c;无需使…

MySql基础笔记

数据库相关概念 ​ 名称全称简称数据库存储数据的仓库&#xff0c;数据是有组织的进行存储DataBase&#xff08;DB&#xff09;数据库管理系统操纵和管理数据库的大型软件DataBase Management System&#xff08;DBMS&#xff09;SQL操作关系型数据库的编程语言&#xff0c;定…

Java粮油MES系统源码(带可视化数据大屏)

▶ Java粮油MES系统实现一物一码&#xff0c;全程追溯 &#xff0c;正向追踪&#xff0c;逆向溯源&#xff0c;自主研发,有演示&#xff01; 一、粮油MES技术框架说明 开发语言&#xff1a;java 开发工具&#xff1a;idea或eclipse 前端框架&#xff1a;easyui 后端框架&…

横空出世!京东技术专家狂推的Redis笔记,实战和原理两开花

Redis 是互联网技术领域使用最为广泛的存储中间件&#xff0c;它是「Remote Dictionary Service」的首字母缩写&#xff0c;也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外很多大型互联网公司…

【JavaSE】 封装

文章目录 一. 封装的概念二. 访问限定符三. 封装扩展之包1. 包的概念2. 导入包中的类3. 自定义包4. 包的访问权限控制举例5. 常见的包 四. static成员1. 简介2. static修饰成员变量3. static修饰成员方法 五. 代码块1. 代码块概念以及分类2. 普通代码块3. 构造代码块4. 静态代码…

chatgpt赋能python:Python可以实现两个数值的互换

Python可以实现两个数值的互换 Python是一种高效、易学且功能强大的编程语言&#xff0c;可以用于各种不同的编程目的&#xff0c;包括数据科学、网络编程、机器学习、人工智能等领域。其中&#xff0c;Python的一个最基本、最关键的操作就是对数值的处理&#xff0c;包括加减…

【SpringMVC】| SpringMVC的视图

目录 SpringMVC的视图 1. ThymeleafView 2. 转发视图 3. 重定向视图 4. 视图控制器view-controller SpringMVC的视图 &#xff08;1&#xff09;SpringMVC中的视图是View接口&#xff0c;视图的作用渲染数据&#xff0c;将模型Model中的数据展示给用户。 &#xff08;2&am…

Android单元测试(五):网络接口测试

温馨提示&#xff1a;如果你不太熟悉单元测试&#xff0c;可以先看下之前四篇基础框架使用。便于你更好的理解下面的内容。 在平日的开发中&#xff0c;我们用后台写好给我们接口去获取数据。虽然我们有一些请求接口的工具&#xff0c;可以快速的拿到返回数据。但是在一些异常情…

怎么用u盘制作pe系统启动盘

PE系统是一种小型的windows系统&#xff0c;通俗的说法也就是在电脑出现问题不能正常进入系统时的一种紧急备用系统。它容量小能量大&#xff0c;可以解决win系统中经常遇到的一些问题&#xff0c;对于经常使用电脑的用户来说&#xff0c;制作一个pe系统启动盘放在身边是很有必…

selenium python教程第1章

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的AP…

【基于MATLAB的dijkstra算法】

基于MATLAB的dijkstra算法 %姓名&#xff1a;马伟 %日期&#xff1a;2023年6月七号 %作业&#xff1a;通信网理论&#xff0c;最小路径树D算法 function [distances, paths, tree] dijkstra(graph, startNode)numNodes size(graph, 1);distances inf(1, numNodes);visited …

网络安全怎么学?学习路线资料分享

一.自己对网络安全的理解 安全其实有很多个方向&#xff0c;从大的方面来说&#xff0c;也就是测试和开发。测试&#xff0c;细分下来&#xff0c;又有渗透&#xff08;也就是所谓的web&#xff09;&#xff0c;逆向&#xff08;也就是所谓的二进制&#xff0c;主要是代码审计方…

YUM报错No module named yum处理

一、问题描述 某次GreenPlum集群部署过程中&#xff0c;现场人员反馈&#xff0c;yum命令无法使用了&#xff0c;执行报错&#xff1a;No module named yum&#xff0c;如下所示&#xff1a; 相关资料&#xff1a;YUM 二、问题分析处理 2.1 YUM的本质 yum命令本质上是属于py…

泛微信创办公平台,低代码构建丰富应用,满足多种需求

信创已经成为了国家的战略规划&#xff0c;自2022年起&#xff0c;国家已全面推动国资企业的信创改造工作&#xff0c;要求到2027年底&#xff0c;对综合办公、经营管理、生产运营等系统实现“应替尽替、能替则替”。其中&#xff0c;门户、OA、邮件、档案、党群、纪检监察等综…