LinchPin:使用Ansible的简化的云编排工具

去年底, 我的团队宣布了 LinchPin ,这是一种使用Ansible的混合编排工具。 部署云资源从未如此简单或快速。 凭借LinchPin背后的Ansible功能以及对简单性的关注,许多云资源可供用户使用。 在本文中,我将介绍LinchPin,并查看该项目在过去10个月中如何成熟。

在引入LinchPin时,使用ansible -playbook命令运行LinchPin很复杂。 尽管仍然可以实现,但是LinchPin现在具有一个新的前端命令行用户界面(CLI),该界面使用Click编写,使LinchPin变得比以前更加简单。

LinchPin现在不被CLI淘汰,现在还具有Python API,该API可用于管理资源,例如Amazon EC2和OpenStack实例,网络,存储,安全组等。 当您尝试使用LinchPin的Python API时,API 文档可能会有所帮助。

剧本作为图书馆

由于LinchPin的核心部分是Ansible手册 ,因此角色,模块,过滤器以及与调用Ansible模块有关的所有其他事项均已移至LinchPin库中。 这意味着,尽管仍然可以直接调用这些剧本,但这不是管理资源的首选机制。 linchpin可执行文件实际上已成为命令行的前端。

命令行深度

让我们深入了解linchpin命令:



   
   
$ linchpin
Usage: linchpin [ OPTIONS ] COMMAND [ ARGS ] ...

  linchpin: hybrid cloud orchestration

Options:
  -c, --config PATH       Path to config file
  -w, --workspace PATH    Use the specified workspace if the familiar Jenkins
                          $WORKSPACE environment variable is not set
  -v, --verbose           Enable verbose output
  --version               Prints the version and exits
  --creds-path PATH       Use the specified credentials path if WORKSPACE
                          environment variable is not set
  -h, --help              Show this message and exit.

Commands:
  init     Initializes a linchpin project.
  up       Provisions nodes from the given target ( s ) in...
  destroy  Destroys nodes from the given target ( s ) in...

立即可以看到一个简单的描述,以及可以传递给命令的选项和参数。 在此帮助底部附近的三个命令是该文档的重点。

组态

过去有linchpin_config.yml 。 此文件不再,并已被替换为INI风格的配置文件,名为linchpin.conf。 尽管可以修改此文件或将其放置在其他位置,但是将其放置在库路径中可以轻松查找配置。 在大多数情况下,不需要修改linchpin.conf文件。

工作空间

工作空间是已定义的文件系统路径,该路径允许以逻辑方式对资源进行分组。 对于特定环境,服务集或其他逻辑分组,可以将工作空间视为单个点。 它也可以是所有托管资源的一个大存储仓。

可以在命令行中使用--workspace(-w)选项指定工作空间,然后是工作空间路径。 也可以使用环境变量(例如,bash中的$ WORKSPACE )指定它。 默认工作空间是当前目录。

初始化(init)

运行linchpin init将生成所需的目录结构,以及示例PinFile拓扑布局文件:



   
   
$ export WORKSPACE = / tmp / workspace
$ linchpin init
PinFile and file structure created at / tmp / workspace
$ cd / tmp / workspace /
$ tree
.
├── credentials
├── hooks
├── inventories
├── layouts
│   └── example-layout.yml
├── PinFile
├── resources
└── topologies
    └── example-topology.yml

此时,可以执行linchpin并配置一个名为linchpin-centos71的网络的单个libvirt虚拟机。 将生成清单,并将其放置在清单/libvirt.inventory中 。 可以通过阅读topology / example-topology.yml并收集topology_name值来知道。

置备(固定)

一旦设置了PinFile,拓扑和可选的布局,就可以进行配置。

我们使用虚拟工具,因为它易于配置。 它不需要任何额外的东西(身份验证,网络等)。 虚拟提供程序将创建一个临时文件,该文件代表已配置的主机。 如果临时文件中没有任何数据,则说明尚未配置主机,或者它们最近已被破坏。

虚拟提供者的树很简单:



   
   
$ tree
.
├── hooks
├── inventories
├── layouts
│   └── dummy-layout.yml
├── PinFile
├── resources
└── topologies
    └── dummy-cluster.yml

PinFile也很简单。 它指定用于dummy1目标的拓扑和可选布局:



   
   
---
dummy1
:
  topology
: dummy-cluster.yml
  layout
: dummy-layout.yml

dummy-cluster.yml拓扑文件是对类型为dummy_node的三(3)个资源的引用



   
   
---
topology_name
: "dummy_cluster" # topology name
resource_groups
:
 -
    resource_group_name
: "dummy"
    resource_group_type
: "dummy"
    resource_definitions
