Giter VIP home page Giter VIP logo

wecube-plugins-saltstack's People

Contributors

zgyzgyhero avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

devopsleague

wecube-plugins-saltstack's Issues

salt-stack ci实现

描述您的需求
在jenkins中创建该插件的ci项目,并将包放到s3上

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

执行saltstack插件创建用户和filecopy报错

描述您遇到的bug
执行saltstack插件创建用户报错。
image
执行saltstack插件filecopy报错。
image

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

在使用了相同IP的新VM上安装Saltstack Agent时失败

描述您遇到的bug
同标题

如何重现
再现行为的步骤

  • 在IP地址为的虚拟机vm1上安装了Saltstack Agent
  • 销毁vm1
  • 新创建虚拟机vm2并指定IP地址为
  • 在vm2上安装Saltstack Agent

预期行为
可能需要提供额外的API将相关的记录清除,从而使vm2上的安装成功

截图

附加

执行运行脚本插件由于入参不对导致S3下载报错,程序崩溃

描述您遇到的bug

执行运行脚本插件由于入参不对导致S3下载报错,程序崩溃。

image

image

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

差异化变量提取错误

描述您遇到的bug
文本中有内容如下会提取到差异化变量1

"$LOGS_DIR/out.log" 2> &1 &

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

兼容AOMP的密码加密功能

WeCube需要支持加密工具,使用场景如下说明:

  1. 生成两对RSA的秘钥,一对是应用方生成(app_pri.pem, app_pub.pem),另一对是由WeCube生成(sys_pri.pem, sys_pub.pem),双方都会把各自的公钥通过某种方式给到对方(WeCube提供地方可以下载公钥、应用方可以在发布时上传公钥,或者在应用包中配置公钥路径)。

  2. 应用方执行发布时,WeCube用应用方的公钥app_pub.pem对明文密码内容做一次加密,之后再用自身的私钥sys_pri.pem做二次加密,这样二次加密后的密文就会被发布到生产或测试环境了。

  3. 应用方程序在执行时,会取到步骤2中二次加密后的密文,使用WeCube的公钥sys_pub.pem对其进行一次解密,如果解密成功,说明密文来自WeCube。拿到解密成功后的一次加密密文后,使用应用方自身的私钥app_pri.pem(建议这个秘钥hard code在应用程序中),对其进行解密获得明文内容,做下一步操作。

加密java代码示例:
image
image

salt-stack 插件补充中英文版本readme

描述您的需求
对需求进行清晰而简洁的描述。

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

Saltstack接口variable参数调整

描述您的需求
应wecube对变量替换需求,需要saltstack的variable插件的variableList入参格式进行调整

旧的格式:
var1=value1, var2=value2

新的格式:
var1,var2=value1,value2

SaltStack插件包应用部署插件封装

描述您的需求
应用部署,使用saltstack插件包,目前需要分发文件、环境变量替换、执行部署脚本三个步骤才能完成。建议增加2个组合插件:
1、首次部署:集成封装“部署用户创建、应用包分发、环境变量替换、执行部署脚本、执行启动脚本”等工作。
2、更新部署:集成封装“执行停止脚本、应用包分发、环境变量替换、执行部署脚本、执行启动脚本“等工作。

预期行为
应用首次部署(created状态)使用首次部署插件。应用更新部署(change状态)使用更新部署插件。

描述您考虑过的替代方案
无。

附加
无。

File Operation需要增加file owner参数

描述您遇到的bug
File Operation需要增加file owner参数。 当前文件所属是root,导致其他部署用户无权限执行。

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

Storage Disk Operation插件返回的未初始化硬盘列表回写不了CMDB

描述您遇到的bug

Storage Disk Operation插件返回的未初始化硬盘列表回写不了CMDB, 应返回字符串。

unformated_disk=[/dev/vdb]

