grzegorznowak.cardano_node
Cardano 节点角色
在 Ubuntu 和 Debian 上将 Cardano 节点安装为 systemd 服务。 然后使用 Ansible tortilla 包裹它,以便使某些操作可控、幂等并且总体上更简单。
可以在指定时添加并集成 CNCLI。
支持的发行版
对更多发行版的采纳和支持将很大程度上依赖于用户的反馈。
请将您的用例添加到问题跟踪器,我们会逐步处理这些问题。
Ubuntu
- 20.04
- 18.04
Debian
- bullseye
安装
选择其中一个:
ansible-galaxy install grzegorznowak.cardano_node
- 直接克隆仓库
示例剧本
有两种主要的安装模式:
- 从源代码编译
- 使用 IOHK 提供的预构建二进制文件
通过 cardano_install_method
标志进行控制。
详细信息请参见下方的 配置
部分。
一般来说,二进制发布安装适合大多数情况,但您也可以使用源代码来实现终极的 nerd-build。
此角色尝试测试两种方法。
从 GitHub 克隆时
- name: 集成 Cardano 节点
hosts: all
vars:
cncli_add: true # 将包含 CNCLI
cardano_wallets: # 将为您创建两个钱包
- savings
- operations
roles:
- cardano-node-role
使用 ansible-galaxy 安装时
- name: 集成 Cardano 节点
hosts: all
vars:
cncli_add: true # 将包含 CNCLI
cardano_wallets: # 将为您创建两个钱包
- savings
- operations
roles:
- grzegorznowak.cardano_node
配置和使用
默认情况下为 cardano
用户和组安装 Cardano。这是推荐的做法。
所有其他可调整的选项可以在 defaults/main.yml
中找到。
更详细的使用示例和可复制的命令将在后续版本中提供。
NFT 代币
使用此角色幂等地铸造本地 NFT 代币。 如果代币已存在且数量符合要求,我将不会重新尝试铸造。
此时,铸造的代币将发送到我们用于铸造的地址。
在主网所需的最小配置:
cardano_install_method: dist
active_network: main
cardano_wallets:
- &wallet_default default
cardano_nfts:
- slug: BurningGiraffe
description: Burning Giraffe
image: "" # NFT 的 IPFS 哈希
name: Burning Giraffe
id: 1
open_period: 1000000 # 为此 NFT 的政策元数据保留可编辑的插槽数量
quantity: 10
wallet: *wallet_default
本地代币
使用此角色幂等地铸造本地代币(不是 NFT)。 如果代币已存在且数量符合要求,我将不会重新尝试铸造。
此时,铸造的代币将发送到我们用于铸造的地址。
在主网所需的最小配置:
cardano_install_method: dist
active_network: main
cardano_wallets:
- &wallet_default default
cardano_assets:
- name: MyAsset
quantity: 1000000
wallet: *wallet_default
支付地址
我们可以跟踪可用的 ADA 地址。
注意:这个角色还(尚未)集成任何钱包软件。我们所做的是创建所需的文件,以 使用 CLI 命令发送和接收付款。在此上下文中,“钱包”是指一个命名的路径,包含在一起属于同一组的文件。
当前的方法是仅创建不存在的钱包,并报告发现损坏的钱包 - 例如,缺少私钥。 出于安全原因,我们将不会尝试删除现有钱包, 尽管这与 ansible 定义和收敛系统的指定状态的理念相悖。
# 用您希望通过该角色跟踪的钱包名称列表填充
cardano_wallets:
- savings
- operations
基于上述示例 - 假设使用所有默认值 - 实际钱包地址将位于:
/home/cardano/wallets/savings/payment.addr
/home/cardano/wallets/operations/payment.addr
以及钱包的私钥
节点同步状态断言
阻止剧本执行,直到 Cardano 节点完全同步。
- name: 等待直到我们完全同步
assert_cardano_synced:
cardano_node_socket: "{{ cardano_node_socket }}"
cardano_bin_path: "{{ cardano_bin_path }}"
active_network: "{{ active_network }}"
testnet_magic: "{{ network_magic }}" # 仅在测试网上使用
retries: 60
delay: 240 # 等待最长 4 小时以完成同步
become: true
become_user: "{{ cardano_user }}"
register: sync_check_result
until: sync_check_result.progress | int == 100
资金断言
确保特定地址至少有给定数量的 Ada 可用。 对于监控某项服务总需要有一些 Ada,或者 阻止某些特定的操作,这个功能非常有用。
- set_fact
wallet_to_check: default
lovelace_needed: 1000000000
- name: 收集钱包
cardano_wallet:
cardano_bin_path: "{{ cardano_bin_path }}"
name: "{{ wallet_to_check }}"
active_network: "{{ active_network }}"
testnet_magic: "{{ network_magic }}" # 仅在测试网上使用
become: true
become_user: "{{ cardano_user }}"
register: wallet_results
- name: 确保我们有一些 Lovelace
assert_address_funded:
cardano_node_socket: "{{ cardano_node_socket }}"
cardano_bin_path: "{{ cardano_bin_path }}"
active_network: "{{ active_network }}"
testnet_magic: "{{ network_magic }}" # 仅在测试网上使用
expected_lovelace: "{{ lovelace_needed }}"
address: "{{ wallet_results['wallets_addresses'][wallet_to_check] }}"
retries: 60
delay: 240 # 等待最长 4 小时以完成同步
become: true
become_user: "{{ cardano_user }}"
register: lovelace_result
until: lovelace_result.lovelace | int > lovelace_needed
一般设置
# Cardano 用户
cardano_user: cardano
cardano_group: cardano
cardano_home_directory: "/home/{{ cardano_user }}"
# 可选项:
# src - 从源代码编译
# dist - 使用官方二进制文件
cardano_install_method: dist
# 版本变量
ghc_version: 8.10.4
cabal_version: 3.4.0.0
# 仅在从源构建时适用
cardano_node_version: 1.33.0
# 仅在从发行版安装时适用
cardano_hydra_build: 9941151
# 始终确认您的 sha,否则可能存在问题
cardano_dist_sha_256: eb7fbc652f79bcb8f56699ed7fee174a4ed321307c7086838d44972136795543
cardano_dist_url: "https://hydra.iohk.io/build/{{ cardano_hydra_build }}/download/1"
# 服务配置
cardano_listen_addr: 127.0.0.1
cardano_listen_port: 22322 # 如果以非特权用户身份运行,必须在上半部分
# CNCLI 配置
cncli_add: false # 设置为 'true' 以启用 cncli 及 cncli-sync 服务
还有更多内容,请直接前往 defaults/main.yml
文件以查看所有小细节。
Cardano CLI
此代码库的最终目标之一是通过 Ansible 任务抽象 Cardano 操作, 但这并不妨碍您直接与服务和二进制文件进行交互。
su cardano
cd ~/bin
./cardano-cli --help
有关使用详细信息,请直接查看 cardano-cli 文档。
CNCLI
有关使用详细信息,请参见 原始仓库。
管理服务
像管理其他服务一样使用它。
# 管理 cardano-node 进程:
systemctl status cardano-node
systemctl restart cardano-node
# 查看一般日志
journalctl -u cardano-node
与启用的 CNCLI 同步服务交互
# 管理 cncli-sync 进程
systemctl status cncli-sync
systemctl restart cncli-sync
# 查看一般日志
journalctl -u cncli-sync
集成测试
在 LXD 上本地测试
LXD 应该已经安装并配置。
使用 ./test-local.sh
触发完整的测试套件。
编译所需的二进制文件是一个 CPU 密集型任务,因此请准备好经历较长的过程。
通过 CI 管道在云上测试
CI 构建在 DO 基础设施之上,并在 main
分支的每个重要变更集上触发。
为了限制运行成本,目前的从源 CI 仅针对 Focal Fossa 进行。
预构建的二进制 CI 针对 focal 和 bionic 进行。
其他支持的平台正在本地评估。
动机
这个角色是对 Cardano 后端和服务配置的持续探索,功能将随着我们对搜索空间的理解而逐渐增加。
采用高 TDD 和编码标准,确保更改不会破坏任何现有组件。
记住在订单时始终索要测试,你的 ansible 披萨。
我何时应该使用此角色而不是官方 Docker 镜像?
首先,Docker 是个很棒的工具,我在我的项目中大量使用它来提供特定任务的一致镜像。 Docker 的特性有其代价,特别是在网络或 systemd 的使用上。 单独使用 Docker 无法完全处理这些问题,因此出现了 Kubernetes、Docker Swarm 等。 直到您需要实际进行定制设置,如网状 VPN 或实时服务监控 - 您开始一个个为系统添加层层复杂性,只为解决 Docker 自身带来的问题; 采用许多不易使用基础设施即代码原则的依赖。
如果我在这些年的开发中学到了什么,那就是没有任何解决方案能适用于一切。 在考虑生产级平台时,试图将 Docker 强行融入定义良好和受控的环境框架,无疑比编译一个清晰理解和最小角色集合并提供特定价值要更耗费精力。
如果您没有采用 Docker 首先开发系统,这种方式我个人发现相当迂回,那么您可能会享受这个角色。它的附加价值在于是完全透明的; 这样您永远不用担心您的 Docker 镜像会预装除了其所声明的内容以外的东西。
最初的测试是在 lxd 容器中进行,这些容器轻量级、快速且原生于 Ubuntu,能够在一个 Docker 难以做到的水平上模拟实际服务器。
突出事项
感谢 Molecule,我们正处于测试驱动的基础设施即代码时代。这一项目也是这一理念的体现。 所以请前往 https://github.com/ansible-community/molecule 给它一些爱和关注。
目标受众
开发者与运维人员
路线图
该项目按照 每周冲刺 的形式推进。 请查看那里的内容以了解当前正在进行的工作。
总体来看,计划内容广泛,主要包括:
基线 Cardano 节点安装完整的 CI/CD集成 CNCLI自动化本地代币铸造自动化 NFT 铸造- 智能合约接口
- 更多/更好的提供示例
- 公共节点运行此角色的结果展示
密钥管理自动化
以上内容可能会变更或重构为模块化的定制角色。
Cardano node for Debians and Ubuntus wrapped with Ops to simplify the most common use cases, like payment address creation, sync status checks, held Ada balance assertions and more being added. Developed using tests-first approach for unmatched stability.
ansible-galaxy install grzegorznowak.cardano_node