tasks

学习linux的第七十四天

会有一股神秘感。 提交于 2020-01-27 02:17:38
playbook的条件判断 查看到setup收集到的所有的facter信息: ansible testhost -m setup 编辑条件: [root@KXLZQ ~]# vim /etc/ansible/when.yml hosts: testhost user: root gather_facts: True tasks: - name: use when shell: touch /tmp/when.txt when: ansible_ens33.ipv4.address == “192.168.70.129” 注: when: ansible_ens33是一个数组存储着网卡相关信息,ipv4属于该数组的子元素,但是ipv4也是一个数组,而address则是ipv4数组的子元素。我们需要使用address 来作为判断条件。所以要访问address就需要使用这样的格式: when: ansible_ens33.ipv4.address,address表示的是键,而"192.168.70.129"则是值,when为判断语句相当于if,所以其判断条件为:该键的值为"192.168.70.129"时就执行shell模块里定义的语句。 执行: [root@KXLZQ ~]# ansible-playbook /etc/ansible/when.yml PLAY [testhost]

单线程+多任务异步协程

喜欢而已 提交于 2020-01-16 16:15:02
1.基础概念 1.协程   - 在函数(特殊的函数)定义的时候,如果使用了async修饰的话,则改变函数调用后返回一个协程对象,并且函数内部的实现语句不会被立即执行。 2.任务对象   - 任务对象就是对协程对象的进一步封装,任务对象==高级的协程对象==特殊的函数   - 任务对象必须要注册到事件循环对象中   - 给任务对象绑定回调函数:爬虫的数据解析中 3.事件循环   - 当作是一个容器,容器中必须存放任务对象   - 当启动事件循环对象后,则事件循环对象会对其内部存储任务对象进行一步的执行 4.aiohttp    - 支持异步网络请求的模块 协程 import asyncio def callback(task): # 作为任务对象的回调函数 print('i am callback and ', task.result()) # task.result是用来接收特殊函数的返回值 async def test(): print("i am test") return "123" c = test() # 封装了一个任务对象 task = asyncio.ensure_future(c) task.add_done_callback(callback) # 创建一个事件循环的对象 loop = asyncio.get_event_loop() loop.run_until

VSCode运行html