2019-09-26 17:08:51.886 INFO 17 --- [ Thread-28] c.w.w.c.s.plugin.PluginServiceStub : Plugin response: PluginResponse(resultCode=0, resultMessage=success, resultData=PluginResponse.ResultData(outputs=[{guid=0013_0000000002, unformatedDisks=[/dev/vdb]}]))

2019-09-26 17:08:51.886 INFO 17 --- [ Thread-28] c.w.w.c.support.cmdb.CmdbRestTemplate : About to POST http://10.0.0.8:8080/cmdb/api/v2/ci/13/update with postObject [{guid=0013_0000000002, unformated_disk=[/dev/vdb]}]
2019-09-26 17:08:51.941 INFO 17 --- [ Thread-28] c.w.w.c.support.cmdb.CmdbRestTemplate : CMDB response: CmdbResponse(statusCode=OK, statusMessage=null, data=[{biz_key=rDa0flMd2BL, charge_type={code=POSTPAID_BY_HOUR, value=按量计费, seqNo=2, codeId=115, catId=24, cat={codes=[]}, status=active, ciTypes=[]}, code=storage1, orchestration={code=wecube1569483240140, value=格式化盘, seqNo=2, codeId=329, catId=51, cat={codes=[]}, status=active, ciTypes=[]}, r_guid=0013_0000000002, mount_point=/data1, description=1, disk_size=10, file_system_type=ext4, type={code=CLOUD_PREMIUM, value=高性能云硬盘, seqNo=1, codeId=169, catId=52, cat={codes=[]}, status=active, ciTypes=[]}, key_name=10.250.1.3_10.250.1.3_storage1, asset_code=disk-eex76pxo, callbackId=null, host={biz_key=, charge_type=115, code=10.250.1.3, orchestration=0, seed=, r_guid=0012_0000000054, description=10.250.1.3, type=162, instance_num=0, password=7fdfa2302e3493d1743462fc7945d743, state=41, fixed_date=, internet_nat_ip=, os=164, resource_set=0020_0000000017, created_by=umadmin, key_name=10.250.1.3_10.250.1.3, disk=166, p_guid=0012_0000000117, asset_code=ins-eipgup8g, port=, name=10.250.1.3, updated_by=admin, guid=0012_0000000054, created_date=1567105260000, updated_date=1568961360000, intranet_ip=0014_0000000080, user=}, name=storage1, guid=0013_0000000002, state={code=change, value=变更, seqNo=7, codeId=38, catId=8, cat={codes=[]}, status=active, ciTypes=[]}}])

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

调整readme中英文顺序,默认展示英文

描述您的需求
对需求进行清晰而简洁的描述。

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

插件接口每条输入有单独的输出结果标志本次执行是否成功

描述您的需求
对于多条记录的请求,对每条记录的返回值中单独添加成功和失败的结果,方便区分哪些记录执行成功,哪些记录执行失败

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

创建数据库用户时同时指定数据库名和权限并返回已加密的密码

背景和价值

作为 小辉(基础运维专家),
我想要 通过SaltStack插件为应用系统创建专用的数据库和用户,
并且指定此用户创建后在对应数据库中具有的权限,
并且获取加密后的数据库用户密码,
从而 能够让在WeCube中配置好的编排使用该用户再次通过Saltstack插件连接到数据库实例执行任务,
并且 有效避免编排中直接使用root用户进行数据库操作。

预期行为

AC01. 插件操作的注册与配置

假定 小辉在WeCube上完成了SaltStack插件包的上传,
小辉通过“协同 - 插件注册”菜单项进入SaltStack插件的服务注册页面时,
那么 他应当可以找到 “添加数据库及用户” 的操作,
并且该操作的输入参数中应包含 “用户名”“密码(明文)”数据库名称数据库权限列表
并且该操作的输出参数中应包含创建好的 “用户名”“密码(密文)”数据库名称

AC02. 不指定数据库名称

