updatecluster: support multiple gateways
Just look at the existing proxied remotes that correspond to already existing nodes of the cluster, and keep those nodes in the cluster. While adding any remotes of the local repo that are configured as cluster nodes. This allows removing cluster nodes from the local repo and updating, without it also removing nodes provided by other gateways.
This commit is contained in:
parent
0b72b85df5
commit
02bf3ddc3f
3 changed files with 19 additions and 7 deletions
|
@ -50,23 +50,35 @@ start = startingCustomOutput (ActionItemOther Nothing) $ do
|
|||
let mynodes = S.map (ClusterNodeUUID . R.uuid) mynodesremotes
|
||||
let recordednodes = fromMaybe mempty $ M.lookup cu $
|
||||
clusterUUIDs recordedclusters
|
||||
if recordednodes == mynodes
|
||||
proxiednodes <- findProxiedNodes recordednodes
|
||||
let allnodes = S.union mynodes proxiednodes
|
||||
if recordednodes == allnodes
|
||||
then liftIO $ putStrLn $ safeOutput $
|
||||
"No cluster node changes for cluster: " ++ clustername
|
||||
else do
|
||||
describechanges descs clustername recordednodes mynodes mynodesremotes
|
||||
recordCluster cu mynodes
|
||||
describechanges descs clustername recordednodes allnodes mynodesremotes
|
||||
recordCluster cu allnodes
|
||||
|
||||
next $ return True
|
||||
where
|
||||
describechanges descs clustername oldnodes mynodes mynodesremotes = do
|
||||
describechanges descs clustername oldnodes allnodes mynodesremotes = do
|
||||
forM_ (S.toList mynodesremotes) $ \r ->
|
||||
unless (S.member (ClusterNodeUUID (R.uuid r)) oldnodes) $
|
||||
liftIO $ putStrLn $ safeOutput $
|
||||
"Added node " ++ R.name r ++ " to cluster: " ++ clustername
|
||||
forM_ (S.toList oldnodes) $ \n ->
|
||||
unless (S.member n mynodes) $ do
|
||||
unless (S.member n allnodes) $ do
|
||||
let desc = maybe (fromUUID (fromClusterNodeUUID n)) fromUUIDDesc $
|
||||
M.lookup (fromClusterNodeUUID n) descs
|
||||
liftIO $ putStrLn $ safeOutput $
|
||||
"Removed node " ++ desc ++ " from cluster: " ++ clustername
|
||||
|
||||
-- Finds nodes that are proxied by other cluster gateways.
|
||||
findProxiedNodes :: S.Set ClusterNodeUUID -> Annex (S.Set ClusterNodeUUID)
|
||||
findProxiedNodes recordednodes =
|
||||
(S.fromList . map asclusternode . filter isproxynode) <$> R.remoteList
|
||||
where
|
||||
isproxynode r =
|
||||
asclusternode r `S.member` recordednodes
|
||||
&& remoteAnnexProxied (R.gitconfig r)
|
||||
asclusternode = ClusterNodeUUID . R.uuid
|
||||
|
|
|
@ -16,7 +16,7 @@ gateway to the cluster. The `gateway` parameter is the name of that remote.
|
|||
The `clustername` parameter is the name of the cluster.
|
||||
|
||||
The next step after running this command is to configure
|
||||
any additional cluster nodes that this gateway provide to the cluster,
|
||||
any additional cluster nodes that this gateway serves to the cluster,
|
||||
then run [[git-annex-updatecluster]]. See the documentation of
|
||||
that command for details about configuring nodes.
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ git-annex updatecluster
|
|||
# DESCRIPTION
|
||||
|
||||
This command is used to record the nodes of a cluster in the git-annex
|
||||
branch. It should be run in each repository that will serve as a gateway
|
||||
branch. It should be run in the repository that will serve as a gateway
|
||||
to the cluster.
|
||||
|
||||
It looks at the git config `remote.name.annex-cluster-node` of
|
||||
|
|
Loading…
Reference in a new issue