匆匆过客 提交于 2020-01-08 04:42:02
1、将项目文件夹添加到工作区 2、点击“终端”,选择“配置任务” 3、选择“使用模板创建tasks.json文件” 4、选择“Others” 5、tasks.json新建,默认如下 6、修改tasks.json { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "在Chrome中运行", "type": "process", // [shell,process] "command": "Chrome", "args": ["${file}"], "windows": { "command": "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" }, "group": "build", "presentation": { // Reveal the output only if unrecognized errors occur. "reveal": "never" //[always,never,silent] }, // Use the standard MS

使用 Python 和 Flask 设计 RESTful API

自闭症网瘾萝莉.ら 提交于 2020-01-02 02:03:04
近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配。 在本文中我将向你展示如何简单地使用 Python 和 Flask 框架来创建一个 RESTful 的 web service。 什么是 REST? 六条设计规范定义了一个 REST 系统的特点: 客户端-服务器 : 客户端和服务器之间隔离,服务器提供服务,客户端进行消费。 无状态 : 从客户端到服务器的每个请求都必须包含理解请求所必需的信息。换句话说, 服务器不会存储客户端上一次请求的信息用来给下一次使用。 可缓存 : 服务器必须明示客户端请求能否缓存。 分层系统 : 客户端和服务器之间的通信应该以一种标准的方式,就是中间层代替服务器做出响应的时候,客户端不需要做任何变动。 统一的接口 : 服务器和客户端的通信方法必须是统一的。 按需编码 : 服务器可以提供可执行代码或脚本,为客户端在它们的环境中执行。这个约束是唯一一个是可选的。 什么是一个 RESTful 的 web service? REST 架构的最初目的是适应万维网的 HTTP 协议。 RESTful web services 概念的核心就是“资源”。 资源可以用 URI 来表示。客户端使用 HTTP 协议定义的方法来发送请求到这些 URIs

Grunt 之 watch 和 livereload

喜欢而已 提交于 2019-12-31 09:14:23
现在 watch 中已经集成了 livereload ,所以把它们放在一起说明。 watch 可以监控特定的文件,在添加文件、修改文件、或者删除文件的时候自动执行自定义的任务,比如 livereload 等等。 1. 安装 项目定义在 GitHub 上,地址: https://github.com/gruntjs/grunt-contrib-watch 可以通过 NPM 直接进行安装 npm install grunt-contrib-watch --save-dev 安装之后,需要在 Gruntfile.js 中添加任务的注册。 grunt.loadNpmTasks('grunt-contrib-watch'); 通过 grunt watch 运行 watch 任务。 2. 配置 watch 与 connect 类似,在 watch 下面定义自己的子任务,下面的示例将会监控 src 目录下的任意 *.html 文件,在文件被修改之后,输出被修改的文件名。 这里通过 watch 的事件进行处理。 'use strict'; module.exports = function (grunt) { // Project configuration. grunt.initConfig({ watch:{ start:{ files: ['src/*.html'] } } });

Grunt 之 watch 和 livereload

戏子无情 提交于 2019-12-31 09:14:05
Grunt 之 watch 和 livereload 现在 watch 中已经集成了 livereload ,所以把它们放在一起说明。 watch 可以监控特定的文件,在添加文件、修改文件、或者删除文件的时候自动执行自定义的任务,比如 livereload 等等。 1. 安装 项目定义在 GitHub 上,地址: https://github.com/gruntjs/grunt-contrib-watch 可以通过 NPM 直接进行安装 npm install grunt-contrib-watch --save-dev 安装之后,需要在 Gruntfile.js 中添加任务的注册。 grunt.loadNpmTasks('grunt-contrib-watch'); 通过 grunt watch 运行 watch 任务。 2. 配置 watch 与 connect 类似,在 watch 下面定义自己的子任务,下面的示例将会监控 src 目录下的任意 *.html 文件,在文件被修改之后,输出被修改的文件名。 这里通过 watch 的事件进行处理。 'use strict'; module.exports = function (grunt) { // Project configuration. grunt.initConfig({ watch:{ start:{ files:

ansible学习

假如想象 提交于 2019-12-27 01:49:58
ansible 与salt对比 相同 都是为了同时在多台机器上执行相同的命令 都是python开发 不同 agent(saltstack需要安装、ansible不需要) 配置(salt配置麻烦,ansible基本不用配置) 学习路线(salt比较陡峭,ansible比较平缓) 第三方工具(salt比较少) 开源社区的对接(salt比较少) 现有用户(salt还是ansible少一些) 二次开发扩展的能力(ansible比较差,尤其是2.0以后) 大规模并发(200以内一样,200以上salt会好一些,当然我们也可以对ansible做一些配置使其在200以上追上salt) Windows的支持(salt会好很多) 安装 yum install -y ansible 查看ansible生成的命令,用到的命令 ansible ansible-doc ansible-galaxy(下载第三方插件) ansible-playbook 查看ansible 安装生成的 rpm -ql ansible |more /etc/ansible /etc/ansible/ansible.cfg #配置文件 /etc/ansible/hosts #主要文件 hosts文件详解 cat /etc/ansible/hosts # This is the default ansible 'hosts' file

Ansible 小手册系列 十(包含和角色)

冷暖自知 提交于 2019-12-27 01:45:17
一、包含 (include) 使用 include 模块来包含foo文件 tasks: - include: foo.yml --- foo.yml - name: test foo command: echo foo    include 还允许传递变量 - include: wordpress.yml wp_user=timmy - include: wordpress.yml vars: wp_user: timmy ssh_keys: - keys/one.txt - keys/two.txt    动态包含 循环引用3次 - include: foo.yml param={{item}} with_items: - 1 - 2 - 3    还可以使用动态变量引入task文件 - include: "{{inventory_hostname}}.yml"    动态包含的一些限制 • 您不能使用notify触发来自动态包含的处理程序名称。 • 您不能使用--start-at-task在动态包含内的任务开始执行。 • 仅存在于动态包含内的标记不会显示在-list-tags输出中。 • 只存在于动态包含内的任务将不会显示在-list-tasks输出中。 为了解决上面限制,2.1版本后引入了 static - include: foo.yml static: <yes|no

Ansible playbook roles

情到浓时终转凉″ 提交于 2019-12-27 01:44:38
1 概述 角色(roles):如果我们使用playbook写成一个文件,这个文件会很大,但是不方便组织,我们可以分组,把playbook根据功能,如handler,tasks等分门别类的放在在各自的子目录下,形成一个集合,就是角色,建议把角色放在固定的目录下,目录可以ansible的配置文件中的roles_path来定义。 目录结构清晰 可以重复使用 参考: http://www.ansible.com.cn/docs/playbooks_roles.html https://blog.51cto.com/ghbsunny/2047084 2 配置介绍 以层级结构组织Playbook的核心元素,成为roles。 核心元素包括以下几点: Hosts:主机 Tasks:任务列表 Variables:变量 Templates:包含了模板语法的文本文件; Handlers:由特定条件触发的任务; 在roles目录下,分别创建不同的目录,每个目录就是不同的角色,roles目录下是角色的集合: 如roles/创建如下的目录 mysql/ httpd/ nginx/ memcached/ roles模块的路径可以在配置文件/etc/ansible/ansible.cfg里roles_path定义. 每个角色,以特定的层级目录结构进行组织,例子如下: /roles/mysql/ files/

非线程安全类的异步多线程安全模型

别等时光非礼了梦想. 提交于 2019-12-26 04:41:54
在项目中经常会遇到一些需要异步处理的(耗时长)并且线程不安全的对象在多线程模型中使用,封装了一个实用的线程模板,用于直接处理这类的事务。将该线程不安全的对象直接绑定到单个线程上,然后将一个外部处理函数压入队列,由该线程取出对象和处理函数调用。绑定的对象作为第一个参数传入处理函数中,其余入参依次传入函数的实参。 代码如下, 版本:c++14, 编译器:gcc 5.4 #include <thread> #include <iostream> #include <functional> #include <queue> #include <mutex> #include <condition_variable> #include <chrono> template<typename INSTANCE> class SafeThread { public: SafeThread(std::shared_ptr<INSTANCE> i) : instance(i) { worker = std::thread([this] { while(!this->stop) { std::function<void()> task; { std::unique_lock<std::mutex> lck(this->queue_mtx); this->condition.wait(lck, [this