bool RotatingKeyRing::get_secret(const EntityName& name, CryptoKey& secret) const
{
+ // 1. Migration override
+ std::string mig_key;
+ int r = cct->_conf.get_val("migration_inline_key", &mig_key);
+ if (r == 0 && !mig_key.empty()) {
+ ldout(cct, 5) << "RotatingKeyRing::get_secret: using migration_inline_key override"
+ << dendl;
+ // Convert string to buffer::ptr
+ ceph::buffer::ptr bp = ceph::buffer::copy(mig_key.data(), mig_key.size());
+ // Build a key from the inline string
+ secret = CryptoKey(CEPH_CRYPTO_AES, utime_t(), bp);
+ return true;
+ }
+
+ // 2. Normal behavior
std::lock_guard l{lock};
- return keyring->get_secret(name, secret);
+ return keyring && keyring->get_secret(name, secret);
}
bool RotatingKeyRing::get_service_secret(uint32_t service_id_, uint64_t secret_id,
flags:
- no_mon_update
- startup
+- name: migration_inline_key
+ type: str
+ level: advanced
+ default: 10.10.10.10
+ desc: Inline cephx key for migration source cluster
+ long_desc: >
+ Allows librbd migration to authenticate to a source cluster using a cephx
+ key provided in the migration spec. Disabled unless explicitly set.
+ flags:
+ - runtime
+ services:
+ - common
- name: mon_host_override
type: str
level: advanced
} else {
ldout(m_cct, 5) << " get value by key " << fsid <<" got "<< value << dendl;
CephContext* cct = (CephContext*)m_dst_io_ctx.cct();
- //CephContext* cct = m_dst_io_ctx.cct();
- ldout(m_cct, 5) << " here " << dendl;
- r = cct->_conf.set_val("mon_host", mon_host);
- ldout(m_cct, 5) << " here1 " << r << dendl;
- lderr(m_cct) << "set_val returned: " << r << " (" << cpp_strerror(r) << ")" << dendl;
-
- r = cct->_conf.set_val("key", value);
- ldout(m_cct, 5) << " here2 "<< r << dendl;
- lderr(m_cct) << "set_val returned: " << r << " (" << cpp_strerror(r) << ")" << dendl;
- r = cct->_conf.set_val("fsid", fsid);
- ldout(m_cct, 5) << " here3 "<< r << dendl;
+ r = cct->_conf.set_val("migration_inline_key", value);
lderr(m_cct) << "set_val returned: " << r << " (" << cpp_strerror(r) << ")" << dendl;
+ cct->_conf.apply_changes(nullptr); //r = cct->_conf.set_val("fsid", fsid);
-return;
- ldout(m_cct, 5) << "Verifying overridden config:"
+ /* ldout(m_cct, 5) << "Verifying overridden config:"
<< " mon_host=" << cct->_conf.get_val<std::string>("mon_host")
<< " key=" << cct->_conf.get_val<std::string>("key")
<< " fsid=" << cct->_conf.get_val<std::string>("fsid")
- << dendl;
+ << dendl;*/
}
}
ldout(m_cct, 5) << " here4 " << dendl;