假定 WeCube插件在WeCube上成功注册并运行,
小辉在编排中调用SaltStack插件进行数据库用户创建,
并且配置插件调用时没有指定数据库名称,
那么 编排执行时Saltstack插件应当报错提示必须提供数据库名称,
并且 编排执行失败。

AC03. 不指定数据库用户密码

假定 WeCube插件在WeCube上成功注册并运行,
小辉在编排中调用SaltStack插件进行数据库用户创建,
并且配置插件调用时没有指定数据库用户的密码,
那么 编排成功执行后SaltStack插件应该成功创建指定的数据库用户,
并且返回刚刚创建的数据库用户名和已经加密的由Saltstack插件生成的用户密码。

小辉在编排中使用之前创建的数据库用户名和加密的密码进行数据库操作时,
那么 编排成功执行后数据库操作应当顺利完成。

假定 小锋获取到之前由Saltstack插件返回的数据库用户名和加密的密码,
小锋使用此用户名和密码尝试连接正确的数据库实例时,
那么 小锋应当因为数据库密码已加密而无法连接。

AC04. 指定数据库用户密码

假定 WeCube插件在WeCube上成功注册并运行,
小辉在编排中调用SaltStack插件进行数据库用户创建,
并且配置插件调用时指定了数据库用户和希望使用的用户密码时,
那么 编排成功执行后SaltStack插件应该成功创建指定的数据库用户,
并且返回刚刚创建的数据库用户名和已经加密的用户密码。

小辉在编排中使用之前创建的数据库用户名和加密的密码进行数据库操作时,
那么 编排成功执行后数据库操作应当顺利完成。

小辉使用之前指定的用户名和密码尝试连接正确的数据库实例时,
那么 小辉应当成功连接到数据库实例。

假定 小锋获取到之前由Saltstack插件返回的数据库用户名和加密的密码,
小锋使用此用户名和密码尝试连接正确的数据库实例时,
那么 小锋应当因为数据库密码已加密而无法连接。

AC05. 数据库用户的权限

假定 WeCube插件在WeCube上成功注册并运行,
小辉在编排中调用SaltStack插件进行数据库用户创建,
并且配置插件调用时指定了数据库用户在对应数据库中需要的权限列表(如CREATE权限),
那么 编排成功执行后SaltStack插件应该成功创建指定的数据库用户,

小辉在编排中使用之前创建的数据库用户在对应数据库中进行操作时(如创建数据库表),
那么 编排成功执行后数据库操作应当顺利完成,

小辉在编排中使用之前创建的数据库用户在其它数据库中进行任何操作时,
那么 编排应该由于该数据库用户缺少权限而执行失败。

webshell实现对主机的控制

描述您的需求

  1. 对Linxu主机实现webshell,插件自带前端和后端
  2. 对危险命令进行识别,并给出提示,确认要执行再执行
  3. 接口给两个,第一个是根据输入参数,检查ssh 是否可连接成功,如果连接成功,返回数据;数组中给出重定向console的地址。

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

部署插件相关文档

描述您的需求
增加腾讯云插件文档,包括介绍文档,功能说明, 使用说明,编译文档等

预期行为
新增文档。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

配合编排在每个入参加一个自定义回传参数

描述您的需求
回传参数,callbackParam

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

[讨论]插件工程命名原则

建议插件工程的命名需要体现被封装的第三方开源软件。例如:
wecube-plugin-saltstack或者wecube-plugin-prometheus而不是wecube-plugin-deploy.

文件推包之后服务器上的文件名字和类型有错误