:
     -
        name
: "web"
        type
: "dummy_node"
        count
: 3

执行linchpin up命令应基于topology_name (在本例中为dummy_cluster )生成资源清单文件:



   
   
$ linchpin up
target: dummy1, action: up

$ ls { resources,inventories } / dummy *
inventories / dummy_cluster.inventory  resources / dummy_cluster.output

要验证虚拟集群的资源,请检查/tmp/dummy.hosts



   
   
$ cat / tmp / dummy.hosts
web- 0 .example.net
web- 1 .example.net
web- 2 .example.net

虚拟模块提供了用于伪装(或虚拟)配置的基本工具。 在LinchPin 示例中查看有关OpenStack,AWS EC2,Google Cloud等的详细信息。

库存产生

作为上述PinFile的一部分,可以指定布局 。 如果指定了此文件并将其存在于正确的位置,则将为配置的资源自动生成Ansible静态清单文件:



   
   
---
inventory_layout
:
  vars
:
    hostname
: __IP__
  hosts
:
    example-node
:
      count
: 3
      host_groups
:
       - example

完成关键的执行后,资源文件将提供有用的详细信息。 具体而言,将IP地址或主机名插入到静态清单中:



   
   
[ example ]
web- 2 .example.net hostname =web- 2 .example.net
web- 1 .example.net hostname =web- 1 .example.net
web- 0 .example.net hostname =web- 0 .example.net

[ all ]
web- 2 .example.net hostname =web- 2 .example.net
web- 1 .example.net hostname =web- 1 .example.net
web- 0 .example.net hostname =web- 0 .example.net

拆解(Linchpin销毁)

LinchPin还可以执行资源拆解。 拆除行动通常期望已经配置了资源; 但是,由于Ansible是幂等的,因此linchpin 销毁只会检查以确保资源已用完。 只有在资源已经用完的情况下,拆卸才会发生。

linchpin destroy命令将使用资源和/或拓扑文件来确定正确的拆卸程序。

虚拟 Ansible角色不使用资源,仅在拆卸期间使用拓扑:



   
   
$ linchpin destroy
target: dummy1, action: destroy

$ cat / tmp / dummy.hosts
-- EMPTY FILE --

拆解功能在临时资源(如网络,存储等)方面受到了更多限制。网络资源有可能与多个云实例一起使用。 这样,执行关键销毁不会破坏某些资源。 这取决于每个提供程序的实现。 请参阅每个提供程序的特定实现。

LinchPin Python API

linchpin命令行工具中实现的大部分内容都是使用Python API编写的。 该API尽管不完整,但已成为LinchPin工具的重要组成部分。

该API包含三个软件包:

  • 关键
  • linchpin.cli
  • linchpin.api

命令行工具在基本的linchpin软件包中进行管理。 它导入linchpin.cli模块和类,这是linchpin.api的子类。 这样做的目的是使用linchpin.api,像计划的RESTful API,允许对关键的其他可能的实现。

有关更多信息,请参阅阅读文档上Python API库文档

钩子

LinchPin 1.0的重大改进之一是钩子。 带钩子的目标是允许在关键执行期间使用处于特定特定状态的外部资源进行其他配置。 当前的状态如下:

  • preup :在配置拓扑资源之前执行
  • postup :在供应拓扑资源并生成可选清单后执行
  • predestroy :在拆除拓扑资源之前执行
  • postdestroy :拆除拓扑资源后执行

在每种情况下,这些挂钩都允许运行外部脚本。 存在几种类型的挂钩,包括称为Action Managers的自定义挂钩。 以下是内置动作管理器的列表:

  • shell :允许嵌入式shell命令或可执行的shell脚本
  • python :执行一个Python脚本
  • ansible :执行Ansible剧本,允许传递以python dict表示的vars_fileextra_vars
  • nodejs :执行Node.js脚本
  • ruby :执行一个Ruby脚本

挂钩绑定到特定目标,并且必须为每个使用的目标重新定义。 将来,钩子将成为全局钩子 ,然后在钩子部分为每个目标更简单地命名。

使用挂钩

描述钩子很简单,了解钩子的功能可能不是那么简单。 存在此功能可以为LinchPin开发人员可能不会考虑的事情向用户提供灵活的功能。 例如,在运行另一个挂钩之前,此概念可能会导致一种简单的方法来对一组系统执行ping操作。

仔细观察工作空间 ,可能已经注意到了hooks目录。 让我们看一下该目录以查看结构:



   
   
$ tree hooks /
hooks /
├── ansible
│   ├── ping
│   │   └── dummy_ping.yaml
└── shell
    └── database
        ├── init_db.sh
        └── setup_db.sh

