Wednesday, 2016-01-27

*** penick has joined #openstack-dns00:01
*** james_li has quit IRC00:02
*** rudrajit has joined #openstack-dns00:07
*** jmcbride has quit IRC00:08
*** ducttape_ has quit IRC00:14
*** EricGonczer_ has joined #openstack-dns00:22
*** rudrajit has quit IRC00:54
*** stanzgy has quit IRC01:03
*** EricGonczer_ has quit IRC01:06
*** bpokorny_ has joined #openstack-dns01:07
*** bpokorny has quit IRC01:07
*** bpokorny has joined #openstack-dns01:07
*** bpokorny has quit IRC01:14
*** mlavalle has quit IRC01:25
*** penick has quit IRC01:37
*** stanzgy has joined #openstack-dns01:44
*** EricGonczer_ has joined #openstack-dns01:44
*** fawadkhaliq has joined #openstack-dns01:58
*** fawadkhaliq has quit IRC01:59
*** richm has quit IRC02:37
*** jasonsb has joined #openstack-dns02:39
*** ducttape_ has joined #openstack-dns02:49
*** EricGonczer_ has quit IRC02:51
*** ducttape_ has quit IRC02:59
*** ducttape_ has joined #openstack-dns03:00
*** jmcbride has joined #openstack-dns03:05
*** ducttape_ has quit IRC03:17
*** jmcbride has quit IRC03:28
*** rsyed_away is now known as rsyed03:57
*** ducttape_ has joined #openstack-dns04:11
*** rsyed is now known as rsyed_away04:29
*** fawadkhaliq has joined #openstack-dns04:46
*** ducttape_ has quit IRC04:56
openstackgerritJames Li proposed openstack/designate: Make supported record type configurable  https://review.openstack.org/27290205:06
*** rudrajit has joined #openstack-dns05:09
*** rudrajit has quit IRC05:23
*** rudrajit has joined #openstack-dns05:24
*** nyechiel has joined #openstack-dns05:26
*** fawadkhaliq has quit IRC05:31
*** km has quit IRC05:35
*** km has joined #openstack-dns05:39
*** fawadkhaliq has joined #openstack-dns05:47
*** fawadkhaliq has quit IRC05:47
*** fawadkhaliq has joined #openstack-dns05:50
*** penick has joined #openstack-dns05:52
*** _RuiChen_ has quit IRC06:20
*** RuiChen has joined #openstack-dns06:21
*** rudrajit_ has joined #openstack-dns06:35
*** rudrajit has quit IRC06:38
*** jasonsb has quit IRC06:57
*** stanzgy_ has joined #openstack-dns07:19
*** stanzgy has quit IRC07:21
*** kei_yama has quit IRC07:21
*** kei_yama has joined #openstack-dns07:21
*** GonZo2K has quit IRC07:23
*** penick has quit IRC07:27
*** penick has joined #openstack-dns07:28
*** chlong_zzz is now known as chlong07:31
*** penick has quit IRC07:49
*** rudrajit_ has quit IRC08:18
*** km has quit IRC08:33
*** naggappan has joined #openstack-dns08:48
*** Alex_Stef has joined #openstack-dns09:17
*** jordanP has joined #openstack-dns09:20
*** jordan_ has joined #openstack-dns09:34
*** jordanP has quit IRC09:34
*** jordan_ has quit IRC09:34
*** jordanP has joined #openstack-dns09:35
*** stanzgy_ has quit IRC10:50
*** kei_yama has quit IRC11:18
*** GonZo2K has joined #openstack-dns11:37
*** fawadkhaliq has quit IRC11:42
*** fawadkhaliq has joined #openstack-dns11:42
*** pcaruana has joined #openstack-dns11:44
openstackgerritMichael Krotscheck proposed openstack/designate: Added Keystone and RequestID headers to CORS middleware  https://review.openstack.org/26540212:21
*** GonZo2K has quit IRC12:33
*** pcaruana has quit IRC12:37
Alex_StefKiall, Ping12:42
KiallAlex_Stef: hey12:51
Alex_StefKiall, Hi how are u12:51
Kiallany luck tracing that issue?12:51
Alex_StefKiall, Yep it is related to the following bug : https://bugs.launchpad.net/designate/+bug/152501912:52
openstackLaunchpad bug 1525019 in Designate "mdns.get_serial_number retries for no reason" [High,In progress] - Assigned to sonu (sonu-bhumca11)12:52
Alex_StefI installed Designate with BIND and the BE is not updated12:53
KiallHumm., have you tried the patch sonuk put it? It seems to be failing gate, so it's not been on my radar yet12:54
*** sonuk has quit IRC12:54
openstackgerritKiall Mac Innes proposed openstack/designate: Remove unnecessary retries from mdns.get_serial_number  https://review.openstack.org/27069012:54
Kiall(Just rebased it there to have it go through CI again, in case it was a random fail before)12:54
KiallAlso, what exact behaviour are you seeing?12:55
Alex_StefKiall, I did not try . Regarding what I see. will send pastebin in a sec12:56
Alex_StefI am creating record for domain and see the following in the log ( the dig query fails and the BE DB has no record for the record I created )12:57
Alex_Stefhttp://pastebin.com/ycWAEsh4 Kiall12:58
*** nyechiel_ has joined #openstack-dns13:00
KiallOkay, and - in BIND, did the zone get provisioned correctly?13:00
Alex_Stefnyechiel, Hi :)13:01
*** nyechiel has quit IRC13:01
KiallOften, when we see oddness with provisoning, it's because the DNS server isn't trusting us to create / delete etc zones.. So that would be the first thing I check13:01
KiallYou would see entries in bind logs re creating the zone via a RNDC call13:02
Alex_StefKiall, I believe so, I saw it under /var/named/... and I did it with several zones ( domains) . I see the SOA and NS records. But not the created A record13:03
Alex_StefBTW when I delete domain , the slave file for this domain is not deleted13:03
*** EricGonczer_ has joined #openstack-dns13:03
KiallOkay, in that, do you see the correct list of mdns servers under the masters section?13:03
Kiallre deletion, yea.. let me dig that out.13:04
Kiallbind>=9.10.0 is needed + https://github.com/openstack/designate/commit/7618d073c9ee81cdf835f603e9030f6dd09b6d7513:04
KiallPrevious to that, bind had no way for us to clear the old files out13:04
Alex_StefKiall, ohhh nice to know that.13:06
*** EricGonc_ has joined #openstack-dns13:06
Alex_Stef1 sec13:06
Alex_Stefwhere should I see the list of mdns servers ?13:07
Alex_StefKiall,13:07
KiallIt depends on how bind is configured.. but, in those files it's not deleting :)13:07
KiallCould you paste the contents of one of those? (Obv replace anything senstive)13:08
*** EricGonczer_ has quit IRC13:10
Alex_StefOne of those: Bind logs or ?13:10
Kiallthe leftover files :)13:10
Kiallit should have the zone defintion / masters etc in it :)13:11
Alex_StefSorry I lost u a little bit13:11
Alex_Stef[root@rheldesignate ~(keystone_admin)]# vi /etc/named13:11
Alex_Stefnamed/               named.conf.orig      named.rfc1912.zones13:11
Alex_Stefnamed.conf           named.iscdlv.key     named.root.key13:11
KiallOkay .. Somewhere under .. /var/cache/bind/ I think, you should see some .nzf files, 1 per zone, from memory with random names13:11
Kiall(Not sure where RHEL keeps these files :))13:12
Alex_Stefok got it13:12
Alex_Stefsec13:12
*** EricGonc_ has quit IRC13:13
Alex_Stefzone "example1.com" { type slave; masters { X.X.X.X port 5354;}; file "slave.example1.com.70d7f452-f316-4b7f-8109-c11c7b48866e"; };13:13
Alex_Stefthis is what is in the .nzf file13:13
KiallOkay, from the bind server .. can you "dig @X.X.X.X -p 5354 example1.com. AXFR"13:14
*** chlong has quit IRC13:15
Alex_Stefhttp://pastebin.com/fYxuHeiv13:15
Alex_StefYep13:15
Alex_Stefwhat did we do with that request ( axfr)13:16
KiallOkay, so that pieces is good.. Can you check if the slave.example1.com.70d7f452-f316-4b7f-8109-c11c7b48866e file has the right zone content?13:17
Alex_Stefjust did and yes13:17
Alex_StefI see13:17
Kiallre "what did we do with that request ( axfr)" - AXFR does a zone transfer - i.e. give me every piece of content from the zone, it's the same thing BIND will do to get the data when things change.13:18
Alex_StefDid we sent an update to the BE ?13:18
Alex_StefOhh ok so u answer me13:18
KiallNope, we just pulled a copy of the contents with dig, the same way BIND would, to validate BIND had good settings.. We prob could have just checked the file ;)13:18
Alex_Steflet me test in on another setu p13:19
Alex_Stefok13:20
KiallOkay.. So.. Next thing to check is..  In your designate.conf, you'll have 1 or more [pool_nameserver:*] sections, from the machines running designate-mdns - can you `dig @IP-FROM-CONFIG -p PORT-FROM-CONFIG example.com. SOA`13:20
openstackgerritFederico Ceratto proposed openstack/designate: Switch to  mock fixtures, minor cleanup  https://review.openstack.org/27303113:21
Alex_Stefbefore that - I checked the BIND DB on another setup and it is updated as needed13:22
Alex_Stef:|13:22
Alex_Stefhttp://pastebin.com/ajNMya0r13:22
Alex_StefKiall, ^13:23
KiallSo - that's from another Bind server?13:23
KiallAlso, if you can paste your config, with extra caution to remove anything sensitive of couse, that would be handy - just to double check things look OK.13:24
Alex_StefI have 2 environments . yesterday on both of them the BE was not updated . Now I tested both of them and BE is updated . Created new record - BE did not update yet13:25
KiallOkay, that sounds about right for what I suspect is happening :)13:26
KiallCan you give the thing I mentioned above a go? (The "Next thing to check is..  " message)13:26
KiallI'm betting that fails, which explains ERROR status and massive delays pushing out content13:26
Alex_Stefok 1 sec pls :)13:27
*** chlong has joined #openstack-dns13:28
Alex_StefKiall,13:31
Alex_Stefhttp://pastebin.com/EfXpk2hu13:31
KiallBingo :)13:31
*** rsyed_away is now known as rsyed13:31
KiallIs X.X.X.X the right IP for one of your bind servers?13:31
Alex_StefYes13:32
KiallAny firewalls in the middle?13:32
Alex_StefMy designate and bind are on the same server13:32
Alex_Stefon same machine13:32
KiallIs x.x.x.x 127.0.0.1 by any chance? If not, can you `sudo netstat -lnp | grep 53` and check if there's a *:53 or X.X.X.X:53 entry?13:33
KiallBasically, mdns needs to be able to reach your BIND server, so it can A) tell bind there is new content available, avoiding the huge delay and B) to check if BIND has finished transferring the contents over so it can move the zone from PENDING -> ACTIVE13:35
KiallAfter a certain amount of time, we'll move the zone to ERROR, as as far as designate is concerned, the content never made it to the DNS server.13:35
Alex_StefI have both x.x.x.x and 1270..0.1 :53 in the output13:36
KiallIs this running inside nova? and is x.x.x.x a floating IP?13:37
Alex_StefBTW where can I read about the stages and processes , etc ?13:37
Kiallah, won't be a FIP if it's in netstat output. ignore me13:37
Alex_StefKiall, its ok m813:37
KiallGood question, we're terrible and getting good and complete docs :(13:37
Alex_StefKiall, u will have to write one it seems like u know what are u doing :)13:38
KiallAt HP., we have a bunch of arch diagrams, flow diagrams, etc. We should sanitize and publish those.13:38
Alex_StefI will be a happier person when u will13:39
Alex_StefBTW,13:39
Alex_StefI tested designate on Kilo13:39
Alex_Stefboth bind and pdns13:40
Alex_Stefand I did not see that issue. So I believe the config is ok . 1 sec will send u13:41
Kiallbrb - Anyway, that failing `dig` command suggests bind/iptables/etc is setup incorrectly13:41
Kiallor X.X.X.X isn't actually the bind server :13:41
Kiallhard to tell from IRC :D13:41
Kiallbrb13:41
Alex_StefK13:44
Alex_StefBut how can we explain that eventually the BE DB is updated ?13:44
Alex_Stefbrb13:47
*** richm has joined #openstack-dns13:48
KiallAlex_Stef: sequence diagram of all the steps executed while creating / updating / deleteing records - https://dl.dropboxusercontent.com/u/1400487/Seq-RRSet-CUD.png13:53
Kiallyou're stuck in that loop on the bottom right13:53
Kiallbrb again13:53
*** fawadkhaliq has quit IRC13:55
*** fawadk has joined #openstack-dns13:55
Kiallback13:59
Alex_StefLooked at the diagram. yeah looks like I am ( in that loop) . What I do not understand that if there is an iptables blocking the way to the BIND it would not get updated eventually14:03
Alex_StefBTW great diagram14:03
*** sonuk has joined #openstack-dns14:05
KiallWell, there's connections going in 2 directions - from mDNS -> BIND udp+tcp/53 and tcp/953, and from BIND -> mDNS on udp+tcp/535414:06
Kiallso rules could be blocking any of those14:07
Kiall(well - we know that  mDNS -> BIND on tcp/953 works, and BIND -> mDNS on udp+tcp/5354 works14:07
KiallmDNS -> BIND udp+tcp/53 is what's failing14:07
Kialleither because of bad config in designate, or firewall, or something else :)14:08
Kialland it's mugsie's diagram ;)14:08
* mugsie needs to move that from viso to a new text based format to upstream it14:09
KiallCould you paste your designate config? taking care that if you replace IPs etc, use different+consistent placeholders for each IP ;)14:09
*** fawadk has quit IRC14:12
Alex_StefYep. 1 sec14:13
*** fawadkhaliq has joined #openstack-dns14:15
*** fawadkhaliq has quit IRC14:16
Alex_Stefhttp://pastebin.com/tXHwnF9k14:18
Alex_StefKiall, ^14:18
KiallOkay, and every x.x.x.x was the same IP before replacing it?14:19
Alex_Stefyes14:20
Kiallis iptables configured on the host? `sudo iptables -nL`  - running out of ideas here :)14:22
Alex_Stefyep. this is what I configured14:23
Alex_StefAdd firewall rules for DNSaaS:14:23
Alex_Stef# iptables -I INPUT -p tcp -m multiport --dports 9001 -m comment --comment "designate incoming" -j ACCEPT14:23
Alex_Stef# iptables -I INPUT -p tcp -m multiport --dports 5354 -m comment --comment "Designate mdns incoming" -j ACCEPT14:23
Alex_StefIf hosting DNS locally, ensure that the required rules are open:14:23
Alex_Stef# iptables -I INPUT -p tcp -m multiport --dports 53 -m comment --comment "bind/powerdns incoming" -j ACCEPT14:23
Alex_Stef# iptables -I INPUT -p udp -m multiport --dports 53 -m comment --comment "bind/powerdns incoming" -j ACCEPT14:24
Alex_Stef# iptables -I INPUT -p tcp -m multiport --dports 953 -m comment --comment "rndc incoming - bind only" -j ACCEPT14:24
Alex_Stef# service iptables save; service iptables restart14:24
Alex_Stefsorry about the laziness . will redo in pastebin14:24
Alex_Stefhttp://pastebin.com/i1dpPngw14:24
*** mlavalle has joined #openstack-dns14:26
Kiallaha, can you try flushing the rules to get rid of them? It doesn't look like there's something missing there, but.. it's easy to do / undo :) `sudo iptables -F`14:26
Kiallthen retry the `dig @IP-FROM-CONFIG -p PORT-FROM-CONFIG example.com. SOA`14:27
Alex_Stefjust -F or should I add something ?14:28
Kialljust -F  - it will clear out all the rules and leave you with "allow everything"14:29
Alex_Stefok14:32
Alex_Stef; (1 server found)14:33
Alex_Stef;; global options: +cmd14:33
Alex_Stef;; connection timed out; no servers could be reached14:33
KiallWhat about `dig @127.0.0.1 -p 53 example.com. SOA` - also fails?14:33
Alex_Stefnope14:33
Alex_Stefhttp://pastebin.com/Ct6tnwsb14:34
KiallSo - If you can't query bind, there's something wrong with it's setup!14:34
Kiallthat command is just issuing a standard query against the bind server, if it's not answering, something is wrong with it's setup14:35
Alex_StefOk want to hear  something disturbing ? :)14:35
Kialllol - what?14:35
Kiallbind wasn't running? :D14:35
Alex_StefOn my other setup - both requests are good but the dig query for a record A is failing14:36
Alex_StefI wish14:36
KiallHonestly, I'm fresh out of ideas, until BIND answers DNS queries, designate can't do much with it :)14:37
Alex_StefOk on the first setup ( not the one thas SOA is good )tells me the following: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out14:38
Kiallthats in the Bind logs? Pretty sure that's ignorably.14:39
Kiallignorable14:40
*** sonuk has quit IRC14:40
Alex_Stefnamed* logs14:40
Alex_StefJan 27 09:31:10 overcloud-controller-0.localdomain named[32739]: client 127.0.0.1#41871 (example.com): query (cache) 'example.com/SOA/IN' denied14:40
Alex_StefJan 27 09:33:53 overcloud-controller-0.localdomain named[32739]: client 127.0.0.1#54473 (example.com): query (cache) 'example.com/SOA/IN' denied14:40
Alex_StefI will have to try to reinstall it or something . Why I think it is a bug: I used the same config and every thing before and it worked . I wil try to find what is wrong Kiall14:42
KiallGood luck :)14:43
Alex_StefTnx14:44
*** mlavalle has quit IRC14:44
Alex_StefKiall, was great working with . tnx alot14:44
*** mlavalle has joined #openstack-dns14:45
*** rsyed is now known as rsyed_away14:50
Alex_Stefhttp://creately.com/diagram/i0oy4zo12/designate-bind9-backend-flow14:54
Alex_Stefjust sharing14:54
*** ducttape_ has joined #openstack-dns14:56
*** rsyed_away is now known as rsyed15:05
*** mlavalle has quit IRC15:21
*** mlavalle has joined #openstack-dns15:22
*** russStarr has joined #openstack-dns15:32
*** fawadkhaliq has joined #openstack-dns15:40
*** fawadkhaliq has quit IRC15:40
*** fawadkhaliq has joined #openstack-dns15:40
*** rsyed is now known as rsyed_away15:44
*** mlavalle has quit IRC15:46
*** mlavalle has joined #openstack-dns15:46
*** rsyed_away is now known as rsyed15:48
*** Alex_Stef has quit IRC15:57
*** mlavalle has quit IRC15:58
*** mlavalle has joined #openstack-dns15:58
*** naggappan has quit IRC15:59
openstackgerritGraham Hayes proposed openstack/python-designateclient: Allow the OSC CLI Plugin to walk pages  https://review.openstack.org/27313616:21
*** ducttape_ has quit IRC16:23
*** ducttape_ has joined #openstack-dns16:30
*** bpokorny has joined #openstack-dns16:41
*** james_li has joined #openstack-dns16:47
*** bpokorny has quit IRC16:50
*** russStarr has quit IRC16:50
*** bpokorny has joined #openstack-dns16:50
openstackgerritTim Simmons proposed openstack/designate-specs: Expose Inherited Recordset TTLs  https://review.openstack.org/27314816:57
*** rudrajit has joined #openstack-dns17:00
*** rudrajit has quit IRC17:02
*** rudrajit has joined #openstack-dns17:03
*** nyechiel has joined #openstack-dns17:06
*** nyechiel_ has quit IRC17:06
*** RamTalari has joined #openstack-dns17:10
*** RamTalari is now known as ramt17:10
ramtHi17:10
ramtmugsie and kiall you there?17:11
mugsieramt: we are in the weekly IRC meeting right now17:11
ramtlink please17:11
mugsiewe are in #openstack-meeting-alty17:12
mugsiewe are in #openstack-meeting-alt *17:12
*** Ram_ has joined #openstack-dns17:12
*** flamebot has joined #openstack-dns17:12
Ram_I think they are on #openstack-meeting-alt17:13
*** Ram_ has quit IRC17:13
openstackgerritKiall Mac Innes proposed openstack/designate: Fixes wording of exceptions for delete  https://review.openstack.org/27316017:15
openstackgerritKiall Mac Innes proposed openstack/designate: Fix _assert_exception()  https://review.openstack.org/27316117:16
*** ccneill has joined #openstack-dns17:22
*** jasonsb has joined #openstack-dns17:29
*** pglass has joined #openstack-dns17:49
*** fawadkhaliq has quit IRC17:51
*** ramt has quit IRC17:54
*** ducttape_ has quit IRC17:59
*** ducttape_ has joined #openstack-dns18:04
*** johnbelamaric has quit IRC18:18
*** jordanP has quit IRC18:18
*** nyechiel has quit IRC18:22
*** jasonsb has quit IRC18:34
*** ccneill has quit IRC18:45
*** ducttape_ has quit IRC18:53
*** ccneill has joined #openstack-dns19:01
*** ccneill has quit IRC19:01
*** ccneill has joined #openstack-dns19:02
*** james_li has quit IRC19:04
*** ducttape_ has joined #openstack-dns19:09
*** boris-42 has quit IRC19:13
*** james_li has joined #openstack-dns19:16
*** penick has joined #openstack-dns19:22
*** james_li has quit IRC19:24
*** bpokorny_ has joined #openstack-dns19:29
*** james_li has joined #openstack-dns19:29
*** bpokorny_ has quit IRC19:29
*** bpokorny_ has joined #openstack-dns19:29
*** bpokorny has quit IRC19:32
*** rudrajit has quit IRC19:39
*** GonZo2K has joined #openstack-dns19:54
*** pglbutt has joined #openstack-dns20:05
*** barra204 has quit IRC20:06
*** pglass has quit IRC20:07
*** ducttape_ has quit IRC20:11
openstackgerritGraham Hayes proposed openstack/python-designateclient: Allow the OSC CLI Plugin to walk pages  https://review.openstack.org/27313620:12
*** ducttape_ has joined #openstack-dns20:23
*** bpokorny_ has quit IRC20:24
*** bpokorny has joined #openstack-dns20:24
*** RuiChen has quit IRC20:26
*** RuiChen has joined #openstack-dns20:26
*** pglass has joined #openstack-dns20:38
*** pglbutt has quit IRC20:41
*** EricGonczer_ has joined #openstack-dns20:45
*** james_li has quit IRC21:12
*** james_li has joined #openstack-dns21:22
*** sonuk has joined #openstack-dns21:30
*** bpokorny_ has joined #openstack-dns21:41
*** bpokorny_ has quit IRC21:41
*** bpokorny_ has joined #openstack-dns21:42
*** bpokorny has quit IRC21:44
*** EricGonczer_ has quit IRC21:45
*** rudrajit has joined #openstack-dns21:45
*** bpokorny_ has quit IRC21:52
*** bpokorny has joined #openstack-dns21:52
*** bpokorny has quit IRC22:11
*** EricGonczer_ has joined #openstack-dns22:21
*** rudrajit_ has joined #openstack-dns22:24
*** rudraji__ has joined #openstack-dns22:25
*** penick has quit IRC22:27
*** rudrajit has quit IRC22:28
*** rudrajit_ has quit IRC22:28
*** bpokorny has joined #openstack-dns22:30
*** bpokorny_ has joined #openstack-dns22:34
*** bpokorny_ has quit IRC22:35
*** bpokorny has quit IRC22:35
*** pglbutt has joined #openstack-dns22:36
*** bpokorny has joined #openstack-dns22:36
*** penick has joined #openstack-dns22:37
*** pglass_ has joined #openstack-dns22:37
*** pglass has quit IRC22:39
*** pglbutt has quit IRC22:41
*** RA_ has joined #openstack-dns22:42
*** km has joined #openstack-dns23:08
*** chlong has quit IRC23:18
openstackgerritGraham Hayes proposed openstack/python-designateclient: Allow the OSC CLI Plugin to walk pages  https://review.openstack.org/27313623:26
*** kei_yama has joined #openstack-dns23:28
*** chlong has joined #openstack-dns23:31
*** bpokorny_ has joined #openstack-dns23:31
*** pglass_ has quit IRC23:32
*** bpokorny_ has quit IRC23:32
*** bpokorny_ has joined #openstack-dns23:32
*** pglass has joined #openstack-dns23:33
*** bpokorny has quit IRC23:35
*** pglass has quit IRC23:35
*** bpokorny_ has quit IRC23:38
*** ccneill has quit IRC23:38
*** bpokorny has joined #openstack-dns23:40
*** bpokorny has quit IRC23:42
*** mlavalle has quit IRC23:43
*** ducttape_ has quit IRC23:43
*** bpokorny has joined #openstack-dns23:49

Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!