描述您遇到的bug
对bug进行清晰而简洁的描述
gns-query-0904.zip文件推包之后服务器上的文件名变成script-158415572。
传入参数如下:
msg="check parameters = {[{http://172.21.0.4:9000/wecube-artifact/43d260371c727283f5bb751da88275a9_gns-query-0904.zip 0012_0000000003 172.16.5.11 /data/gns-query-0904.zip}]}" func=github.com/WeBankPartners/wecube-plugins-saltstack/plugins.Process file="/go/src/github.com/WeBankPartners/wecube-plugins-saltstack/plugins/plugins.go:107"
输出参数入息a:msg="result=" func=github.com/WeBankPartners/wecube-plugins-saltstack/plugins.downloadS3File file="/go/src/github.com/WeBankPartners/wecube-plugins-saltstack/plugins/s3.go:103"
msg="call salt api request = {local ipcidr 172.16.5.11 cp.get_file [salt://base/script-810440920 /data/gns-query-0904.zip makedirs=true gzip=5]}" func=github.com/WeBankPartners/wecube-plugins-saltstack/plugins.CallSaltApi file="/go/src/github.com/WeBankPartners/wecube-plugins-saltstack/plugins/common.go:120"

如何重现
再现行为的步骤
调用file-copy插件实现文件推送包到服务器上。

预期行为
对你预期会发生的事情的清晰而简洁的描述。
希望传送的包名字不变。还是gns-query-0904.zip

Saltstack smoke 流水线搭建

描述您的需求
当需要在本地对Saltstack的接口进行调试的时候,Saltstack在本地的启动方式很不方便,因为其依赖于容器,为了便于后续的开发调试,建议搭建smoke环境。

预期行为

  1. 通过CICD搭建一个smoke环境
  2. 开放端口本地可以访问

filecopy 解压文件失败

描述您的需求
filecopy 解压文件失败

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

执行User Management插件没有判断错误返回

描述您遇到的bug
执行User Management插件由于groupid错误导致创建失败,没有判断错误返回。

image

image

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

salt-stack插件修改register.xml和wecube2.0的注册文件一致

描述您的需求
1.新建一个分支dev,该分支先不合并到master,避免改了之后wecube1.0用不了
2.按新的接口规范,修改register.xml和makefile。https://github.com/WeBankPartners/wecube-platform/blob/dev/wecube-wiki/docs/developer/WeCube-Platform%E6%8F%92%E4%BB%B6%E5%BC%80%E5%8F%91%E8%A7%84%E8%8C%83.md

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

File Operation插件的文件目标路径问题

描述您遇到的bug
File Operation插件的文件目标路径destination_path的输入一定要指定到文件名才能执行成功,目标路径应该指定路径即可。

image

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

SaltStack插件功能优化

描述您的需求

  1. 变量替换插件,替换完成后,将文件包存储到S3,并返回存储路径。CMDB的实例增加一个属性记录,用于记录这个回写。在接下来的文件分发插件中,使用这个S3路径取文件分发到目标主机。
  2. 脚本执行插件, 目前只支持执行S3上的脚本, 需要支持执行远程机器上的某个脚本。现在部署流程中的部署脚本、启动脚本、停止脚本,都包含在应用包中,现在的脚本执行插件无法执行这些脚本。
  3. 文件拷贝插件, 增加一个参数,文件拷贝到目标目录之后, 可以对*.zip、.tgz、.tar.gz类型的文件, 自动解压。

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

主机未初始化时流程编排执行file copy插件节点不应返回成功

描述您遇到的bug
主机未初始化时流程编排执行file copy插件节点不应返回成功。

image

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

脚本执行报错

描述您遇到的bug
入参:
{
"inputs":[{
"guid":"10004_000000001",
"end_point_type":"Local",
"end_point":"/data/app/scripts/test.sh",
"target":"10.250.1.6",
"run_as":"app",
"args":"1 true"
}]
}

报错:/data/app/scripts/test.sh1 文件不存在,
初步猜测是shell命令拼接有问题。

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

[批量执行]支持批量执行脚本

关联Issue

EPIC: WeBankPartners/wecube-platform#985

背景

WeCube1.x中的批量执行脚本、搜索执行结果、查询执行结果三个功能由saltstack提供。

