@@ -2488,16 +2488,19 @@ private boolean noStorageAccessible(){
24882488 private void createHostVersionSystemTags (String distro , String release , String version ) {
24892489 SystemTagCreator creator = HostSystemTags .OS_DISTRIBUTION .newSystemTagCreator (self .getUuid ());
24902490 creator .inherent = true ;
2491+ creator .recreate = true ;
24912492 creator .setTagByTokens (map (e (HostSystemTags .OS_DISTRIBUTION_TOKEN , distro )));
24922493 creator .create ();
24932494
24942495 creator = HostSystemTags .OS_RELEASE .newSystemTagCreator (self .getUuid ());
24952496 creator .inherent = true ;
2497+ creator .recreate = true ;
24962498 creator .setTagByTokens (map (e (HostSystemTags .OS_RELEASE_TOKEN , release )));
24972499 creator .create ();
24982500
24992501 creator = HostSystemTags .OS_VERSION .newSystemTagCreator (self .getUuid ());
25002502 creator .inherent = true ;
2503+ creator .recreate = true ;
25012504 creator .setTagByTokens (map (e (HostSystemTags .OS_VERSION_TOKEN , version )));
25022505 creator .create ();
25032506 }
@@ -2967,6 +2970,40 @@ public void fail(ErrorCode errorCode) {
29672970 }
29682971 });
29692972
2973+ flow (new NoRollbackFlow () {
2974+ String __name__ = "ansbile-update-kvm-host-facts" ;
2975+
2976+ @ Override
2977+ public void run (FlowTrigger trigger , Map data ) {
2978+ String privKeyFile = PathUtil .findFileOnClassPath (AnsibleConstant .RSA_PRIVATE_KEY ).getAbsolutePath ();
2979+ ShellResult ret = ShellUtils .runAndReturn (String .format ("ansible -i %s --private-key %s -m setup -a filter=ansible_distribution* %s -e 'ansible_ssh_port=%d ansible_ssh_user=%s'" ,
2980+ AnsibleConstant .INVENTORY_FILE , privKeyFile , self .getManagementIp (), getSelf ().getPort (), getSelf ().getUsername ()), AnsibleConstant .ROOT_DIR );
2981+ if (!ret .isReturnCode (0 )) {
2982+ trigger .fail (operr ("unable to get kvm host[uuid:%s, ip:%s] facts by ansible\n %s" , self .getUuid (), self .getManagementIp (), ret .getExecutionLog ()));
2983+ return ;
2984+ }
2985+
2986+ String [] pairs = ret .getStdout ().split (">>" );
2987+ if (pairs .length != 2 ) {
2988+ trigger .fail (operr ("unrecognized ansible facts mediaType, %s" , ret .getStdout ()));
2989+ return ;
2990+ }
2991+
2992+ LinkedHashMap output = JSONObjectUtil .toObject (pairs [1 ], LinkedHashMap .class );
2993+ LinkedHashMap facts = (LinkedHashMap ) output .get ("ansible_facts" );
2994+ if (facts == null ) {
2995+ trigger .fail (operr ("unrecognized ansible facts mediaType, cannot find field 'ansible_facts', %s" , ret .getStdout ()));
2996+ return ;
2997+ }
2998+
2999+ String distro = (String ) facts .get ("ansible_distribution" );
3000+ String release = (String ) facts .get ("ansible_distribution_release" );
3001+ String version = (String ) facts .get ("ansible_distribution_version" );
3002+ createHostVersionSystemTags (distro , release , version );
3003+ trigger .next ();
3004+ }
3005+ });
3006+
29703007 flow (new NoRollbackFlow () {
29713008 String __name__ = "recover-host-state" ;
29723009
0 commit comments