在每种情况下,都可以在PinFile中使用钩子,如下所示:



   
   
---
dummy1
:
  topology
: dummy-cluster.yml
  layout
: dummy-layout.yml
  hooks
:
    postup
:
      - name
: ping
        type
: ansible
        actions
:
         - dummy_ping.yaml
      - name
: database
        type
: shell
        actions
:
         - setup_db.sh
          - init_db.sh

基本概念是要完成三个发布操作。 挂钩按自上而下的顺序执行。 因此,Ansible ping任务将首先运行,然后是两个Shell任务setup_db.sh ,然后是init_db.sh 。 假设挂钩成功执行,将对系统执行ping操作,然后将建立并初始化数据库。

验证驱动

在LinchPin的最初设计中,开发人员决定在Ansible剧本中管理身份验证。 但是,转而使用更多的API和命令行驱动的工具意味着,身份验证应该在剧本现在所在的库的外部,并且仍根据需要传递身份验证值。

组态

让用户使用所用驱动程序提供的身份验证方法可以完成此任务。 例如,如果拓扑要求使用OpenStack,则标准方法是使用yaml文件或类似的OS_前缀环境变量。 一个clouds.yaml文件由一个配置文件和一个auth部分组成:



   
   
clouds :
  default
:
    auth
:
      auth_url
: http://stack.example.com:5000/v2.0/
      project_name
: factory2
      username
: factory-user
      password
: password-is-not-a-good-password

更多详细信息,请参见OpenStack文档

这个clouds.yaml或任何其他身份验证文件位于default_credentials_path (例如〜/ .config / linchpin)中,并在拓扑中引用:



   
   
---
topology_name
: openstack-test
resource_groups
:
 -
    resource_group_name
: linchpin
    resource_group_type
: openstack
    resource_definitions
:
      - name
: resource
        type
: os_server
        flavor
: m1.small
        image
: rhel-7.2-server-x86_64-released
        count
: 1
        keypair
: test-key
        networks
:
         - test-net2
        fip_pool
: 10.0.72.0/24
    credentials
:
      filename
: clouds.yaml
      profile
: default

可以通过修改linchpin.conf来更改default_credentials_path

拓扑在底部包括一个新的凭据部分。 使用openstackec2gcloud模块,可以类似地指定凭据。 然后,身份验证驱动程序将查找给定的文件名 clouds.yaml ,并搜索名为default配置文件

假设找到并加载了身份验证,设置将照常继续。

简单

尽管LinchPin在拓扑,清单布局,挂钩和身份验证管理方面可能很复杂,但最终目标是简化。 通过使用命令行界面进行简化,以及改善1.0版以后的开发人员体验的目标,LinchPin继续表明可以通过简单的方式管理复杂的配置。

社区成长

在过去的一年中,LinchPin的社区已经发展到现在拥有一个邮件列表 ,一个IRC频道(在chat.freenode.net上为#linchpin),甚至可以通过GitHub公开管理我们的sprint。

社区成员的数量已大大增加,在过去的一年中,社区成员从2位核心开发人员增加到大约10位贡献者。 更多的人继续从事该项目。 如果您对LinchPin感兴趣,请给我们留言,在GitHub上提交问题,加入IRC或向我们发送电子邮件。

本文基于Clint Savage的OpenWest演讲“ LinchPin简介:使用Ansible进行混合云配置” OpenWest将于2017年7月12日至15日在犹他州盐湖城举行。

翻译自: https://opensource.com/article/17/6/linchpin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch热力图是通过使用Grad-CAM技术来生成的。Grad-CAM是一种深度学习可解释性方法,用于可视化神经网络在图像分类任务中关注的主要区域和特征。 在PyTorch中,可以使用Grad-CAM库来实现生成热力图。首先,需要加载已经训练好的模型,并将其设置为评估模式。然后,选择要可视化的目标层,这一层通常是与我们感兴趣的类别相关的层。接下来,通过前向传播计算模型输出和目标层的特征图,并计算梯度。最后,将梯度与目标层的特征图进行加权,得到热力图。 这样生成的热力图可以直观地显示出模型关注的主要区域和特征,帮助我们理解模型的决策过程。这对于调试和优化模型以及解释模型的预测结果都非常有帮助。 你可以参考引用中的代码和引用中的实践问题记录,了解如何将热力图代码融入自己的模型和数据集,并根据自己的数据集绘制热力图。另外,引用中的视频链接也提供了使用PyTorch实现Grad-CAM并绘制热力图的详细步骤和示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [分类任务使用Pytorch实现Grad-CAM绘制热力图](https://blog.csdn.net/Linchpin_/article/details/129796835)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值