描述您的需求
WeCube2.x中,saltstack负责执行脚本功能,并返回结果到WeCube,由WeCube记录结果并提供搜索执行结果、查询执行结果两个功能。
所以,需要saltstack进行改造执行脚本接口,返回脚本执行结果。

在运行实例CI执行Database Operation插件解密失败

描述您遇到的bug
创建数据库主机的密码是根据seed和数据库主机的guid加密生成的。
在运行实例CI执行编排调用Database Operation插件去跑数据库脚本时解密失败,因为执行编排是运行实例CI的guid而不是原数据库主机的guid。

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

差异化变量替换插件无法与文件分发插件协助使用

描述您遇到的bug
Variable Operation替换差异化变量后,替换完的文件无法与实例关联,与后继的文件分发无法衔接。

如何重现
编排设计无法使用此插件实现差异化变量替换和替换完成的文件分发

预期行为
有两个改进方法。
1、替换完成后,将文件包存储到S3,并返回存储路径。CMDB的实例增加一个属性记录,用于记录这个回写。在接下来的文件分发插件中,使用这个S3路径取文件分发到目标主机。
2、先分发原始包到目标主机,在执行差异化变量替换。Variable Operation增加一个输入参数“目标主机”,去目标主机执行本地文件替换。

大家可以大家讨论实现方案。
截图

附加

插件注册启动应用本地时间

描述您的需求
对需求进行清晰而简洁的描述。

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

添加LICENSE

描述您的需求
对需求进行清晰而简洁的描述。

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

Variable Operation插件的xml参数和代码实现不一致

描述您遇到的bug
Variable Operation插件的xml参数和代码实现不一致。

插件注册的参数:
image

代码实现需要以下参数:
image

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

Variable Operation插件需要支持多个变量配置文件

描述您遇到的bug

Variable Operation插件目前只支持单个配置文件替换,需要支持多个变量配置文件的替换。

image

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

【saltstack优化】加密加上特使标记,使用密码时需判断

描述您的需求
Saltstack现在和Qcloud有强依赖。所有password都会按加密来处理。如果不使用Qcloud来动态管理资源,SaltStack也无法工作。需要在Qcloud和SaltStack的密码加密时,加上特使标记,这些在传入密码时,就知道是明文密码还是加密后需要解密的密码了。

主机流程编排执行install agent失败时不应返回成功

描述您遇到的bug
主机流程编排执行install agent失败时不应返回成功。

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

file copy 插件解压时同名文件夹及文件未被替换

描述您遇到的bug
file copy 插件解压时同名文件夹及文件未被替换:主机已存在文件夹demo_jar_v1.4,再次执行文件拷贝,原文件夹demo_jar_v1.4未被新包替换。

image

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

脚本插件支持一种新的类型,脚本内容从入参中给

描述您的需求
对需求进行清晰而简洁的描述。

预期行为
对你预期会发生的事情的清晰而简洁的描述。

描述您考虑过的替代方案
对您考虑的替代解决方案进行清晰而简洁的描述。

附加
在此添加有关问题的任何其他上下文。

支持执行压缩包中的SQL脚本

希望在database->runScript插件服务中,支持直接给定以下信息

  1. 压缩包路径
  2. 压缩包中待执行的SQL脚本的相对路径

从而实现直接执行数据库部署包(压缩包)中某个SQL脚本的功能。

插件输入输出参数需要配置guid

描述您遇到的bug
script operation, user management, storage disk operation 没有guid参数,插件输入输出参数需要配置guid

如何重现
再现行为的步骤

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。

附加
在此添加有关问题的任何其他上下文。

文件拷贝失败

描述您遇到的bug
对bug进行清晰而简洁的描述
安装agent之后,salt master看到的IP地址是127.0.0.1。正常应该是看到172.16.X.X

如何重现
再现行为的步骤
调用编排运行file copy插件。

预期行为
对你预期会发生的事情的清晰而简洁的描述。

截图
请添加屏幕截图以帮助解释您的问题。
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.